Recuperar un reporte

Cómo obtener reportes de Amazon para ayudar a los selling partners a gestionar su negocio.

Versión de la API: 2021-06-30

Obtén la información necesaria para recuperar un documento de reporte y luego descarga el reporte.

Paso 1. Obtener la información necesaria para recuperar el reporte

Llama a la operación getReportDocument para obtener la información necesaria para recuperar el contenido de un documento de reporte. Esto incluye una URL prefirmada para el documento del reporte y, opcionalmente, el algoritmo de compresión utilizado si el contenido del documento del reporte ha sido comprimido.

  1. Llame a la operación getReportDocument pasando el siguiente parámetro:

El parámetro de la ruta:

NombreDescripciónSe requiere
reportDocumentIdEl identificador del documento de reporte.

Tipo: string

Ejemplo de solicitud:

GET https://sellingpartnerapi-na.amazon.com/reports/2021-06-30/documents/DOC-b8b0-4226-b4b9-0ee058ea5760

Respuesta

Una respuesta correcta incluye lo siguiente:

NombreDescripción
reportDocumentIdEl identificador del documento de reporte. Este identificador es único sólo en combinación con un seller ID.
urlUn pre-firmado URL para el documento de reporte. Esta dirección URL se vence después de 5 minutos.

Tipo: string
compressionAlgorithmSi está presente, el documento de reporte, los contenidos han sido comprimidos con el algoritmo.

Tipo: enum (CompressionAlgorithm)

Respuesta ejemplo:

{
  "reportDocumentId": "DOC-b8b0-4226-b4b9-0ee058ea5760",
  "url": "https://d34o8swod1owfl.cloudfront.net/SampleResult%2BKey%3DSample%2BINITVEC%3D58+fa+bf+a7+08+11+95+0f+c1+a8+c6+e0+d5+6f+ae+c8"
}
  1. Guardar el url, y compressionAlgorithm (propiedad opcional) para utilizar en el Paso 2.

Paso 2. Descargar el reporte

Debes descargar el reporte utilizando la información devuelta en el Paso 1. El siguiente código de ejemplo demuestra cómo descargar un documento de reporte de texto sin formato. También puedes utilizar los principios demostrados en el código de ejemplo como guía para desarrollar aplicaciones en otros lenguajes de programación o para otros tipos de documentos (XML, CSV, TSV, etc.).

  1. Utilice el siguiente como insumos para el código de ejemplo:

    • Los url opcionales y compressionAlgorithm los valores del paso anterior son los argumentos para el url, y compressionAlgorithm los parámetros del download método de la clase DownloadExample.

Nota: Siempre debes mantener la encriptación en reposo. El contenido del reporte sin encriptar nunca debe almacenarse en disco, ni siquiera temporalmente, ya que los reportes pueden contener información sensible. El código de ejemplo que proporcionamos demuestra este principio.

El Código De Ejemplo (Java)

// DownloadExample.java
// This example is for use with the Selling Partner API for Reports, Version: 2021-06-30
// and the Selling Partner API for Feeds, Version: 2021-06-30
import java.io.BufferedReader;
import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.zip.GZIPInputStream;

import com.squareup.okhttp.MediaType;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import com.squareup.okhttp.ResponseBody;

/**
 * Example that downloads a document.
 */
public class DownloadExample {

  public static void main(String args[]) {
    String url = "<URL from the getFeedDocument/getReportDocument response>";
    String compressionAlgorithm = "<compressionAlgorithm from the getFeedDocument/getReportDocument response>";

    DownloadExample obj = new DownloadExample();
    try {
      obj.download(url, compressionAlgorithm);
    } catch (IOException e) {
      //Handle exception here.
    } catch (IllegalArgumentException e) {
      //Handle exception here.
    }
  }

  /**
   * Download and optionally decompress the document retrieved from the given url.
   *
   * @param url                  the url pointing to a document
   * @param compressionAlgorithm the compressionAlgorithm used for the document
   * @throws IOException              when there is an error reading the response
   * @throws IllegalArgumentException when the charset is missing
   */
  public void download(String url, String compressionAlgorithm) throws IOException, IllegalArgumentException {
    OkHttpClient httpclient = new OkHttpClient();
    Request request = new Request.Builder()
      .url(url)
      .get()
      .build();

    Response response = httpclient.newCall(request).execute();
    if (!response.isSuccessful()) {
      System.out.println(
        String.format("Call to download content was unsuccessful with response code: %d and message: %s",
          response.code(), response.message()));
      return;
    }

    try (ResponseBody responseBody = response.body()) {
      MediaType mediaType = MediaType.parse(response.header("Content-Type"));
      Charset charset = mediaType.charset();
      if (charset == null) {
        throw new IllegalArgumentException(String.format(
          "Could not parse character set from '%s'", mediaType.toString()));
      }

      Closeable closeThis = null;
      try {
        InputStream inputStream = responseBody.byteStream();
        closeThis = inputStream;

        if ("GZIP".equals(compressionAlgorithm)) {
          inputStream = new GZIPInputStream(inputStream);
          closeThis = inputStream;
        }

        // This example assumes that the download content has a charset in the content-type header, e.g.
        // text/plain; charset=UTF-8
        if ("text".equals(mediaType.type()) && "plain".equals(mediaType.subtype())) {
          InputStreamReader inputStreamReader = new InputStreamReader(inputStream, charset);
          closeThis = inputStreamReader;

          BufferedReader reader = new BufferedReader(inputStreamReader);
          closeThis = reader;

          String line;
          do {
            line = reader.readLine();
            // Process line by line.
          } while (line != null);
        } else {
          //Handle content with binary data/other media types here.
        }
      } finally {
        if (closeThis != null) {
          closeThis.close();
        }
      }
    }
  }
}