L'API Campaign Manager 360 vous permet de télécharger les fichiers de rapports générés par l'outil de création de rapports. Il permet également de fournir aux utilisateurs un accès direct à un fichier via un lien.
Selon le type de téléchargement que vous souhaitez effectuer, vous pouvez utiliser l'une des approches suivantes:
- Téléchargement direct : Files.get avec le paramètre
alt=media
. - Téléchargez des fichiers dans un navigateur (
browserUrl
à partir de la ressource Fichiers).
Le reste de ce guide fournit des instructions détaillées sur le téléchargement de ces types de fichiers à l'aide de la ressource Fichiers.
Prérequis
Pour télécharger un fichier, vous avez besoin de quelques informations:
- ID du rapport auquel appartient le fichier. Pour ce faire, créez un rapport ou consultez un rapport existant.
- ID du fichier à télécharger. Pour ce faire, exécutez le rapport de l'étape précédente ou interrogez la liste des fichiers existants, comme dans l'exemple ci-dessous:
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
Notez que le champ status
de la ressource du fichier doit être défini sur REPORT_AVAILABLE
pour que le téléchargement puisse être effectué.
Téléchargement direct
Pour effectuer un téléchargement direct, vous devez envoyer une requête HTTP GET
autorisée au service Fichiers et inclure le paramètre de requête alt=media
. Voici un exemple de requête:
GET https://www.googleapis.com/dfareporting/v3.4/reports/12345/files/12345?alt=media HTTP/1.1 Authorization: Bearer your_auth_token
Sachez que la réponse que vous recevez contiendra une redirection. Dans l'idéal, votre application doit donc être configurée pour gérer cela automatiquement. Si vous préférez gérer cela manuellement, vous trouverez l'URL de redirection dans l'en-tête Location
de la réponse.
La plupart des bibliothèques clientes officielles de Google proposent des méthodes pratiques pour lancer un téléchargement direct, comme illustré dans l'exemple ci-dessous. Si vous préférez lancer un téléchargement manuellement, une URL préconstruite est fournie dans le champ apiUrl
de la ressource du fichier.
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
Téléchargements avec reprise
Lorsque vous téléchargez des rapports volumineux, il est possible que le téléchargement échoue en cours de route. Pour faciliter la récupération et la reprise d'un téléchargement ayant échoué, le service de fichiers est compatible avec la fonctionnalité de téléchargement partiel.
Le téléchargement partiel consiste à demander des parties spécifiques d'un fichier, ce qui vous permet de diviser les téléchargements volumineux en segments plus petits. Vous pouvez spécifier la partie d'un fichier que vous souhaitez télécharger en incluant une plage d'octets dans l'en-tête HTTP Range
de votre requête. Exemple :
Range: bytes=500-999
La fonctionnalité de téléchargement partiel est fournie par de nombreuses bibliothèques clientes via un service de téléchargement multimédia. Pour en savoir plus, consultez la documentation de la bibliothèque cliente.
Télécharger des fichiers dans un navigateur
Si vous souhaitez permettre aux utilisateurs de télécharger un fichier directement depuis leur navigateur Web, vous pouvez utiliser l'URL fournie dans le champ browserUrl
de la ressource "Fichier". Vous pouvez rediriger un utilisateur vers cette URL ou la proposer sous forme de lien cliquable. Dans les deux cas, l'utilisateur doit être connecté à un compte Google ayant accès aux rapports Campaign Manager 360 et disposer des autorisations nécessaires pour accéder au fichier spécifié. Le téléchargement ne peut commencer.
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