تتيح لك واجهة برمجة التطبيقات Campaign Manager 360 API تنزيل ملفات التقارير التي تنتج عن تشغيل تقرير "أداة إنشاء التقارير". يتيح أيضًا منح المستخدمين إذن الوصول المباشر إلى ملف من خلال رابط.
بناءً على نوع التنزيل الذي تريد تنفيذه، ستستخدم إحدى الطرق التالية:
- التنزيل المباشر: Files.get مع المَعلمة
alt=media - تنزيل الملفات في متصفّح —
browserUrlمن مورد "الملفات"
تقدّم بقية هذا الدليل تعليمات مفصّلة حول تنفيذ هذه الأنواع من عمليات التنزيل من خلال مصدر الملفات.
المتطلبات الأساسية
لتنزيل ملف، ستحتاج إلى بعض المعلومات:
- رقم تعريف التقرير الذي ينتمي إليه الملف يمكنك العثور على ذلك من خلال إنشاء تقرير جديد أو البحث عن تقرير حالي.
- معرّف الملف المطلوب تنزيله. يمكنك العثور على ذلك من خلال تشغيل التقرير من الخطوة السابقة، أو طلب البحث عن قائمة الملفات الحالية كما في المثال أدناه:
#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));
جافا
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=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
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 ليكون مؤهلاً للتنزيل.
التنزيل المباشر
لتنفيذ عملية تنزيل مباشرة، عليك إرسال طلب GET HTTP معتمد إلى خدمة "الملفات" وتضمين مَعلمة طلب البحث alt=media. قد يبدو طلب الحصول على مثال على النحو التالي:
GET https://www.googleapis.com/dfareporting/v3.4/reports/12345/files/12345?alt=media HTTP/1.1 Authorization: Bearer your_auth_token
يُرجى العِلم أنّ الردّ الذي ستتلقّاه سيتضمّن عملية إعادة توجيه، لذا من المفترض أن يتم ضبط تطبيقك للتعامل مع هذه العملية تلقائيًا. إذا كنت تفضّل التعامل مع هذا الإجراء يدويًا، يمكنك العثور على عنوان URL لإعادة التوجيه في عنوان Location الخاص بالاستجابة.
توفّر معظم مكتبات البرامج الرسمية من Google طرقًا سهلة لبدء عملية التنزيل المباشر، كما هو موضّح في المثال أدناه. إذا كنت تفضّل بدء عملية التنزيل يدويًا، يتم توفير عنوان URL مُنشأ مسبقًا في الحقل 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);
}
}
جافا
// 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 download_finished is False:
_, 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
عمليات التنزيل القابلة للاستئناف
عند تنزيل ملفات تقارير كبيرة، من المحتمل أن يتعذّر إكمال عملية التنزيل. لتسهيل استرداد عملية تنزيل فاشلة واستئنافها، تتيح خدمة الملفات وظيفة التنزيل الجزئي.
يتضمّن التنزيل الجزئي طلب أجزاء معيّنة من ملف، ما يتيح لك تقسيم عمليات التنزيل الكبيرة إلى أجزاء أصغر. يمكنك تحديد الجزء الذي تريد تنزيله من ملف من خلال تضمين نطاق بايت في عنوان HTTP Range لطلبك. على سبيل المثال:
Range: bytes=500-999
توفّر العديد من مكتبات البرامج وظيفة التنزيل الجزئي من خلال خدمة تنزيل الوسائط. يُرجى الرجوع إلى مستندات مكتبة البرامج للعملاء للحصول على التفاصيل.
تنزيل الملفات في متصفّح
إذا أردت أن توفّر للمستخدمين طريقة لتنزيل ملف مباشرةً من متصفّح الويب، يمكنك استخدام عنوان URL المقدَّم في الحقل browserUrl الخاص بمورد الملف. يمكنك إعادة توجيه المستخدم إلى عنوان URL هذا أو تقديمه كرابط قابل للنقر. في كلتا الحالتين، يجب أن يكون المستخدِم مسجّلاً الدخول إلى حساب Google لديه إذن الوصول إلى تقارير "مدير الحملة 360" وأن يكون لديه الأذونات الصحيحة للوصول إلى الملفّ المحدّد، وذلك لبدء عملية التنزيل.
#C
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();
PHP
$file = $this->service->files->get($reportId, $fileId);
$browserUrl = $file->getUrls()->getBrowserUrl();
Python
report_file = service.files().get(
reportId=report_id, fileId=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