Solicitud y descarga de un informe
La creación de informes es un proceso asincrónico. A continuación se muestra el flujo general para solicitar un informe.
- Creación de una solicitud con los parámetros del informe
- Envío de una solicitud al servicio de informes
- El servicio pone en cola la solicitud hasta que pueda procesarla.
- Sondear el servicio periódicamente para obtener el estado del trabajo de informe
- Cuando el estado sea Correcto, use la dirección URL que proporciona el servicio para descargar el informe.
Si usa un lenguaje .NET, Java o Python, debe usar las bibliotecas de cliente de la API de Bing Ads. Los SDK de .NET, Java y Python abstrae los detalles de bajo nivel que se describen a continuación. Por ejemplo, en lugar de llamar a SubmitGenerateReportRequest y PollGenerateReportRequest para descargar un informe, puede usar un método con el Service Manager De informes.
Para ver ejemplos de código que muestran cómo descargar informes, vea Ejemplo de código de solicitudes de informe.
Solicitar un informe
Determine el informe que desea solicitar. Para obtener una lista de los informes que puede solicitar, consulte Tipos de informe.
Cree una instancia del objeto de solicitud de informe. Algunos de los elementos de la solicitud de informe son necesarios y otros son opcionales. Establezca los elementos según corresponda para la aplicación. Los elementos de la solicitud de informe determinan, entre otros, el ámbito de los datos que se van a incluir en el informe, las columnas de datos que se van a incluir en el informe y si se va a generar el informe solo si todos los datos están disponibles.
Nota:
Debe crear una instancia de uno de los objetos que deriva del objeto de datos ReportRequest ; Si intenta pasar el objeto ReportRequest a la operación SubmitGenerateReport , se producirá un error en la llamada.
Cree una instancia del objeto SubmitGenerateReportRequest y establezca el elemento ReportRequest en la solicitud de informe que seleccionó en el paso anterior.
Llame a la operación SubmitGenerateReport para enviar la solicitud. La operación es una operación asincrónica que devuelve antes de crear el informe. La operación devuelve un ReportRequestId que se usa en los pasos siguientes para determinar cuándo se completa el informe. El identificador de solicitud de informe es válido durante dos días. Si no descarga el informe en un plazo de dos días, debe solicitarlo de nuevo.
Cree una instancia del objeto PollGenerateReportRequest y establezca el identificador de solicitud de informe en el identificador devuelto en el paso anterior.
Nota:
Debe usar las mismas credenciales de usuario para las operaciones SubmitGenerateReport y PollGenerateReport .
Llame a la operación PollGenerateReport en un bucle mientras el estado es Pendiente. La operación establece el estado en Correcto cuando la solicitud se completa correctamente; un estado distinto de Pendiente o Correcto indica que se produjo un error en el informe.
El tiempo que tarda una solicitud de informe en completarse depende de una serie de variables, como el tipo de informe que solicitó; los valores de agregación, ámbito y período de tiempo especificados; el número de filas esperadas; y el número de solicitudes que ya están en la cola. Debido a estas variables, es difícil determinar un intervalo de sondeo adecuado para todos los casos. Dado que la mayoría de los informes deben completarse en cuestión de minutos, el sondeo a intervalos de dos a 15 minutos debe ser adecuado para la mayoría de los casos. Si el período de sondeo general supera los 60 minutos, considere la posibilidad de guardar el identificador del informe, salir del bucle e intentarlo de nuevo más tarde.
Si la solicitud se completa correctamente, use la dirección URL del elemento ReportDownloadUrl para descargar el archivo que contiene el informe. Después de obtener la dirección URL de descarga, tiene cinco minutos para descargar el informe. Si no descarga el informe en los cinco minutos siguientes a la obtención de la dirección URL, debe sondear para que se use una nueva dirección URL para descargar el informe.
El archivo de informe se comprime; por lo tanto, debe descomprimirlo para leer el informe.
Creación de un intervalo de fechas personalizado
En el procedimiento siguiente se muestra cómo especificar un intervalo de fechas personalizado para una solicitud de informe. Esto es opcional para el flujo de trabajo de solicitud de informe descrito anteriormente. Si especifica un intervalo de fechas personalizado, no debe establecer el elemento ReportTime.PredefinedTime . Tenga en cuenta también que el elemento Aggregation del objeto de solicitud de informe determina cómo se agregan los datos del período de tiempo especificado.
Cree una instancia del objeto ReportTime . Asigne el objeto ReportTime al elemento Time del objeto de datos ReportRequest .
Cree un objeto Date que especifique la fecha de inicio del intervalo de fechas personalizado. Asigne el objeto Date al elemento ReportTime.CustomDateRangeStart .
Cree otro objeto Date que especifique la fecha de finalización del intervalo de fechas personalizado. Asigne el objeto Date al elemento ReportTime.CustomDateRangeEnd .
El siguiente fragmento de código muestra cómo inicializar un objeto de solicitud de informe para solicitar un intervalo de fechas personalizado.
// Create an instance of the ReportTime class to hold the report date
// information.
request.Time = new ReportTime();
// Set the start date for the report to one month before today.
DateTime startDate = DateTime.Today.AddMonths(-1);
request.Time.CustomDateRangeStart = new Date();
request.Time.CustomDateRangeStart.Day = startDate.Day;
request.Time.CustomDateRangeStart.Month = startDate.Month;
request.Time.CustomDateRangeStart.Year = startDate.Year;
// Set the end date to today.
DateTime endDate = DateTime.Today;
request.Time.CustomDateRangeEnd = new Date();
request.Time.CustomDateRangeEnd.Day = endDate.Day;
request.Time.CustomDateRangeEnd.Month = endDate.Month;
request.Time.CustomDateRangeEnd.Year = endDate.Year;
report.setTime(new ReportTime());
Calendar calendar = Calendar.getInstance();
report.getTime().setCustomDateRangeStart(new Date());
report.getTime().getCustomDateRangeStart().setMonth(1);
report.getTime().getCustomDateRangeStart().setDay(1);
report.getTime().getCustomDateRangeStart().setYear(calendar.get(Calendar.YEAR)-1);
report.getTime().setCustomDateRangeEnd(new Date());
report.getTime().getCustomDateRangeEnd().setMonth(12);
report.getTime().getCustomDateRangeEnd().setDay(31);
report.getTime().getCustomDateRangeEnd().setYear(calendar.get(Calendar.YEAR)-1);
$report->Time = new ReportTime();
$report->Time->PredefinedTime = null;
date_default_timezone_set('UTC');
$LastYear = date("Y") - 1;
$report->Time->CustomDateRangeStart = new Date();
$report->Time->CustomDateRangeStart->Month = 1;
$report->Time->CustomDateRangeStart->Day = 1;
$report->Time->CustomDateRangeStart->Year = $LastYear;
$report->Time->CustomDateRangeEnd = new Date();
$report->Time->CustomDateRangeEnd->Month = 12;
$report->Time->CustomDateRangeEnd->Day = 31;
$report->Time->CustomDateRangeEnd->Year = $LastYear;
report_time=reporting_service.factory.create('ReportTime')
custom_date_range_start=reporting_service.factory.create('Date')
custom_date_range_start.Day=1
custom_date_range_start.Month=1
custom_date_range_start.Year=int(strftime("%Y", gmtime()))-1
report_time.CustomDateRangeStart=custom_date_range_start
custom_date_range_end=reporting_service.factory.create('Date')
custom_date_range_end.Day=31
custom_date_range_end.Month=12
custom_date_range_end.Year=int(strftime("%Y", gmtime()))-1
report_time.CustomDateRangeEnd=custom_date_range_end
report_time.PredefinedTime=None
report_request.Time=report_time