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

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

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

  • সরাসরি ডাউনলোড — alt=media প্যারামিটার সহ Files.get
  • একটি ব্রাউজারে ফাইল ডাউনলোড করুন — ফাইল রিসোর্স থেকে 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
=profile_id, reportId=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/v3.4/reports/12345/files/12345?alt=media HTTP/1.1
Authorization: Bearer your_auth_token

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

বেশিরভাগ অফিসিয়াল Google ক্লায়েন্ট লাইব্রেরি সরাসরি ডাউনলোড শুরু করার জন্য সুবিধার পদ্ধতি প্রদান করে, যেমনটি নীচের উদাহরণে দেখানো হয়েছে। আপনি যদি ম্যানুয়ালি ডাউনলোড শুরু করতে চান, তাহলে ফাইল রিসোর্সের 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 download_finished is False:
    _
, 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-এ পুনঃনির্দেশ করতে পারেন, অথবা এটিকে একটি ক্লিকযোগ্য লিঙ্ক হিসাবে অফার করতে পারেন৷ উভয় ক্ষেত্রেই, ব্যবহারকারীকে ক্যাম্পেইন ম্যানেজার 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
=report_id, fileId=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