Partager via


Service Manager de création de rapports

Les Kits de développement logiciel (SDK) Bing Ads .NET, Java et Python fournissent des classes pour accélérer la productivité lors du téléchargement des enregistrements de rapport de performances. Par exemple , ReportingServiceManager soumet votre demande de téléchargement au service de création de rapports, interroge le service jusqu’à ce qu’il soit terminé et télécharge le fichier dans votre répertoire local. ReportingServiceManager gère également les champs d’en-tête de requête courants pour vous, ce qui permet de spécifier les propriétés Authentication, CustomerId, AccountId et DeveloperToken dans l’objet AuthorizationData une fois pour chaque service. Pour plus d’informations, consultez Utilisation d’AuthorizationData et l’exemple de code Des demandes de rapport.

Remarque

ReportingServiceManager est disponible uniquement avec les Kits de développement logiciel (SDK) Bing Ads .NET, Java et Python. Que vous utilisiez ou non un Kit de développement logiciel (SDK), vous pouvez utiliser directement le service de création de rapports . Pour plus d’informations, consultez Demander et télécharger un rapport.

Lecteur de fichier de rapport

Vous n’avez pas besoin d’implémenter votre propre analyseur de fichiers pour lire le fichier de rapport. Vous pouvez utiliser l’objet ReportFileReader pour lire un fichier CSV dans un conteneur De rapports .

Remarque

ReportingServiceManager utilise un ReportFileReader en arrière-plan lorsque vous téléchargez des entités au lieu de fichiers. Les fichiers temporaires sont utilisés en arrière-plan. Pour plus d’informations, consultez Répertoire de travail et ReportingServiceManager.

Nous allons utiliser le fichier CSV suivant comme exemple. Par exemple, supposons que vous souhaitez lire le rapport suivant à partir d’un fichier.

"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. "

Indiquez simplement reportFileReader avec le chemin d’accès et le nom de fichier. Fermez ensuite le fichier lorsque vous avez terminé la lecture.

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()

conteneur de rapports In-Memory

Le rapport est un conteneur en mémoire qui extrait le contenu d’un fichier de rapport téléchargé, y compris les métadonnées d’en-tête, les noms de colonnes et les enregistrements de rapport. Avec ces mises à jour, vous êtes libre de vous concentrer davantage sur les besoins métier de votre application au lieu d’analyser le fichier de rapport.

Vous pouvez accéder au conteneur de rapports en mémoire via ReportingServiceManager en envoyant une nouvelle demande de téléchargement ou en utilisant reportFileReader pour lire à partir d’un fichier de rapport que vous avez déjà téléchargé.

Par exemple, vous pouvez obtenir un objet Report en envoyant une nouvelle demande de téléchargement via ReportingServiceManager. Bien que dans ce cas, vous ne travaillerez pas directement avec le fichier, sous la couverture, une demande est envoyée au service de création de rapports et le fichier de rapport est téléchargé dans un répertoire local. Les paramètres de téléchargement de rapports incluent le type de rapport demandé, l’étendue, la période et le chemin d’accès au fichier de téléchargement 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
)

Sinon, si vous avez déjà un fichier de rapport téléchargé via l’API, vous pouvez obtenir un objet Report via 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()

Une fois que vous disposez d’un objet Report via l’un ou l’autre des flux de travail ci-dessus, vous pouvez accéder aux métadonnées et aux enregistrements de rapport. S’il n’y avait pas de données de rapport pour les campagnes et les dates que vous avez soumises, le résultat du téléchargement sera null ou vide.

// 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()

Télécharger

ReportingServiceManager prend en charge les workflows de téléchargement de rapports flexibles.

  • Vous pouvez créer une demande de téléchargement et ReportingServiceManager soumet votre demande de téléchargement au service de création de rapports, interroge le service jusqu’à ce qu’il soit terminé et télécharge le fichier dans votre répertoire local. Par exemple, consultez Saisie semi-automatique en arrière-plan avec ReportingServiceManager.

  • Vous pouvez envoyer une demande de téléchargement, puis interroger jusqu’à ce que le fichier de résultat soit prêt à être téléchargé. Par exemple, consultez Envoyer et télécharger avec ReportingServiceManager.

  • Si, pour une raison quelconque, vous devez reprendre à partir d’un état d’application précédent, vous pouvez utiliser un identificateur de demande de téléchargement existant et l’utiliser pour télécharger le fichier résultat. Par exemple, consultez Télécharger les résultats avec ReportingServiceManager.

Saisie semi-automatique en arrière-plan avec ReportingServiceManager

Vous pouvez créer une demande de téléchargement et ReportingServiceManager soumet votre demande de téléchargement au service de création de rapports, interroge le service jusqu’à ce qu’il soit terminé et télécharge le fichier dans votre répertoire 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))

Envoyer et télécharger avec ReportingServiceManager

Envoyez la demande de téléchargement, puis utilisez le résultat ReportingDownloadOperation pour suivre status vous-même à l’aide de 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))

Télécharger les résultats avec ReportingServiceManager

Si, pour une raison quelconque, vous devez reprendre à partir d’un état d’application précédent, vous pouvez utiliser un identificateur de demande de téléchargement existant et l’utiliser pour télécharger le fichier résultat. Utilisez TrackAsync pour indiquer que l’application doit attendre que le téléchargement status soit terminé.

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))

Interroger et réessayer

ReportingServiceManager interroge automatiquement à intervalles de 1 000 millisecondes pour les cinq premières tentatives, et ce comportement n’est pas configurable. La propriété StatusPollIntervalInMilliseconds détermine l’intervalle de temps entre chaque tentative d’interrogation après les cinq tentatives initiales. Pour obtenir un exemple, consultez Saisie semi-automatique en arrière-plan ci-dessus. La valeur par défaut étant 5000, si vous ne définissez pas cette valeur, le ReportingServiceManager interrogera dans l’ordre suivant : 1, 2, 3, 4, 5, 10, 15, 20, etc. Si vous définissez cette valeur sur 10000, le ReportingServiceManager interroge dans l’ordre suivant : 1, 2, 3, 4, 5, 15, 25, 35, etc. L’intervalle d’interrogation minimal est de 1 000, et si vous spécifiez une valeur inférieure à 1 000, une exception est levée.

ReportingServiceManager retentera automatiquement les opérations de téléchargement et d’interrogation jusqu’à la durée maximale du délai d’attente que vous spécifiez. Vous pouvez définir la durée maximale du délai d’expiration des nouvelles tentatives. Si aucun délai d’expiration n’est spécifié, ReportingServiceManager continue d’effectuer une nouvelle tentative jusqu’à ce que le serveur retourne un délai d’expiration ou une erreur interne. Séparément, si vous téléchargez des fichiers volumineux, vous devez envisager de définir la propriété DownloadHttpTimeout .

Répertoire de travail et ReportingServiceManager

Avec les Kits de développement logiciel (SDK) Bing Ads .NET et Java, vous pouvez définir le répertoire de travail dans lequel ReportingServiceManager doit stocker les fichiers de rapport temporaires. Par exemple, lorsque vous téléchargez un conteneur De rapports, bien que vous ne travaillez qu’avec un objet Report, un fichier de rapport est téléchargé dans le répertoire de travail. Le répertoire temporaire système est utilisé si aucun autre répertoire de travail n’est spécifié.

Si vous utilisez un service hébergé tel que Microsoft Azure, vous devez vous assurer que vous ne dépassez pas les limites d’annuaire temporaire. Il peut y avoir d’autres raisons d’utiliser un répertoire de travail personnalisé. Vous pouvez spécifier un répertoire de travail différent pour chaque instance ReportingServiceManager en définissant la propriété WorkingDirectory. Vous êtes également responsable de la création et de la suppression des répertoires.

Importante

Une fois que vous avez itéré sur les enregistrements de rapport, vous pouvez propre les fichiers à partir du répertoire de travail. La méthode CleanupTempFiles supprime tous les fichiers (mais pas les sous-répertoires) dans le répertoire de travail, que les fichiers aient été créés ou non par le instance ReportingServiceManager actuel.

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();

Voir aussi

Bac à sable
Exemples de code de l’API Bing Ads
Adresses du service web de l’API Bing Ads