Ringkasan API sumber Data Penjual

Halaman ini menunjukkan cara membuat dan memperbarui sumber data secara terprogram yang memungkinkan Anda menyisipkan produk. Sumber data otomatis memudahkan pengiriman data produk Anda ke Google. Sumber data otomatis memastikan bahwa informasi terbaru tentang produk yang relevan dari situs Anda sampai ke Google.

Content API for Shopping hanya memungkinkan Anda membuat sumber data utama. Dengan Merchant Data sources API, Anda dapat membuat jenis sumber data berikut:

Content API for Shopping hanya memungkinkan Anda mengelola sumber data dengan input file. Merchant API memungkinkan Anda mengelola sumber data dengan input file dan API.

Dengan menggunakan Merchant Data sources API, Anda dapat melakukan hal berikut:

  • Buat sumber data utama baru dengan feedLabel dan contentLanguage tertentu.
  • Buat sumber data yang tidak memiliki kolom feedLabel dan contentLanguage. Dengan menggunakan jenis sumber data ini, Anda dapat menargetkan beberapa negara untuk produk Anda, karena Anda dapat menyisipkan produk dengan berbagai kombinasi feedLabel dan contentLanguage ke dalam satu sumber data.
  • Buat sumber data tambahan untuk ditautkan ke sumber data utama yang ada.
  • Menyiapkan jadwal untuk sumber data file.
  • Daftarkan akun Anda untuk pengelolaan sumber data otomatis.
  • Mengelola sumber data API.
  • Mengelola aturan default sumber data menggunakan sumber data produk utama.
  • Menggunakan jenis sumber data lain seperti promosi.

Anda tidak dapat menggunakan Merchant API untuk menyisipkan produk di sumber data yang berisi produk lokal dan online. Untuk informasi selengkapnya tentang saluran sumber data, lihat Saluran.

Prasyarat

  • Akun Anda harus telah dimigrasikan ke feed lokalitas tunggal.
  • Untuk memverifikasi bahwa akun sudah dimigrasikan ke pemisahan target data, gunakan daftar sumber data atau metode get. Jika tidak memenuhi syarat, Anda akan menerima pesan pengecualian berikut dan harus menghubungi dukungan.

    This account is in the data sources migration process and can't be used with
    this API yet. Contact support for more info on when this account will be able
    to use the data sources endpoint.
    

Membuat sumber data baru

Sumber data utama adalah sumber data utama untuk inventaris Merchant Center Anda. Anda hanya dapat menambahkan atau menghapus produk menggunakan sumber data utama. Jika setiap produk yang ditambahkan ke sumber data utama memenuhi persyaratan data dan kelayakan Merchant Center, Anda tidak perlu membuat sumber data lagi.

Untuk membuat sumber data utama baru dengan feedLabel dan contentLanguage tertentu, tetapkan kolom feedLabel dan contentLanguage dalam konfigurasi khusus jenis. Untuk mengetahui informasi selengkapnya tentang kolom ini, lihat PrimaryProductDataSource.

Contoh permintaan berikut menunjukkan cara membuat sumber data produk utama:

POST https://merchantapi.googleapis.com/datasources/v1beta/accounts/{ACCOUNT_ID}/dataSources

{
  "displayName": "{DISPLAY_NAME}",
  "primaryProductDataSource": {
    "contentLanguage": "{CONTENT_LANGUAGE}",
    "feedLabel": "{FEED_LABEL}",
    "countries": [
      "{COUNTRY}"
    ],
    "channel": "ONLINE_PRODUCTS"
  }
}

Ganti kode berikut:

  • {ACCOUNT_ID}: ID unik akun Merchant Center Anda.
  • {DISPLAY_NAME}: Nama tampilan sumber data.
  • {CONTENT_LANGUAGE}: Kode bahasa ISO 639-1 dua huruf dari produk di sumber data.
  • {FEED_LABEL}: Label feed sumber data.
  • {COUNTRY}: Kode wilayah CLDR dari negara target produk yang akan diupload menggunakan sumber data.

Setelah permintaan berhasil dijalankan, Anda akan melihat respons berikut:

{
  "name": "accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}",
  "dataSourceId": "{DATASOURCE_ID}",
  "displayName": "{DISPLAY_NAME}",
  "primaryProductDataSource": {
    "channel": "ONLINE_PRODUCTS",
    "feedLabel": "{FEED_LABEL}",
    "contentLanguage": "{CONTENT_LANGUAGE}",
    "countries": [
      "{COUNTRY}"
    ],
    "defaultRule": {
      "takeFromDataSources": [
        {
          "self": true
        }
      ]
    }
  },
  "input": "API"
}

Untuk informasi selengkapnya tentang cara membuat sumber data, lihat metode accounts.dataSources.create.

Untuk melihat sumber data yang baru dibuat, gunakan metode accounts.dataSources.get atau accounts.dataSources.list.

Contoh berikut menunjukkan cara membuat sumber data produk utama untuk kombinasi GB dan en feedLabel dan contentLanguage.

Java

     public static String createDataSource(Config config, String displayName) throws Exception {
    GoogleCredentials credential = new Authenticator().authenticate();

    DataSourcesServiceSettings dataSourcesServiceSettings =
        DataSourcesServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    String parent = getParent(config.getAccountId().toString());

    // The type of data that this datasource will receive.
    PrimaryProductDataSource primaryProductDataSource =
        PrimaryProductDataSource.newBuilder()
            // Channel can be "ONLINE_PRODUCTS" or "LOCAL_PRODUCTS" or "PRODUCTS" .
            // While accepted, datasources with channel "products" representing unified products
            // currently cannot be used with the Products bundle.
            .setChannel(PrimaryProductDataSource.Channel.ONLINE_PRODUCTS)
            .addCountries("GB")
            .build();

    try (DataSourcesServiceClient dataSourcesServiceClient =
        DataSourcesServiceClient.create(dataSourcesServiceSettings)) {

      CreateDataSourceRequest request =
          CreateDataSourceRequest.newBuilder()
              .setParent(parent)
              .setDataSource(
                  DataSource.newBuilder()
                      .setDisplayName(displayName)
                      .setPrimaryProductDataSource(primaryProductDataSource)
                      .build())
              .build();

      System.out.println("Sending Create PrimaryProduct DataSource request");
      DataSource response = dataSourcesServiceClient.createDataSource(request);
      System.out.println("Created DataSource Name below");
      System.out.println(response.getName());
      return response.getName();
    } catch (Exception e) {
      System.out.println(e);
      System.exit(1);
      // Null is necessary to satisfy the compiler as we're not returning a String on failure.
      return null;
    }
  }

Membuat sumber data utama baru yang membantu menargetkan beberapa negara

Untuk membuat feed utama baru yang membantu Anda menargetkan beberapa negara, konfigurasikan sumber data menggunakan PrimaryProductDataSource dan jangan tetapkan kolom feedLabel dan contentLanguage.

Dengan menggunakan Content API for Shopping, hanya ada satu sumber data API yang dibuat untuk Anda. Dengan menggunakan API Sumber Data Merchant, Anda dapat memiliki beberapa sumber data API, beberapa di antaranya dapat tanpa menetapkan kolom feedLabel dan contentLanguage.

Hanya sumber data dengan input API yang dapat tanpa menetapkan kolom feedLabel dan contentLanguage. Jenis sumber data ini tidak didukung untuk input file.

Membuat sumber data tambahan dan menautkannya ke sumber data utama

Sumber data tambahan hanya digunakan untuk memperbarui data produk yang sudah ada di satu atau beberapa sumber data utama. Anda dapat memiliki beberapa sumber data tambahan, dan masing-masing dapat melengkapi data di sejumlah sumber data utama.

Anda dapat menggunakan sumber data tambahan untuk melakukan pembaruan sebagian pada data produk dengan menambahkan ID unik sumber data sebagai parameter kueri saat melakukan panggilan ke metode accounts.productInputs.insert dan accounts.productInputs.delete. Anda hanya dapat menggunakan sumber data tambahan untuk memperbarui produk yang ada.

Untuk membuat sumber data tambahan, konfigurasikan sumber data menggunakan SupplementalProductDataSource, lalu tautkan dengan memperbarui kolom defaultRule di sumber data utama Anda.

Sumber data file tambahan harus menetapkan kolom feedLabel dan contentLanguage. Sumber data API tambahan harus selalu memiliki kolom feedLabel dan contentLanguage yang tidak ditetapkan.

Contoh berikut menunjukkan cara membuat sumber data produk tambahan file untuk kombinasi en dan GB contentLanguage dan feedLabel.

Java

     private static FileInput setFileInput() {
    // If FetchSettings are not set, then this will be an `UPLOAD` file type
    // that you must manually upload via the Merchant Center UI.
    return FileInput.newBuilder()
        // FileName is required for `UPLOAD` fileInput type.
        .setFileName("British T-shirts Supplemental Data")
        .build();
  }

  public static String createDataSource(Config config, String displayName, FileInput fileInput)
      throws Exception {
    GoogleCredentials credential = new Authenticator().authenticate();

    DataSourcesServiceSettings dataSourcesServiceSettings =
        DataSourcesServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    String parent = getParent(config.getAccountId().toString());

    try (DataSourcesServiceClient dataSourcesServiceClient =
        DataSourcesServiceClient.create(dataSourcesServiceSettings)) {

      CreateDataSourceRequest request =
          CreateDataSourceRequest.newBuilder()
              .setParent(parent)
              .setDataSource(
                  DataSource.newBuilder()
                      .setDisplayName(displayName)
                      .setSupplementalProductDataSource(
                          SupplementalProductDataSource.newBuilder()
                              .setContentLanguage("en")
                              .setFeedLabel("GB")
                              .build())
                      .setFileInput(fileInput)
                      .build())
              .build();

      System.out.println("Sending create SupplementalProduct DataSource request");
      DataSource response = dataSourcesServiceClient.createDataSource(request);
      System.out.println("Created DataSource Name below");
      System.out.println(response.getName());
      return response.getName();
    } catch (Exception e) {
      System.out.println(e);
      System.exit(1);
      // Null is necessary to satisfy the compiler as we're not returning a String on failure.
      return null;
    }
  }

Untuk membuat sumber data tambahan yang berfungsi untuk semua kombinasi feedLabel dan contentLanguage, jalankan contoh berikut.

Java

     public static String createDataSource(Config config, String displayName) throws Exception {
    GoogleCredentials credential = new Authenticator().authenticate();

    DataSourcesServiceSettings dataSourcesServiceSettings =
        DataSourcesServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    String parent = getParent(config.getAccountId().toString());

    try (DataSourcesServiceClient dataSourcesServiceClient =
        DataSourcesServiceClient.create(dataSourcesServiceSettings)) {

      CreateDataSourceRequest request =
          CreateDataSourceRequest.newBuilder()
              .setParent(parent)
              .setDataSource(
                  DataSource.newBuilder()
                      .setDisplayName(displayName)
                      .setSupplementalProductDataSource(
                          SupplementalProductDataSource.newBuilder().build())
                      .build())
              .build();

      System.out.println("Sending create SupplementalProduct DataSource request");
      DataSource response = dataSourcesServiceClient.createDataSource(request);
      System.out.println("Created DataSource Name below");
      System.out.println(response.getName());
      return response.getName();
    } catch (Exception e) {
      System.out.println(e);
      System.exit(1);
      return null; // Necessary to satisfy the compiler as we're not returning a
      // String on failure.
    }
  }

Menyiapkan jadwal untuk sumber data file

Untuk menyiapkan jadwal feed file, konfigurasikan sumber data Anda menjadi sumber data file menggunakan kolom FileInput, lalu siapkan fetchsettings menggunakan kolom FileInput.FetchSettings.

Menghapus sumber data

Untuk menghapus sumber data yang ada dari akun Anda, gunakan metode accounts.dataSources.delete.

Contoh berikut menunjukkan cara menggunakan paket DeleteDataSourceRequest untuk menghapus sumber data.

Java

     public static void deleteDataSource(Config config, String dataSourceId) throws Exception {
    GoogleCredentials credential = new Authenticator().authenticate();

    DataSourcesServiceSettings dataSourcesServiceSettings =
        DataSourcesServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    String name =
        DataSourceName.newBuilder()
            .setAccount(config.getAccountId().toString())
            .setDatasource(dataSourceId)
            .build()
            .toString();

    try (DataSourcesServiceClient dataSourcesServiceClient =
        DataSourcesServiceClient.create(dataSourcesServiceSettings)) {
      DeleteDataSourceRequest request = DeleteDataSourceRequest.newBuilder().setName(name).build();

      System.out.println("Sending deleteDataSource request");
      // Delete works for any datasource type.
      // If Type "Supplemental", delete will only work if it's not linked to any primary feed.
      // If a link exists and the Type is "Supplemental", you will need to remove the supplemental
      // feed from the default and/or custom rule(s) of any primary feed(s) that references it. Then
      // retry the delete.

      dataSourcesServiceClient.deleteDataSource(request); // No response returned on success.
      System.out.println(
          "Delete successful, note that it may take a few minutes for the delete to update in"
              + " the system.");
    } catch (Exception e) {
      System.out.println(e);
    }
  }

Mengambil sumber data

Untuk mengambil file yang dikonfigurasi di sumber data, gunakan metode accounts.dataSources.fetch. Metode ini langsung melakukan pengambilan data di sumber data dari akun Anda. Metode ini hanya berfungsi pada sumber data dengan kumpulan input file.

Mendapatkan sumber data

Untuk mengambil konfigurasi sumber data untuk akun Anda, gunakan metode accounts.dataSources.get.

Contoh berikut menunjukkan cara menggunakan paket GetDataSourceRequest untuk mengambil sumber data tertentu untuk akun Merchant Center tertentu.

Java

     public static DataSource getDataSource(Config config, String dataSourceId) throws Exception {

    // Obtains OAuth token based on the user's configuration.
    GoogleCredentials credential = new Authenticator().authenticate();

    // Creates service settings using the credentials retrieved above.
    DataSourcesServiceSettings dataSourcesServiceSettings =
        DataSourcesServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    // Creates datasource name to identify datasource.
    String name =
        DataSourceName.newBuilder()
            .setAccount(config.getAccountId().toString())
            .setDatasource(dataSourceId)
            .build()
            .toString();

    // Calls the API and catches and prints any network failures/errors.
    try (DataSourcesServiceClient dataSourcesServiceClient =
        DataSourcesServiceClient.create(dataSourcesServiceSettings)) {

      // The name has the format: accounts/{account}/datasources/{datasource}
      GetDataSourceRequest request = GetDataSourceRequest.newBuilder().setName(name).build();

      System.out.println("Sending GET DataSource request:");
      DataSource response = dataSourcesServiceClient.getDataSource(request);

      System.out.println("Retrieved DataSource below");
      System.out.println(response);
      return response;
    } catch (Exception e) {
      System.out.println(e);
      System.exit(1);
      return null; // Necessary to satisfy the compiler as we're not returning a
      // DataSource on failure.
    }
  }

Mencantumkan sumber data

Untuk mencantumkan konfigurasi sumber data untuk akun Anda, gunakan metode accounts.dataSources.list.

Contoh berikut menunjukkan cara menggunakan paket ListDataSourceRequest untuk mencantumkan semua sumber data untuk akun Merchant Center tertentu.

Java

     public static ArrayList<DataSource> listDataSources(Config config) throws Exception {

    // Obtains OAuth token based on the user's configuration.
    GoogleCredentials credential = new Authenticator().authenticate();

    // Creates service settings using the credentials retrieved above.
    DataSourcesServiceSettings dataSourcesServiceSettings =
        DataSourcesServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    // Creates parent to identify the account from which to list all the datasources.
    String parent = getParent(config.getAccountId().toString());

    // Calls the API and catches and prints any network failures/errors.
    try (DataSourcesServiceClient dataSourcesServiceClient =
        DataSourcesServiceClient.create(dataSourcesServiceSettings)) {

      // The parent has the format: accounts/{account}
      ListDataSourcesRequest request =
          ListDataSourcesRequest.newBuilder().setParent(parent).build();

      System.out.println("Sending list datasources request:");
      ListDataSourcesPagedResponse response = dataSourcesServiceClient.listDataSources(request);

      int count = 0;
      ArrayList<DataSource> dataSources = new ArrayList<DataSource>();
      ArrayList<DataSource> justPrimaryDataSources = new ArrayList<DataSource>();

      // Iterates over all rows in all pages and prints the datasource in each row.
      // Automatically uses the `nextPageToken` if returned to fetch all pages of data.
      for (DataSource element : response.iterateAll()) {
        System.out.println(element);
        count++;
        dataSources.add(element);
        // The below lines show how to filter datasources based on type.
        // `element.hasSupplementalProductDataSource()` would give you supplemental
        // datasources, etc.
        if (element.hasPrimaryProductDataSource()) {
          justPrimaryDataSources.add(element);
        }
      }
      System.out.print("The following count of elements were returned: ");
      System.out.println(count);
      return dataSources;
    } catch (Exception e) {
      System.out.println(e);
      System.exit(1);
      return null; // Necessary to satisfy the compiler as we're not returning an
      // ArrayList<DataSource> on failure.
    }
  }

Sumber data patch

Untuk memperbarui konfigurasi sumber data yang ada, gunakan metode accounts.dataSources.patch.

Contoh berikut menunjukkan cara menggunakan paket UpdateDataSourceRequest untuk memperbarui sumber data. Contoh ini juga menunjukkan cara memperbarui sumber data utama untuk menambahkan sumber data tambahan ke aturan defaultnya.

Java

     public static String updateDataSource(Config config, String displayName, String dataSourceId)
      throws Exception {
    GoogleCredentials credential = new Authenticator().authenticate();

    DataSourcesServiceSettings dataSourcesServiceSettings =
        DataSourcesServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    // Creates datasource name to identify datasource.
    String name =
        DataSourceName.newBuilder()
            .setAccount(config.getAccountId().toString())
            .setDatasource(dataSourceId)
            .build()
            .toString();

    DataSource dataSource =
        DataSource.newBuilder()
            // Update the datasource to have the new display name
            .setDisplayName(displayName)
            .setName(name)
            .build();

    FieldMask fieldMask = FieldMask.newBuilder().addPaths("display_name").build();

    try (DataSourcesServiceClient dataSourcesServiceClient =
        DataSourcesServiceClient.create(dataSourcesServiceSettings)) {

      UpdateDataSourceRequest request =
          UpdateDataSourceRequest.newBuilder()
              .setDataSource(dataSource)
              .setUpdateMask(fieldMask)
              .build();

      System.out.println("Sending Update DataSource request");
      DataSource response = dataSourcesServiceClient.updateDataSource(request);
      System.out.println("Updated DataSource Name below");
      System.out.println(response.getName());
      return response.getName();
    } catch (Exception e) {
      System.out.println(e);
      System.exit(1);
      return null;
    }
  }

  public String updateDataSource(
      Config config,
      String primaryDataSourceName,
      String firstSupplementalDataSourceName,
      String secondSupplementalDataSourceName)
      throws Exception {
    GoogleCredentials credential = new Authenticator().authenticate();

    DataSourcesServiceSettings dataSourcesServiceSettings =
        DataSourcesServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    // Setting self to 'true' refers to the primary datasource itself.
    DataSourceReference dataSourceReferenceSelf =
        DataSourceReference.newBuilder().setSelf(true).build();
    DataSourceReference firstSupplementalDataSourceReference =
        DataSourceReference.newBuilder()
            .setSupplementalDataSourceName(firstSupplementalDataSourceName)
            .build();
    DataSourceReference secondSupplementalDataSourceReference =
        DataSourceReference.newBuilder()
            .setSupplementalDataSourceName(secondSupplementalDataSourceName)
            .build();

    // The attributes will first be taken from the primary DataSource.
    // Then the first supplemental DataSource if the attribute is not in the primary DataSource
    // And finally the second supplemental DataSource if not in the first two DataSources.
    // Note that CustomRules could change the behavior of how updates are applied.
    DefaultRule defaultRule =
        DefaultRule.newBuilder()
            .addTakeFromDataSources(dataSourceReferenceSelf)
            .addTakeFromDataSources(firstSupplementalDataSourceReference)
            .addTakeFromDataSources(secondSupplementalDataSourceReference)
            .build();

    // The type of data that this datasource will receive.
    PrimaryProductDataSource primaryProductDataSource =
        PrimaryProductDataSource.newBuilder().setDefaultRule(defaultRule).build();

    DataSource dataSource =
        DataSource.newBuilder()
            // Update the primary datasource to have the default rule datasources in the correct
            // order.
            .setPrimaryProductDataSource(primaryProductDataSource)
            .setName(primaryDataSourceName)
            .build();

    // The '.' signifies a nested field.
    FieldMask fieldMask =
        FieldMask.newBuilder().addPaths("primary_product_data_source.default_rule").build();

    try (DataSourcesServiceClient dataSourcesServiceClient =
        DataSourcesServiceClient.create(dataSourcesServiceSettings)) {

      UpdateDataSourceRequest request =
          UpdateDataSourceRequest.newBuilder()
              .setDataSource(dataSource)
              .setUpdateMask(fieldMask)
              .build();

      System.out.println("Sending Update DataSource request");
      DataSource response = dataSourcesServiceClient.updateDataSource(request);
      System.out.println("Updated DataSource Name below");
      System.out.println(response.getName());
      return response.getName();
    } catch (Exception e) {
      System.out.println(e);
      System.exit(1);
      return null;
    }
  }

Sumber data produk utama memungkinkan Anda mengelola aturan default sumber data. Aturan default adalah aturan yang berlaku untuk semua atribut di sumber data Anda. Aturan default dapat ditetapkan saat membuat sumber data atau dengan memperbarui sumber data yang ada melalui kolom aturan default.

Untuk informasi selengkapnya tentang cara menyiapkan aturan, lihat Menyiapkan aturan untuk sumber data produk Anda.

Contoh konfigurasi berikut memastikan bahwa semua atribut diambil terlebih dahulu dari sumber data dengan ID unik 1001. Kemudian, atribut yang tidak ada akan ditambahkan dari sumber data utama. Pada akhirnya, atribut yang tersisa akan diambil dari sumber data tambahan dengan ID unik 1002 jika belum disediakan di sumber data lain. Jika atribut yang sama disediakan di beberapa sumber data, nilai yang lebih tinggi dalam daftar akan dipilih.

defaultRule {
 takeFromDataSources: [
   '1001', // Supplemental product data source
   'self', //  Self reference to the primary data source
   '1002' // Supplemental product data source
 ]
}

Pengelolaan feed otomatis

Untuk mendaftarkan akun Anda guna pengelolaan sumber data otomatis, Anda harus melakukan hal berikut:

Setelah akun Anda memenuhi syarat untuk pendaftaran, Anda dapat menggunakan metode accounts.autofeedSettings.updateAutofeedSettings untuk mengaktifkan pengelolaan sumber data secara otomatis. Dengan mengaktifkan pengelolaan sumber data secara otomatis, Google dapat otomatis menambahkan produk Anda dari toko online dan memastikan produk tersebut selalu diperbarui di platform Google.

Mengambil status upload file

Untuk mendapatkan status sumber data dengan file, pengambilan, atau spreadsheet, Anda dapat memanggil metode GET dari layanan accounts.dataSources.fileUploads. Untuk mendapatkan hasil pengambilan terakhir sumber data yang dihitung secara asinkron saat pemrosesan sumber data selesai, gunakan ID nama latest.

GET https://merchantapi.googleapis.com/accounts/v1beta/{ACCOUNT_ID}/datasources/{DATASOURCE_ID}/fileUploads/latest

Status upload file mungkin berisi tampilan mendetail tentang produk Anda, termasuk potensi masalah.

Perhatikan bahwa status upload file mungkin tidak ada jika file tidak pernah diupload. Status upload file mungkin dalam status sedang diproses jika diminta segera setelah file diupload.