রিপোর্ট ফাইল ডাউনলোড করুন

ক্যাম্পেইন ম্যানেজার ৩৬০ এপিআই আপনাকে রিপোর্ট ফাইল ডাউনলোড করার সুযোগ দেয়, যা একটি রিপোর্ট বিল্ডার রিপোর্ট চালানোর ফলাফল। এটি ব্যবহারকারীদের একটি লিঙ্কের মাধ্যমে সরাসরি ফাইলে অ্যাক্সেস দেওয়ার সুবিধাও প্রদান করে।

আপনি কোন ধরনের ডাউনলোড করতে চান, তার উপর নির্ভর করে নিম্নলিখিত পদ্ধতিগুলোর মধ্যে একটি ব্যবহার করবেন:

  • সরাসরি ডাউনলোড — Files.get-alt=media প্যারামিটার ব্যবহার করে।
  • ব্রাউজারে ফাইল ডাউনলোড করুন — ফাইলস রিসোর্স থেকে browserUrl

এই নির্দেশিকার বাকি অংশে ফাইল রিসোর্সের মাধ্যমে এই ধরনের ডাউনলোডগুলি সম্পাদন করার জন্য বিস্তারিত নির্দেশাবলী দেওয়া হয়েছে।

পূর্বশর্ত

একটি ফাইল ডাউনলোড করার জন্য আপনার কয়েকটি তথ্যের প্রয়োজন হবে:

  1. ফাইলটি যে রিপোর্টের অন্তর্গত, তার আইডি। আপনি একটি নতুন রিপোর্ট তৈরি করে অথবা বিদ্যমান কোনো রিপোর্ট খুঁজে নিয়ে এটি পেতে পারেন।
  2. ডাউনলোড করার ফাইলের আইডি। আপনি পূর্ববর্তী ধাপের রিপোর্টটি চালিয়ে , অথবা নীচের উদাহরণের মতো বিদ্যমান ফাইলগুলির তালিকা কোয়েরি করে এটি খুঁজে পেতে পারেন:

সি#

File target = null;
FileList files;
String nextPageToken = null;

do {
  // Create and execute the files list request.
  ReportsResource.FilesResource.ListRequest request =
      service.Reports.Files.List(profileId, reportId);
  request.PageToken = nextPageToken;
  files = request.Execute();

  foreach (File file in files.Items) {
    if (IsTargetFile(file)) {
      target = file;
      break;
    }
  }

  // Update the next page token.
  nextPageToken = files.NextPageToken;
} while (target == null
    && files.Items.Any()
    && !String.IsNullOrEmpty(nextPageToken));

জাভা

File target = null;
FileList files;
String nextPageToken = null;

do {
  // Create and execute the files list request.
  files = reporting.reports().files().list(profileId, reportId).setPageToken(nextPageToken)
      .execute();

  for (File file : files.getItems()) {
    if (isTargetFile(file)) {
      target = file;
      break;
    }
  }

  // Update the next page token.
  nextPageToken = files.getNextPageToken();
} while (target == null
    && !files.getItems().isEmpty()
    && !Strings.isNullOrEmpty(nextPageToken));

পিএইচপি

$target = null;
$response = null;
$pageToken = null;

do {
    // Create and execute the file list request.
    $response = $this->service->reports_files->listReportsFiles(
        $userProfileId,
        $reportId,
        ['pageToken' => $pageToken]
    );

    foreach ($response->getItems() as $file) {
        if ($this->isTargetFile($file)) {
            $target = $file;
            break;
        }
    }

    $pageToken = $response->getNextPageToken();
} while (empty($target) && !empty($response->getItems()) && !empty($pageToken));

পাইথন

target = None

request = (
    service.reports()
    .files()
    .list(profileId=str(profile_id), reportId=str(report_id))
)

while True:
  response = request.execute()

  for report_file in response['items']:
    if is_target_file(report_file):
      target = report_file
      break

  if not target and response['items'] and response['nextPageToken']:
    request = service.reports().files().list_next(request, response)
  else:
    break

রুবি

page_token = nil
target = nil

loop do
  result = service.list_report_files(profile_id, report_id,
    page_token: page_token)

  result.items.each do |file|
    if target_file?(file)
      target = file
      break
    end
  end

  page_token = (result.next_page_token if target.nil? && result.items.any?)
  break if page_token.to_s.empty?
end        

মনে রাখবেন, ডাউনলোড করার যোগ্য হতে হলে ফাইল রিসোর্সের status ফিল্ডটি অবশ্যই REPORT_AVAILABLE এ সেট করা থাকতে হবে।

সরাসরি ডাউনলোড

সরাসরি ডাউনলোড করার জন্য, আপনাকে ফাইলস সার্ভিসে একটি অনুমোদিত HTTP GET অনুরোধ পাঠাতে হবে এবং alt=media কোয়েরি প্যারামিটারটি অন্তর্ভুক্ত করতে হবে। একটি উদাহরণ অনুরোধ দেখতে এইরকম হতে পারে:

GET https://www.googleapis.com/dfareporting/v5/reports/12345/files/12345?alt=media HTTP/1.1
Authorization: Bearer your_auth_token

মনে রাখবেন যে আপনি যে প্রতিক্রিয়াটি পাবেন তাতে একটি রিডাইরেক্ট থাকবে, তাই আপনার অ্যাপ্লিকেশনটি আদর্শগতভাবে এটি স্বয়ংক্রিয়ভাবে পরিচালনা করার জন্য কনফিগার করা উচিত। আপনি যদি এটি ম্যানুয়ালি পরিচালনা করতে চান, তাহলে আপনি প্রতিক্রিয়ার Location হেডারে রিডাইরেক্ট URL-টি খুঁজে নিতে পারেন।

বেশিরভাগ অফিসিয়াল গুগল ক্লায়েন্ট লাইব্রেরিতে সরাসরি ডাউনলোড শুরু করার জন্য সুবিধাজনক মেথড থাকে, যেমনটি নিচের উদাহরণে দেখানো হয়েছে। আপনি যদি ম্যানুয়ালি ডাউনলোড শুরু করতে চান, তাহলে ফাইল রিসোর্সের apiUrl ফিল্ডে একটি আগে থেকে তৈরি করা URL দেওয়া থাকে।

সি#

// Retrieve the file metadata.
File file = service.Files.Get(reportId, fileId).Execute();

if ("REPORT_AVAILABLE".Equals(file.Status)) {
  // Create a get request.
  FilesResource.GetRequest getRequest = service.Files.Get(reportId, fileId);

  // Optional: adjust the chunk size used when downloading the file.
  // getRequest.MediaDownloader.ChunkSize = MediaDownloader.MaximumChunkSize;

  // Execute the get request and download the file.
  using (System.IO.FileStream outFile = new System.IO.FileStream(GenerateFileName(file),
      System.IO.FileMode.Create, System.IO.FileAccess.Write)) {
    getRequest.Download(outFile);
    Console.WriteLine("File {0} downloaded to {1}", file.Id, outFile.Name);
  }
}

জাভা

// Retrieve the file metadata.
File file = reporting.files().get(reportId, fileId).execute();

if ("REPORT_AVAILABLE".equals(file.getStatus())) {
  // Prepare a local file to download the report contents to.
  java.io.File outFile = new java.io.File(Files.createTempDir(), generateFileName(file));

  // Create a get request.
  Get getRequest = reporting.files().get(reportId, fileId);

  // Optional: adjust the chunk size used when downloading the file.
  // getRequest.getMediaHttpDownloader().setChunkSize(MediaHttpDownloader.MAXIMUM_CHUNK_SIZE);

  // Execute the get request and download the file.
  try (OutputStream stream = new FileOutputStream(outFile)) {
    getRequest.executeMediaAndDownloadTo(stream);
  }

  System.out.printf("File %d downloaded to %s%n", file.getId(), outFile.getAbsolutePath());
}

পিএইচপি

// Retrieve the file metadata.
$file = $this->service->files->get($reportId, $fileId);

if ($file->getStatus() === 'REPORT_AVAILABLE') {
    try {
        // Prepare a local file to download the report contents to.
        $fileName = join(
            DIRECTORY_SEPARATOR,
            [sys_get_temp_dir(), $this->generateFileName($file)]
        );
        $fileResource = fopen($fileName, 'w+');
        $fileStream = \GuzzleHttp\Psr7\stream_for($fileResource);

        // Execute the get request and download the file.
        $httpClient = $this->service->getClient()->authorize();
        $result = $httpClient->request(
            'GET',
            $file->getUrls()->getApiUrl(),
            [\GuzzleHttp\RequestOptions::SINK => $fileStream]
        );

        printf('<h3>Report file saved to: %s</h3>', $fileName);
    } finally {
        $fileStream->close();
        fclose($fileResource);
    }
}

পাইথন

# Retrieve the file metadata.
report_file = service.files().get(
    reportId=report_id, fileId=file_id).execute()

if report_file['status'] == 'REPORT_AVAILABLE':
  # Prepare a local file to download the report contents to.
  out_file = io.FileIO(generate_file_name(report_file), mode='wb')

  # Create a get request.
  request = service.files().get_media(reportId=report_id, fileId=file_id)

  # Create a media downloader instance.
  # Optional: adjust the chunk size used when downloading the file.
  downloader = http.MediaIoBaseDownload(
      out_file, request, chunksize=CHUNK_SIZE)

  # Execute the get request and download the file.
  download_finished = False
  while not download_finished:
    _, download_finished = downloader.next_chunk()

  print('File %s downloaded to %s' % (report_file['id'],
                                      os.path.realpath(out_file.name)))

রুবি

# Retrieve the file metadata.
report_file = service.get_file(report_id, file_id)
return unless report_file.status == 'REPORT_AVAILABLE'

# Prepare a local file to download the report contents to.
File.open(generate_file_name(report_file), 'w') do |out_file|
  # Execute the download request. Providing a download destination
  # retrieves the file contents rather than the file metadata.
  service.get_file(report_id, file_id, download_dest: out_file)

  puts format('File %s downloaded to %s', file_id,
    File.absolute_path(out_file.path))
end

পুনরায় শুরুযোগ্য ডাউনলোড

বড় আকারের রিপোর্ট ফাইল ডাউনলোড করার সময়, ডাউনলোডটি মাঝপথে ব্যর্থ হতে পারে। ব্যর্থ হওয়া ডাউনলোড পুনরুদ্ধার এবং পুনরায় শুরু করা সহজ করার জন্য, ফাইল পরিষেবাটি আংশিক ডাউনলোড কার্যকারিতা সমর্থন করে।

আংশিক ডাউনলোডের মাধ্যমে কোনো ফাইলের নির্দিষ্ট অংশ ডাউনলোডের অনুরোধ করা হয়, যা আপনাকে বড় ডাউনলোডকে ছোট ছোট অংশে ভাগ করার সুযোগ দেয়। আপনার অনুরোধের Range HTTP হেডারে একটি বাইট রেঞ্জ অন্তর্ভুক্ত করে আপনি ফাইলের কোন অংশটি ডাউনলোড করতে চান তা নির্দিষ্ট করে দিতে পারেন। উদাহরণস্বরূপ:

Range: bytes=500-999

অনেক ক্লায়েন্ট লাইব্রেরি একটি মিডিয়া ডাউনলোড সার্ভিসের মাধ্যমে আংশিক ডাউনলোডের সুবিধা দিয়ে থাকে। বিস্তারিত জানতে ক্লায়েন্ট লাইব্রেরির ডকুমেন্টেশন দেখুন।

ব্রাউজারে ফাইল ডাউনলোড করুন

আপনি যদি ব্যবহারকারীদের তাদের ওয়েব ব্রাউজার থেকে সরাসরি একটি ফাইল ডাউনলোড করার সুযোগ দিতে চান, তাহলে আপনি ফাইল রিসোর্সের browserUrl ফিল্ডে দেওয়া URL-টি ব্যবহার করতে পারেন। আপনি একজন ব্যবহারকারীকে এই URL-এ রিডাইরেক্ট করতে পারেন, অথবা এটিকে একটি ক্লিকযোগ্য লিঙ্ক হিসেবে প্রদান করতে পারেন। উভয় ক্ষেত্রেই, ডাউনলোড শুরু করার জন্য ব্যবহারকারীকে Campaign Manager 360 রিপোর্টিং-এ অ্যাক্সেস আছে এমন একটি Google অ্যাকাউন্টে লগ ইন করা থাকতে হবে এবং নির্দিষ্ট ফাইলটি অ্যাক্সেস করার জন্য তার সঠিক অনুমতি থাকতে হবে।

সি#

File file = service.Files.Get(reportId, fileId).Execute();
String browserUrl = file.Urls.BrowserUrl;

জাভা

File file = reporting.files().get(reportId, fileId).execute();
String browserUrl = file.getUrls().getBrowserUrl();

পিএইচপি

$file = $this->service->files->get($reportId, $fileId);
$browserUrl = $file->getUrls()->getBrowserUrl();

পাইথন

report_file = (
    service.files()
    .get(reportId=str(report_id), fileId=str(file_id))
    .execute()
)
browser_url = report_file['urls']['browserUrl']

রুবি

report_file = service.get_file(report_id, file_id)
browser_url = report_file.urls.browser_url