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:
- Sumber data produk utama
- Sumber data produk tambahan
- Sumber data inventaris lokal
- Sumber data inventaris regional
- Sumber data promosi
- Sumber data ulasan produk
- Sumber data ulasan penjual
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
dancontentLanguage
tertentu. - Buat sumber data yang tidak memiliki kolom
feedLabel
dancontentLanguage
. Dengan menggunakan jenis sumber data ini, Anda dapat menargetkan beberapa negara untuk produk Anda, karena Anda dapat menyisipkan produk dengan berbagai kombinasifeedLabel
dancontentLanguage
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;
}
}
Menautkan sumber data
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:
- Periksa apakah akun Anda memenuhi syarat untuk pendaftaran dengan memanggil
metode
accounts.autofeedSettings.getAutofeedSettings
. - Pastikan akun Anda bukan akun marketplace.
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.