Service Manager de relatórios
Os SDKs .NET, Java e Python de Anúncios do Bing fornecem classes para acelerar a produtividade para transferir registos de relatórios de desempenho. Por exemplo, o ReportingServiceManager submeterá o seu pedido de transferência para o serviço de Relatórios, consultará o serviço até estar concluído e transferirá o ficheiro para o diretório local. O ReportingServiceManager também processa os campos de cabeçalho do pedido comuns automaticamente, permitindo especificar as propriedades Autenticação, CustomerId, AccountId e DeveloperToken no objeto AuthorizationData uma vez para cada serviço. Para obter mais informações, veja Utilizar AuthorizationData e o exemplo de código Pedidos de Relatório .
Nota
O ReportingServiceManager só está disponível com os SDKs .NET, Java e Python do Bing Ads. Quer utilize ou não um SDK, pode utilizar o Serviço de relatórios diretamente. Para obter mais informações, veja Pedir e Transferir um Relatório.
Leitor de Ficheiros de Relatório
Não precisa de implementar o seu próprio analisador de ficheiros para ler o ficheiro de Relatório. Pode utilizar o objeto ReportFileReader para ler um ficheiro CSV num contentor de Relatório .
Nota
O ReportingServiceManager utiliza um ReportFileReader em segundo plano quando transfere entidades em vez de ficheiros. Os ficheiros temporários são utilizados em segundo plano. Para obter mais detalhes, veja Diretório de Trabalho e ReportingServiceManager.
Vamos utilizar o seguinte ficheiro CSV como exemplo. Por exemplo, digamos que pretende ler o seguinte relatório a partir de um ficheiro.
"Report Name: My Keyword Performance Report"
"Report Time: 2/7/2020"
"Time Zone: (GMT-08:00) Pacific Time (US & Canada); Tijuana"
"Last Completed Available Day: 2/8/2020 10:15:00 PM (GMT)"
"Last Completed Available Hour: 2/8/2020 10:15:00 PM (GMT)"
"Report Aggregation: Summary"
"Report Filter: "
"Potential Incomplete Data: true"
"Rows: 5"
"AccountId","CampaignId","Keyword","KeywordId","DeviceType","Clicks"
"YourAccountId","YourCampaignId","red shoes","123","Computer","35"
"YourAccountId","YourCampaignId","red shoes","123","Smartphone","50"
"YourAccountId","YourCampaignId","shoes delivered","234","Computer","1"
"YourAccountId","YourCampaignId","shoe sale","345","Computer","80"
"YourAccountId","YourCampaignId","shoe sale","345","Smartphone","5"
"@2020 Microsoft Corporation. All rights reserved. "
Basta fornecer ao ReportFileReader o caminho do ficheiro e o nome do ficheiro. Em seguida, feche o ficheiro quando terminar de ler.
ReportFileReader reportFileReader = new ReportFileReader(
ResultFileName,
ReportFormat.Csv
);
Report report = reportFileReader.GetReport();
IEnumerable<IReportRecord> reportRecordIterable = reportContainer.GetReportRecords();
report.Dispose();
ReportFileReader reportFileReader = new ReportFileReader(
ResultFileName,
ReportFormat.CSV
);
Report report = reportFileReader.getReport();
Iterable<ReportRecord> reportRecords = report.getReportRecords();
report.close();
report_file_reader = ReportFileReader(
file_path=result_file_name,
format='Csv'
)
report_container=report_file_reader.get_report()
report_record_iterable=report_container.report_records
report_container.close()
Contentor de Relatórios do In-Memory
O Relatório é um contentor dentro da memória que abstrai o conteúdo de um ficheiro de relatório transferido, incluindo metadados de cabeçalho, nomes de colunas e registos de relatórios. Com estas atualizações, pode concentrar-se mais nos requisitos empresariais da sua aplicação em vez de analisar o ficheiro de relatório.
Pode aceder ao contentor de Relatórios na memória através do ReportingServiceManager ao submeter um novo pedido de transferência ou ao utilizar o ReportFileReader para ler a partir de um ficheiro de relatório que já transferiu.
Por exemplo, pode obter um objeto Relatório ao submeter um novo pedido de transferência através de ReportingServiceManager. Embora, neste caso, não trabalhe diretamente com o ficheiro, é submetido um pedido para o serviço de Relatórios e o ficheiro de relatório é transferido para um diretório local. Os parâmetros de transferência de relatórios incluem o tipo de relatório pedido, o âmbito, o período de tempo e o caminho do ficheiro de transferência local.
// The ReportRequest is a ReportRequest object defined by the Reporting API.
var reportingDownloadParameters = new ReportingDownloadParameters
{
ReportRequest = reportRequest,
ResultFileDirectory = FileDirectory,
ResultFileName = ResultFileName,
OverwriteResultFile = true,
};
Report reportContainer = await ReportingServiceManager.DownloadReportAsync(
reportingDownloadParameters,
CancellationToken.None
);
// The ReportRequest is a ReportRequest object defined by the Reporting API.
ReportingDownloadParameters reportingDownloadParameters = new ReportingDownloadParameters();
reportingDownloadParameters.setReportRequest(reportRequest);
reportingDownloadParameters.setResultFileDirectory(new File(FileDirectory));
reportingDownloadParameters.setResultFileName(ResultFileName);
reportingDownloadParameters.setOverwriteResultFile(true);
Report reportContainer = ReportingServiceManager.downloadReportAsync(
reportingDownloadParameters,
null
).get();
# The report_request is a ReportRequest object defined by the Reporting API.
reporting_download_parameters = ReportingDownloadParameters(
report_request=report_request,
result_file_directory = FILE_DIRECTORY,
result_file_name = DOWNLOAD_FILE_NAME,
overwrite_result_file = True
)
report_container = reporting_service_manager.download_report(
reporting_download_parameters=reporting_download_parameters
)
Caso contrário, se já tiver um ficheiro de relatório transferido através da API, pode obter um objeto Relatório através do ReportFileReader.
ReportFileReader reader = new ReportFileReader(
"c:\\reports\\result.csv",
ReportFormat.Csv
);
Report reportContainer = reader.GetReport();
ReportFileReader reader = new ReportFileReader(
reportingDownloadParameters.getResultFileDirectory() + "\\" + reportingDownloadParameters.getResultFileName(),
reportingDownloadParameters.getReportRequest().getFormat()
);
Report reportContainer = reader.getReport();
report_file_reader = ReportFileReader(
file_path=reporting_download_parameters.result_file_directory + reporting_download_parameters.result_file_name,
format=reporting_download_parameters.report_request.Format
)
report_container = report_file_reader.get_report()
Assim que tiver um objeto Relatório através de qualquer um dos fluxos de trabalho acima, pode aceder aos metadados e aos registos de relatórios. Se não existirem dados de relatório para as campanhas e datas que submeteu, o resultado da transferência será nulo ou estará vazio.
// Output the report metadata
long recordCount = reportContainer.ReportRecordCount;
Console.WriteLine(string.Format("ReportName: {0}", reportContainer.ReportName));
Console.WriteLine(string.Format("ReportTimeStart: {0}", reportContainer.ReportTimeStart));
Console.WriteLine(string.Format("ReportTimeEnd: {0}", reportContainer.ReportTimeEnd));
Console.WriteLine(string.Format("LastCompletedAvailableDate: {0}", reportContainer.LastCompletedAvailableDate.ToString()));
Console.WriteLine(string.Format("ReportAggregation: {0}", reportContainer.ReportAggregation.ToString()));
Console.WriteLine(string.Format("ReportColumns: {0}", string.Join("; ", reportContainer.ReportColumns)));
Console.WriteLine(string.Format("ReportRecordCount: {0}", recordCount));
// Analyze and output performance statistics
IEnumerable<IReportRecord> reportRecordIterable = reportContainer.GetReportRecords();
int totalImpressions = 0;
int totalClicks = 0;
HashSet<string> distinctDevices = new HashSet<string>();
HashSet<string> distinctNetworks = new HashSet<string>();
foreach (IReportRecord record in reportContainer.GetReportRecords())
{
totalImpressions += record.GetIntegerValue("Impressions");
totalClicks += record.GetIntegerValue("Clicks");
distinctDevices.Add(record.GetStringValue("DeviceType"));
distinctNetworks.Add(record.GetStringValue("Network"));
}
Console.WriteLine(string.Format("Total Impressions: {0}", totalImpressions));
Console.WriteLine(string.Format("Total Clicks: {0}", totalClicks));
Console.WriteLine(string.Format("Average Impressions: {0}", totalImpressions * 1.0 / recordCount));
Console.WriteLine(string.Format("Average Clicks: {0}", totalClicks * 1.0 / recordCount));
Console.WriteLine(string.Format("Distinct Devices: {0}", string.Join("; ", distinctDevices)));
Console.WriteLine(string.Format("Distinct Networks: {0}", string.Join("; ", distinctNetworks)));
// Be sure to close the report before you attempt to clean up files within the working directory.
reportContainer.Dispose();
// Output the reportRequest metadata
java.lang.Long recordCount = reportContainer.getReportRecordCount();
outputStatusMessage(String.format("ReportName: %s", reportContainer.getReportName()));
outputStatusMessage(String.format("ReportTimeStart: %s", reportContainer.getReportTimeStart()));
outputStatusMessage(String.format("ReportTimeEnd: %s", reportContainer.getReportTimeEnd()));
outputStatusMessage(String.format("LastCompletedAvailableDate: %s", reportContainer.getLastCompletedAvailableDate().toString()));
outputStatusMessage(String.format("ReportAggregation: %s", enumCaseToPascalCase(reportContainer.getReportAggregation().toString())));
outputStatusMessage(String.format("ReportColumns: %s", String.join("; ", reportContainer.getReportColumns())));
outputStatusMessage(String.format("ReportRecordCount: %s", recordCount));
// Analyze and output performance statistics
if(Arrays.asList(reportContainer.getReportColumns()).contains("Impressions")){
Iterable<ReportRecord> reportRecordIterable = reportContainer.getReportRecords();
int totalImpressions = 0;
int totalClicks = 0;
HashSet<String> distinctDevices = new HashSet<>();
HashSet<String> distinctNetworks = new HashSet<>();
for (ReportRecord record : reportRecordIterable)
{
totalImpressions += record.getIntegerValue("Impressions");
totalClicks += record.getIntegerValue("Clicks");
distinctDevices.add(record.getStringValue("DeviceType"));
distinctNetworks.add(record.getStringValue("Network"));
}
outputStatusMessage(String.format("Total Impressions: %s", totalImpressions));
outputStatusMessage(String.format("Total Clicks: %s", totalClicks));
outputStatusMessage(String.format("Average Impressions: %s", totalImpressions * 1.0 / recordCount));
outputStatusMessage(String.format("Average Clicks: %s", totalClicks * 1.0 / recordCount));
outputStatusMessage(String.format("Distinct Devices: %s", String.join("; ", distinctDevices)));
outputStatusMessage(String.format("Distinct Networks: %s", String.join("; ", distinctNetworks)));
}
// Be sure to close the reportRequest before you attempt to clean up files within the working directory.
reportContainer.close();
# Output the reportRequest metadata
record_count = report_container.record_count
output_status_message("ReportName: {0}".format(report_container.report_name))
output_status_message("ReportTimeStart: {0}".format(report_container.report_time_start))
output_status_message("ReportTimeEnd: {0}".format(report_container.report_time_end))
output_status_message("LastCompletedAvailableDate: {0}".format(report_container.last_completed_available_date))
output_status_message("ReportAggregation: {0}".format(report_container.report_aggregation))
output_status_message("ReportColumns: {0}".format("; ".join(str(column) for column in report_container.report_columns)))
output_status_message("ReportRecordCount: {0}".format(record_count))
#Analyze and output performance statistics
if "Impressions" in report_container.report_columns and \
"Clicks" in report_container.report_columns and \
"DeviceType" in report_container.report_columns and \
"Network" in report_container.report_columns:
report_record_iterable = report_container.report_records
total_impressions = 0
total_clicks = 0
distinct_devices = set()
distinct_networks = set()
for record in report_record_iterable:
total_impressions += record.int_value("Impressions")
total_clicks += record.int_value("Clicks")
distinct_devices.add(record.value("DeviceType"))
distinct_networks.add(record.value("Network"))
output_status_message("Total Impressions: {0}".format(total_impressions))
output_status_message("Total Clicks: {0}".format(total_clicks))
output_status_message("Average Impressions: {0}".format(total_impressions * 1.0 / record_count))
output_status_message("Average Clicks: {0}".format(total_clicks * 1.0 / record_count))
output_status_message("Distinct Devices: {0}".format("; ".join(str(device) for device in distinct_devices)))
output_status_message("Distinct Networks: {0}".format("; ".join(str(network) for network in distinct_networks)))
#Be sure to close the report.
report_container.close()
Transferir
O ReportingServiceManager suporta fluxos de trabalho de transferência de relatórios flexíveis.
Pode criar um pedido de transferência e o ReportingServiceManager submeterá o seu pedido de transferência para o serviço de Relatórios, consultará o serviço até estar concluído e transferirá o ficheiro para o diretório local. Por exemplo, veja Conclusão em Segundo Plano com ReportingServiceManager.
Pode submeter um pedido de transferência e, em seguida, consultar até que o ficheiro de resultados esteja pronto para transferência. Por exemplo, veja Submit and Download with ReportingServiceManager (Submeter e Transferir com o ReportingServiceManager).
Se, por algum motivo, tiver de retomar a partir de um estado de aplicação anterior, pode utilizar um identificador de pedido de transferência existente e utilizá-lo para transferir o ficheiro de resultados. Por exemplo, veja Transferir Resultados com ReportingServiceManager.
Conclusão em Segundo Plano com ReportingServiceManager
Pode criar um pedido de transferência e o ReportingServiceManager submeterá o seu pedido de transferência para o serviço de Relatórios, consultará o serviço até estar concluído e transferirá o ficheiro para o diretório local.
public async Task RunAsync(AuthorizationData authorizationData)
{
ReportingServiceManager reportingServiceManager = new ReportingServiceManager(authorizationData);
var reportRequest = GetCampaignPerformanceReportRequest(authorizationData.AccountId);
var reportingDownloadParameters = new ReportingDownloadParameters
{
ReportRequest = reportRequest,
ResultFileDirectory = FileDirectory,
ResultFileName = ResultFileName,
OverwriteResultFile = true,
};
// Sets the time interval in milliseconds between two status polling attempts. The default value is 5000 (5 seconds).
reportingServiceManager.StatusPollIntervalInMilliseconds = 5000;
// Sets the timeout of the HttpClient download operation. The default value is 100000 (100s).
reportingServiceManager.DownloadHttpTimeout = new TimeSpan(0, 0, 100);
// You may optionally cancel the DownloadFileAsync operation after a specified time interval.
// Pass this object to the DownloadFileAsync operation or specify CancellationToken.None.
var tokenSource = new CancellationTokenSource();
tokenSource.CancelAfter(3600000);
// The ReportingServiceManager will submit your download request to the Reporting service,
// poll the service until completed, and download the file to your local directory.
var resultFilePath = await reportingServiceManager.DownloadFileAsync(
parameters: reportingDownloadParameters,
cancellationToken: tokenSource.Token
);
Console.WriteLine(string.Format("Download result file: {0}\n", resultFilePath));
}
ReportingServiceManager reportingServiceManager = new ReportingServiceManager(authorizationData);
ReportRequest reportRequest = getCampaignPerformanceReportRequest();
ReportingDownloadParameters reportingDownloadParameters = new ReportingDownloadParameters();
reportingDownloadParameters.setReportRequest(reportRequest);
reportingDownloadParameters.setResultFileDirectory(new File(FileDirectory));
reportingDownloadParameters.setResultFileName(ResultFileName);
reportingDownloadParameters.setOverwriteResultFile(true);
// Sets the time interval in milliseconds between two status polling attempts. The default value is 5000 (5 seconds).
reportingServiceManager.setStatusPollIntervalInMilliseconds(5000);
// Sets the timeout of the HttpClient download operation. The default value is 100000 (100s).
reportingServiceManager.setDownloadHttpTimeoutInMilliseconds(100000);
// The ReportingServiceManager will submit your download request to the Reporting service,
// poll the service until completed, and download the file to your local directory.
// You may optionally cancel the downloadFileAsync operation after a specified time interval.
File resultFile = reportingServiceManager.downloadFileAsync(
reportingDownloadParameters,
null
).get(3600000, TimeUnit.MILLISECONDS);
System.out.println(String.format("Download result file: %s\n", resultFile.getName()));
reporting_service_manager=ReportingServiceManager(
authorization_data=authorization_data,
# Sets the time interval in milliseconds between two status polling attempts.
# The default value is 5000 (5 seconds).
poll_interval_in_milliseconds=5000,
environment=ENVIRONMENT,
)
report_request=get_keyword_report_request()
reporting_download_parameters = ReportingDownloadParameters(
report_request=report_request,
result_file_directory = FILE_DIRECTORY,
result_file_name = DOWNLOAD_FILE_NAME,
overwrite_result_file = True, # Set this value true if you want to overwrite the same file.
timeout_in_milliseconds=3600000 # You may optionally cancel the download after a specified time interval.
)
# The ReportingServiceManager will submit your download request to the Reporting service,
# poll the service until completed, and download the file to your local directory.
result_file_path = reporting_service_manager.download_file(
reporting_download_parameters=reporting_download_parameters
)
print("Download result file: {0}\n".format(result_file_path))
Submeter e Transferir com o ReportingServiceManager
Submeta o pedido de transferência e, em seguida, utilize o resultado ReportingDownloadOperation para controlar o estado com GetStatusAsync.
public async Task RunAsync(AuthorizationData authorizationData)
{
ReportingService = new ReportingServiceManager(authorizationData);
var reportRequest = GetCampaignPerformanceReportRequest(authorizationData.AccountId);
var reportingDownloadOperation = await ReportingService.SubmitDownloadAsync(reportRequest);
// You may optionally cancel the TrackAsync operation after a specified time interval.
var tokenSource = new CancellationTokenSource();
tokenSource.CancelAfter(3600000);
var reportingDownloadOperation = await ReportingService.SubmitDownloadAsync(reportRequest);
ReportingOperationStatus reportingOperationStatus = await reportingDownloadOperation.TrackAsync(tokenSource.Token);
var resultFilePath = await reportingDownloadOperation.DownloadResultFileAsync(
FileDirectory,
ResultFileName,
decompress: true,
overwrite: true // Set this value true if you want to overwrite the same file.
);
Console.WriteLine(string.Format("Download result file: {0}\n", resultFilePath));
}
ReportingServiceManager = new ReportingServiceManager(authorizationData);
ReportRequest reportRequest = getCampaignPerformanceReportRequest();
ReportingDownloadOperation reportingDownloadOperation = ReportingServiceManager.submitDownloadAsync(
reportRequest,
null
).get();
// You may optionally cancel the trackAsync operation after a specified time interval.
ReportingOperationStatus reportingOperationStatus = reportingDownloadOperation.trackAsync(
null
).get(3600000, TimeUnit.MILLISECONDS);
File resultFile = reportingDownloadOperation.downloadResultFileAsync(
new File(FileDirectory),
ResultFileName,
true, // Set this value to true if you want to decompress the ZIP file.
true, // Set this value true if you want to overwrite the named file.
null
).get();
System.out.println(String.format("Download result file: %s\n", resultFile.getName()));
reporting_service_manager=ReportingServiceManager(
authorization_data=authorization_data,
poll_interval_in_milliseconds=5000,
environment=ENVIRONMENT,
)
# In addition to ReportingServiceManager, you will need a reporting ServiceClient
# to build the ReportRequest.
reporting_service=ServiceClient(
'ReportingService',
version=13,
authorization_data=authorization_data,
environment=ENVIRONMENT,
)
report_request=get_keyword_report_request()
reporting_download_operation = reporting_service_manager.submit_download(report_request)
# You may optionally cancel the track() operation after a specified time interval.
reporting_operation_status = reporting_download_operation.track(timeout_in_milliseconds=3600000)
result_file_path = reporting_download_operation.download_result_file(
result_file_directory = FILE_DIRECTORY,
result_file_name = DOWNLOAD_FILE_NAME,
decompress = True,
overwrite = True, # Set this value true if you want to overwrite the same file.
timeout_in_milliseconds=3600000 # You may optionally cancel the download after a specified time interval.
)
print("Download result file: {0}\n".format(result_file_path))
Transferir Resultados com o ReportingServiceManager
Se, por algum motivo, tiver de retomar a partir de um estado de aplicação anterior, pode utilizar um identificador de pedido de transferência existente e utilizá-lo para transferir o ficheiro de resultados. Utilize TrackAsync para indicar que a aplicação deve aguardar para garantir que o estado de transferência está concluído.
public async Task RunAsync(AuthorizationData authorizationData)
{
ReportingService = new ReportingServiceManager(authorizationData);
// You may optionally cancel the TrackAsync operation after a specified time interval.
var tokenSource = new CancellationTokenSource();
tokenSource.CancelAfter(3600000);
var reportingDownloadOperation = new ReportingDownloadOperation(RequestIdGoesHere, authorizationData);
// Use TrackAsync to indicate that the application should wait to ensure that
// the download status is completed.
var reportingOperationStatus = await reportingDownloadOperation.TrackAsync(tokenSource.Token);
var resultFilePath = await reportingDownloadOperation.DownloadResultFileAsync(
FileDirectory,
ResultFileName,
decompress: true,
overwrite: true // Set this value true if you want to overwrite the same file.
);
Console.WriteLine(string.Format("Download result file: {0}", resultFilePath));
Console.WriteLine(string.Format("Status: {0}", reportingOperationStatus.Status));
Console.WriteLine(string.Format("TrackingId: {0}\n", reportingOperationStatus.TrackingId));
}
java.lang.String requestId = RequestIdGoesHere;
ReportingDownloadOperation reportingDownloadOperation = new ReportingDownloadOperation(
requestId,
authorizationData
);
reportingDownloadOperation.setStatusPollIntervalInMilliseconds(5000);
// You can use trackAsync to poll until complete as shown here,
// or use custom polling logic with getStatusAsync.
// You may optionally cancel the trackAsync operation after a specified time interval.
ReportingOperationStatus reportingOperationStatus = reportingDownloadOperation.trackAsync(
null
).get(3600000, TimeUnit.MILLISECONDS);
File resultFile = reportingDownloadOperation.downloadResultFileAsync(
new File(FileDirectory),
ResultFileName,
true, // Set this value to true if you want to decompress the ZIP file
true, // Set this value true if you want to overwrite the named file.
null
).get();
System.out.println(String.format("Download result file: %s", resultFile.getName()));
System.out.println(String.format("Status: %s", reportingOperationStatus.getStatus()));
System.out.println(String.format("TrackingId: %s\n", reportingOperationStatus.getTrackingId()));
reporting_download_operation = ReportingDownloadOperation(
request_id = RequestIdGoesHere,
authorization_data=authorization_data,
poll_interval_in_milliseconds=5000,
environment=ENVIRONMENT,
)
# Use track() to indicate that the application should wait to ensure that
# the download status is completed.
# You may optionally cancel the track() operation after a specified time interval.
reporting_operation_status = reporting_download_operation.track(timeout_in_milliseconds=3600000)
result_file_path = reporting_download_operation.download_result_file(
result_file_directory = FILE_DIRECTORY,
result_file_name = DOWNLOAD_FILE_NAME,
decompress = True,
overwrite = True, # Set this value true if you want to overwrite the same file.
timeout_in_milliseconds=3600000 # You may optionally cancel the download after a specified time interval.
)
print("Download result file: {0}".format(result_file_path))
print("Status: {0}\n".format(reporting_operation_status.status))
Consulta e Repetição
O ReportingServiceManager consulta automaticamente em intervalos de 1000 milissegundos para as primeiras cinco tentativas e esse comportamento não é configurável. A propriedade StatusPollIntervalInMilliseconds determina o intervalo de tempo entre cada tentativa de consulta após as cinco tentativas iniciais. Para obter um exemplo, veja Conclusão em Segundo Plano acima. O valor predefinido é 5000, por isso, se não definir este valor, o ReportingServiceManager irá consultar na seguinte sequência: 1, 2, 3, 4, 5, 10, 15, 20 e assim sucessivamente. Se definir este valor como 10000, o ReportingServiceManager irá consultar na seguinte sequência: 1, 2, 3, 4, 5, 15, 25, 35 e assim sucessivamente. O intervalo mínimo de inquérito é 1000 e, se especificar um valor inferior a 1000, será emitida uma exceção.
O ReportingServiceManager repetirá automaticamente as operações de transferência e consulta até à duração máxima de tempo limite que especificar. Pode definir a duração máxima do tempo limite de repetição. Se não for especificado nenhum tempo limite, o ReportingServiceManager continuará a tentar até que o servidor devolva um tempo limite ou um erro interno. Separadamente, se estiver a transferir ficheiros grandes, deve considerar definir a propriedade DownloadHttpTimeout .
Working Directory and ReportingServiceManager
Com os SDKs .NET e Java do Bing Ads, pode definir o diretório de trabalho onde o ReportingServiceManager deve armazenar ficheiros de relatório temporários. Por exemplo, quando transfere um contentor de Relatório, embora só trabalhe com um objeto Relatório, um ficheiro de relatório é transferido para o diretório de trabalho. O diretório temporário do sistema será utilizado se não for especificado outro diretório de trabalho.
Se estiver a utilizar um serviço alojado, como o Microsoft Azure, deverá garantir que não excede os limites do diretório temporário. Podem existir outros motivos para utilizar um diretório de trabalho personalizado. Pode especificar um diretório de trabalho diferente para cada instância do ReportingServiceManager ao definir a propriedade WorkingDirectory . Também é responsável por criar e remover quaisquer diretórios.
Importante
Depois de iterar os registos do relatório, pode limpar os ficheiros do diretório de trabalho. O método CleanupTempFiles remove todos os ficheiros (mas não os subdiretórios) no diretório de trabalho, quer os ficheiros tenham ou não sido criados pela instância atual do ReportingServiceManager .
ReportingServiceManager reportingServiceManager = new ReportingServiceManager(
authorizationData: authorizationData,
apiEnvironment: environment
);
var reportRequest = GetReportRequest(authorizationData.AccountId);
var reportingDownloadParameters = new ReportingDownloadParameters
{
ReportRequest = reportRequest,
ResultFileDirectory = FileDirectory,
ResultFileName = ResultFileName,
OverwriteResultFile = true,
};
// The system temp directory will be used if another working directory is not specified. If you are
// using a hosted service such as Microsoft Azure you'll want to ensure you do not exceed the file or directory limits.
// You can specify a different working directory for each ReportingServiceManager instance.
reportingServiceManager.WorkingDirectory = FileDirectory;
// You can get a Report object by submitting a new download request via ReportingServiceManager.
// Although in this case you won't work directly with the file, under the covers a request is
// submitted to the Reporting service and the report file is downloaded to a local directory.
Report reportContainer = await reportingServiceManager.DownloadReportAsync(
parameters: reportingDownloadParameters,
cancellationToken: CancellationToken.None
);
IEnumerable<IReportRecord> reportRecordIterable = reportContainer.GetReportRecords();
// Be sure to close the report before you attempt to clean up files within the working directory.
reportContainer.Dispose();
// The CleanupTempFiles method removes all files (but not sub-directories) within the working directory,
// whether or not the files were created by this ReportingServiceManager instance.
reportingServiceManager.CleanupTempFiles();
ReportingServiceManager reportingServiceManager = new ReportingServiceManager(authorizationData, API_ENVIRONMENT);
reportingServiceManager.setStatusPollIntervalInMilliseconds(5000);
ReportRequest reportRequest = getReportRequest(authorizationData.getAccountId());
ReportingDownloadParameters reportingDownloadParameters = new ReportingDownloadParameters();
reportingDownloadParameters.setReportRequest(reportRequest);
reportingDownloadParameters.setResultFileDirectory(new File(FileDirectory));
reportingDownloadParameters.setResultFileName(ResultFileName);
reportingDownloadParameters.setOverwriteResultFile(true);
// The system temp directory will be used if another working directory is not specified. If you are
// using a hosted service such as Microsoft Azure you'll want to ensure you do not exceed the file or directory limits.
// You can specify a different working directory for each ReportingServiceManager instance.
reportingServiceManager.setWorkingDirectory(new File(FileDirectory));
// You can get a Report object by submitting a new download request via ReportingServiceManager.
// Although in this case you won't work directly with the file, under the covers a request is
// submitted to the Reporting service and the report file is downloaded to a local directory.
Report reportContainer = reportingServiceManager.downloadReportAsync(
reportingDownloadParameters,
null
).get();
java.lang.Long recordCount = reportContainer.getReportRecordCount();
// Be sure to close the reportRequest before you attempt to clean up files within the working directory.
reportContainer.close();
// The cleanupTempFiles method removes all files (but not sub-directories) within the working directory,
// whether or not the files were created by this ReportingServiceManager instance.
reportingServiceManager.cleanupTempFiles();
See Also
Sandbox
Exemplos de Código da API de Anúncios do Bing
Endereços do Serviço Web da API de Anúncios do Bing