Mit der Campaign Manager 360 API können Sie Berichtsdateien herunterladen, die das Ergebnis eines Report Builder-Berichts sind. Außerdem können Nutzer über einen Link direkten Zugriff auf eine Datei erhalten.
Je nach Art des gewünschten Downloads können Sie eine der folgenden Methoden verwenden:
- Direkter Download: Files.get mit dem Parameter
alt=media
. - Dateien in einem Browser herunterladen –
browserUrl
aus der Ressource „Dateien“.
Der Rest dieses Handbuchs enthält eine detaillierte Anleitung dazu, wie Sie diese Arten von Downloads über die Ressource "Files" ausführen.
Vorbereitung
Sie benötigen einige Informationen, um eine Datei herunterladen zu können:
- Die ID des Berichts, zu dem die Datei gehört. Dazu können Sie einen neuen Bericht erstellen oder einen vorhandenen Bericht aufrufen.
- Die ID der herunterzuladenden Datei. Dazu können Sie den Bericht aus dem vorherigen Schritt ausführen oder die Liste der vorhandenen Dateien wie im folgenden Beispiel abfragen:
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
Das Feld status
der Dateiressource muss auf REPORT_AVAILABLE
festgelegt sein, damit heruntergeladen werden kann.
Direkter Download
Für einen direkten Download senden Sie eine autorisierte HTTP-GET
-Anfrage an den Files-Dienst und fügen den Abfrageparameter alt=media
ein. Eine Beispielanfrage könnte so aussehen:
GET https://www.googleapis.com/dfareporting/v3.4/reports/12345/files/12345?alt=media HTTP/1.1 Authorization: Bearer your_auth_token
Beachten Sie, dass die Antwort, die Sie erhalten, eine Weiterleitung enthält. Daher sollte Ihre Anwendung idealerweise für die automatische Verarbeitung dieser Weiterleitung konfiguriert sein. Wenn du dies manuell tun möchtest, findest du die Weiterleitungs-URL im Location
-Header der Antwort.
Die meisten offiziellen Google-Clientbibliotheken bieten praktische Methoden zum Starten eines direkten Downloads, wie im folgenden Beispiel gezeigt. Wenn Sie einen Download lieber manuell starten möchten, finden Sie im Feld apiUrl
der Dateiressource eine vordefinierte URL.
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
Fortsetzbare Downloads
Beim Herunterladen großer Berichtsdateien kann es vorkommen, dass der Download nach der Hälfte fehlschlägt. Damit ein fehlgeschlagener Download leichter wiederhergestellt und fortgesetzt werden kann, unterstützt der Dateidienst eine Funktion für teilweise Downloads.
Beim teilweisen Download werden bestimmte Teile einer Datei angefordert, sodass Sie große Downloads in kleinere Blöcke aufteilen können. Sie können angeben, welchen Teil einer Datei Sie herunterladen möchten, indem Sie einen Bytebereich in den Range
-HTTP-Header Ihrer Anfrage einfügen. Beispiel:
Range: bytes=500-999
Viele Clientbibliotheken bieten einen Teildownload über einen Media Download-Dienst. Weitere Informationen finden Sie in der Dokumentation zur Clientbibliothek.
Dateien in einem Browser herunterladen
Wenn Sie Nutzern die Möglichkeit bieten möchten, eine Datei direkt aus ihrem Webbrowser herunterzuladen, können Sie die URL im Feld browserUrl
der Dateiressource verwenden. Sie können einen Nutzer zu dieser URL weiterleiten oder die URL als anklickbaren Link anbieten. In beiden Fällen muss der Nutzer in einem Google-Konto mit Zugriff auf Campaign Manager 360-Berichte angemeldet sein und die erforderlichen Berechtigungen für den Zugriff auf die angegebene Datei haben, um den Download starten zu können.
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