Campaign Manager 360 API की मदद से, रिपोर्ट की फ़ाइलें डाउनलोड की जा सकती हैं. ये फ़ाइलें, रिपोर्ट बिल्डर की रिपोर्ट चलाने पर मिलती हैं. इसके अलावा, यह उपयोगकर्ताओं को लिंक के ज़रिए सीधे किसी फ़ाइल का ऐक्सेस देने की सुविधा भी देता है.
डाउनलोड करने के लिए, इनमें से कोई एक तरीका अपनाएं:
- सीधे डाउनलोड करना — Files.get
alt=mediaपैरामीटर के साथ. - किसी ब्राउज़र में फ़ाइलें डाउनलोड करना — Files संसाधन से
browserUrl.
इस गाइड में आगे, Files संसाधन के ज़रिए इन तरह के डाउनलोड करने के बारे में ज़्यादा जानकारी दी गई है.
ज़रूरी शर्तें
किसी फ़ाइल को डाउनलोड करने के लिए, आपको यह जानकारी चाहिए:
- उस रिपोर्ट का आईडी जिससे फ़ाइल जुड़ी है. यह आईडी, नई रिपोर्ट बनाकर या किसी मौजूदा रिपोर्ट को ढूंढकर पाया जा सकता है.
- डाउनलोड की जाने वाली फ़ाइल का आईडी. यह आईडी, पिछले चरण में रिपोर्ट चलाकर या मौजूदा फ़ाइलों की सूची के लिए क्वेरी करके पाया जा सकता है. इसके लिए, नीचे दिया गया उदाहरण देखें:
C#
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));
Java
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));
PHP
$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));
Python
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
Ruby
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 पर सेट करना ज़रूरी है.
सीधे डाउनलोड करना
सीधे डाउनलोड करने के लिए, Files सेवा को अनुमति वाला एचटीटीपी 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 हेडर में रीडायरेक्ट यूआरएल देखें.
Google की ज़्यादातर आधिकारिक क्लाइंट लाइब्रेरी, सीधे डाउनलोड शुरू करने के लिए आसान तरीके उपलब्ध कराती हैं. इनके बारे में, यहां दिए गए उदाहरण में बताया गया है. अगर आपको मैन्युअल तरीके से डाउनलोड शुरू करना है, तो फ़ाइल संसाधन के apiUrl फ़ील्ड में पहले से बनाया गया यूआरएल दिया जाता है.
C#
// 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);
}
}
Java
// 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());
}
PHP
// 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);
}
}
Python
# 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)))
Ruby
# 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 एचटीटीपी हेडर में बाइट रेंज शामिल करें. उदाहरण के लिए:
Range: bytes=500-999
कई क्लाइंट लाइब्रेरी, मीडिया डाउनलोड सेवा के ज़रिए आंशिक डाउनलोड की सुविधा उपलब्ध कराती हैं. ज़्यादा जानकारी के लिए, क्लाइंट लाइब्रेरी का दस्तावेज़ देखें.
किसी ब्राउज़र में फ़ाइलें डाउनलोड करना
अगर आपको उपयोगकर्ताओं को सीधे उनके वेब ब्राउज़र से कोई फ़ाइल डाउनलोड करने का विकल्प देना है, तो फ़ाइल संसाधन के browserUrl फ़ील्ड में दिए गए यूआरएल का इस्तेमाल करें. उपयोगकर्ता को इस यूआरएल पर रीडायरेक्ट किया जा सकता है या इसे क्लिक किए जा सकने वाले लिंक के तौर पर उपलब्ध कराया जा सकता है. दोनों ही मामलों में, डाउनलोड शुरू करने के लिए, उपयोगकर्ता को Campaign Manager 360 की रिपोर्टिंग का ऐक्सेस वाले Google खाते में लॉग इन करना होगा. साथ ही, उसके पास बताई गई फ़ाइल को ऐक्सेस करने की सही अनुमतियां होनी चाहिए.
C#
File file = service.Files.Get(reportId, fileId).Execute();
String browserUrl = file.Urls.BrowserUrl;
Java
File file = reporting.files().get(reportId, fileId).execute();
String browserUrl = file.getUrls().getBrowserUrl();
PHP
$file = $this->service->files->get($reportId, $fileId);
$browserUrl = $file->getUrls()->getBrowserUrl();
Python
report_file = (
service.files()
.get(reportId=str(report_id), fileId=str(file_id))
.execute()
)
browser_url = report_file['urls']['browserUrl']
Ruby
report_file = service.get_file(report_id, file_id)
browser_url = report_file.urls.browser_url