Campaign Manager 360 API, Rapor Oluşturucu raporu çalıştırmanın bir sonucu olarak rapor dosyalarını indirmenize olanak tanır. Ayrıca, kullanıcıların bir bağlantı üzerinden dosyaya doğrudan erişmesini de destekler.
İndirmek istediğiniz indirme türüne bağlı olarak aşağıdaki yaklaşımlardan birini kullanırsınız:
- Doğrudan indirme:
alt=media
parametresiyle Files.get. - Dosyaları bir tarayıcıda indirin. Dosyalar kaynağından
browserUrl
.
Bu kılavuzun geri kalanında, Dosyalar kaynağı üzerinden bu tür indirme işlemleri gerçekleştirmek için gereken ayrıntılı talimatları bulabilirsiniz.
Ön koşullar
Bir dosyayı indirmek için bazı bilgilere ihtiyacınız vardır:
- Dosyanın ait olduğu raporun kimliği. Bu bilgiye yeni bir rapor oluşturarak veya mevcut bir raporu arayarak ulaşabilirsiniz.
- İndirilecek dosyanın kimliği. Bu raporu önceki adımda bulunan raporu çalıştırarak veya aşağıdaki örnekte olduğu gibi mevcut dosyaların listesini sorgulayarak bulabilirsiniz:
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));
2.999
$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
Dosya kaynağının status
alanının indirilmeye uygun olması için REPORT_AVAILABLE
değerine ayarlanması gerektiğini unutmayın.
Doğrudan indirme
Bir doğrudan indirme işlemi gerçekleştirmek için Dosyalar hizmetine yetkilendirilmiş bir HTTP GET
isteği gönderir ve alt=media
sorgu parametresini dahil edersiniz. Örnek bir istek aşağıdaki gibi görünebilir:
GET https://www.googleapis.com/dfareporting/v3.4/reports/12345/files/12345?alt=media HTTP/1.1 Authorization: Bearer your_auth_token
Aldığınız yanıtın bir yönlendirme içereceğini unutmayın. Bu nedenle, uygulamanız bu işlemi otomatik olarak gerçekleştirecek şekilde yapılandırılmalıdır. Bunu manuel olarak işlemeyi tercih ederseniz yönlendirme URL'sini yanıtın Location
başlığında bulabilirsiniz.
Resmi Google istemci kitaplıklarının çoğu, aşağıdaki örnekte gösterildiği gibi doğrudan indirme başlatmak için kolay yöntemler sağlar. İndirme işlemini manuel olarak başlatmayı tercih ederseniz dosya kaynağının apiUrl
alanında önceden oluşturulmuş bir URL sağlanır.
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());
}
2.999
// 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
Devam ettirilebilir indirmeler
Büyük rapor dosyaları indirilirken, indirme işlemi yarıda kesilebilir. Başarısız bir indirme işleminin kurtarılıp devam ettirilmesini kolaylaştırmak için dosya hizmeti kısmi indirme işlevini destekler.
Kısmi indirmeler, bir dosyanın belirli bölümlerini istemek için yapılır. Bu işlem, büyük indirme işlemlerini daha küçük parçalara bölmenizi sağlar. İsteğinizin Range
HTTP üst bilgisine bayt aralığı ekleyerek bir dosyanın hangi bölümünü indirmek istediğinizi belirtebilirsiniz. Örneğin:
Range: bytes=500-999
Kısmi indirme işlevi, bir Medya İndirme hizmeti aracılığıyla birçok istemci kitaplığı tarafından sağlanır. Ayrıntılar için istemci kitaplığını inceleyin.
Tarayıcıda dosya indirme
Kullanıcılara bir dosyayı doğrudan web tarayıcılarından indirmeleri için bir yol sağlamak istiyorsanız Dosya kaynağının browserUrl
alanında sağlanan URL'yi kullanabilirsiniz. Bir kullanıcıyı bu URL'ye yönlendirebilir veya tıklanabilir bir bağlantı olarak sunabilirsiniz. Her iki durumda da kullanıcının, indirme işlemine başlamak için Campaign Manager 360 raporlamasına erişimi olan bir Google Hesabı'na giriş yapması ve belirtilen dosyaya erişmek için doğru izinlere sahip olması gerekir.
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();
2.999
$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