API ของ Campaign Manager 360 ช่วยให้คุณดาวน์โหลดไฟล์รายงานได้ ซึ่งเป็นผลของการเรียกใช้รายงานเครื่องมือสร้างรายงาน และยังรองรับการเข้าถึงไฟล์โดยตรงผ่านลิงก์แก่ผู้ใช้ด้วย
คุณจะใช้วิธีการอย่างใดอย่างหนึ่งต่อไปนี้ โดยขึ้นอยู่กับประเภทการดาวน์โหลดที่คุณต้องการดําเนินการ
- การดาวน์โหลดโดยตรง — Files.get ด้วยพารามิเตอร์
alt=media
- ดาวน์โหลดไฟล์ในเบราว์เซอร์ —
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=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
จึงจะมีสิทธิ์ดาวน์โหลด
การดาวน์โหลดโดยตรง
หากต้องการดาวน์โหลดโดยตรง คุณต้องส่งคําขอ HTTP GET
ที่ได้รับอนุญาตไปที่บริการ Files และระบุพารามิเตอร์การค้นหา 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);
}
}
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 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 นี้ หรือเสนอเป็นลิงก์ที่คลิกได้ ในทั้ง 2 กรณีนี้ ผู้ใช้จะต้องเข้าสู่ระบบบัญชี Google ที่มีสิทธิ์เข้าถึงรายงาน Campaign Manager 360 และมีสิทธิ์ที่ถูกต้องในการเข้าถึงไฟล์ที่ระบุเพื่อเริ่มดาวน์โหลด
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=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