На этой странице показано, как программно создавать и обновлять источники данных, позволяющие вставлять продукты. Автоматизированные источники данных упрощают отправку данных о ваших продуктах в Google. Автоматизированные источники данных гарантируют, что самая актуальная информация о соответствующих продуктах с вашего сайта попадет в Google.
Content API for Shopping позволяет создавать только первичные источники данных. С помощью API источников данных торговцев вы можете создавать следующие типы источников данных:
- Основные источники данных о продукте
- Дополнительные источники данных о продуктах
- Источники данных о местных запасах
- Источники данных региональной инвентаризации
- Источники данных о промоакции
- Источники данных обзора продуктов
- Источники данных отзывов продавцов
Content API for Shopping позволяет управлять источниками данных только с помощью файлового ввода. Merchant API позволяет управлять источниками данных как с помощью файлов, так и входных данных API.
Используя API источников данных о продавцах, вы можете делать следующее:
- Создайте новый основной источник данных с определенными
feedLabel
иcontentLanguage
. - Создайте источник данных, в котором не установлены поля
feedLabel
иcontentLanguage
. Используя этот тип источника данных, вы можете настроить таргетинг своих продуктов на несколько стран, поскольку вы можете вставлять продукты с различными комбинациямиfeedLabel
иcontentLanguage
в один источник данных. - Создайте дополнительный источник данных для связи с существующим основным источником данных.
- Настройте расписание для файлового источника данных.
- Зарегистрируйте свою учетную запись для автоматического управления источниками данных.
- Управляйте источниками данных API.
- Управляйте правилом источников данных по умолчанию, используя основные источники данных о продуктах.
- Используйте другие типы источников данных, например рекламные акции.
Вы не можете использовать Merchant API для вставки продуктов в источник данных, который содержит как локальные, так и онлайн-продукты. Дополнительные сведения о каналах источников данных см. в разделе Каналы .
Предварительные условия
- Ваша учетная запись должна быть перенесена на каналы с одним языковым стандартом .
Чтобы убедиться, что учетная запись уже перенесена в целевое разделение данных, используйте список источников данных или методы get. Если вы не имеете на это права, вы получите следующее сообщение об исключении и вам следует обратиться в службу поддержки.
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.
Создайте новый источник данных
Первичные источники данных – это основные источники данных для ваших ресурсов Merchant Center. Вы можете добавлять или удалять продукты только с помощью основного источника данных. Если каждый товар, который вы добавляете в основной источник данных, соответствует данным и требованиям Merchant Center, вам не нужно будет создавать дополнительные источники данных.
Чтобы создать новый основной источник данных с определенными feedLabel
и contentLanguage
, задайте поля feedLabel
и contentLanguage
в конфигурации для конкретного типа. Дополнительные сведения об этих полях см. в PrimaryProductDataSource
.
В следующем образце запроса показано, как можно создать основной источник данных о продукте:
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"
}
}
Замените следующее:
- {ACCOUNT_ID} : уникальный идентификатор вашего аккаунта Merchant Center.
- {DISPLAY_NAME} : отображаемое имя источника данных.
- {CONTENT_LANGUAGE} : двухбуквенный код языка ISO 639-1 продуктов в источнике данных.
- {FEED_LABEL} : метка фида источника данных.
- {COUNTRY} : код территории CLDR целевой страны продуктов, которые будут загружены с использованием источника данных.
После успешного выполнения запроса вы увидите следующий ответ:
{
"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"
}
Дополнительные сведения о создании источника данных см. в методе account.dataSources.create .
Чтобы просмотреть вновь созданный источник данных, используйте метод account.dataSources.get или account.dataSources.list .
В следующем примере показано feedLabel
как создать основной источник данных о продукте для комбинации GB
и en
и contentLanguage
.
Ява
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;
}
}
Создайте новый первичный источник данных, который поможет ориентироваться на несколько стран.
Чтобы создать новый основной фид, который поможет вам настроить таргетинг на несколько стран, настройте источник данных с помощью PrimaryProductDataSource
и не устанавливайте поля feedLabel
и contentLanguage
.
При использовании Content API for Shopping для вас создается только один источник данных API. Используя API источников данных продавца, вы можете иметь несколько источников данных API, некоторые из которых могут быть без установленных полей feedLabel
и contentLanguage
.
Только источники данных с вводом API могут быть без установленных полей feedLabel
и contentLanguage
. Этот тип источников данных не поддерживается для входных файлов.
Создайте дополнительный источник данных и свяжите его с основным источником данных.
Дополнительные источники данных используются только для обновления данных о продуктах, которые уже существуют в одном или нескольких основных источниках данных. У вас может быть несколько дополнительных источников данных, и каждый из них может дополнять данные в любом количестве первичных источников данных.
Вы можете использовать дополнительные источники данных для частичного обновления данных о продуктах, добавляя уникальный идентификатор источника данных в качестве параметра запроса при вызовах методов accounts.productInputs.insert
accounts.productInputs.delete
. Вы можете использовать дополнительные источники данных только для обновления существующих продуктов.
Чтобы создать дополнительный источник данных, настройте свой источник данных с помощью SupplementalProductDataSource
, а затем свяжите его, обновив поле defaultRule
в основном источнике данных.
Для дополнительных файловых источников данных должны быть установлены поля feedLabel
и contentLanguage
. В дополнительных источниках данных API поля feedLabel
и contentLanguage
всегда должны быть не заданы.
В следующем примере показано, как создать файл дополнительного источника данных о продукте для комбинации en
и GB
contentLanguage
feedLabel
.
Ява
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;
}
}
Чтобы создать дополнительный источник данных, который работает для всех feedLabel
и contentLanguage
, выполните следующий пример.
Ява
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.
}
}
Настройте расписание для источника данных файла
Чтобы настроить расписание для вашего фида файлов, настройте источник данных как источник данных файла, используя поле FileInput
, а затем настройте fetchsettings
используя поле FileInput.FetchSettings
.
Удаление источника данных
Чтобы удалить существующий источник данных из вашей учетной записи, используйте метод accounts.dataSources.delete
.
В следующем примере показано, как можно использовать пакет DeleteDataSourceRequest
для удаления источника данных.
Ява
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);
}
}
Получить источник данных
Чтобы получить файл, настроенный в источнике данных, используйте метод accounts.dataSources.fetch
. Этот метод немедленно выполняет выборку данных из источника данных из вашей учетной записи. Этот метод работает только с источниками данных с набором файловых входных данных.
Получить источник данных
Чтобы получить конфигурацию источника данных для вашей учетной записи, используйте метод accounts.dataSources.get
.
В следующем примере показано, как можно использовать пакет GetDataSourceRequest
для получения определенного источника данных для определенной учетной записи Merchant Center.
Ява
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.
}
}
Список источников данных
Чтобы получить список конфигураций источников данных для вашей учетной записи, используйте метод accounts.dataSources.list
.
В следующем примере показано, как можно использовать пакет ListDataSourceRequest
для получения списка всех источников данных для определенной учетной записи Merchant Center.
Ява
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.
}
}
Исправить источник данных
Чтобы обновить конфигурацию существующего источника данных, используйте метод accounts.dataSources.patch
.
В следующем примере показано, как можно использовать пакет UpdateDataSourceRequest
для обновления источника данных. Также показано, как обновить основной источник данных, чтобы добавить дополнительные источники данных к его правилу по умолчанию.
Ява
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;
}
}
Связать источники данных
Основные источники данных о продуктах позволяют управлять правилами источников данных по умолчанию. Правило по умолчанию — это правило, которое применяется ко всем атрибутам в вашем источнике данных. Правило по умолчанию можно установить при создании источника данных или при обновлении существующего источника данных с помощью поля правила по умолчанию.
Дополнительные сведения о настройке правил см. в разделе Настройка правил для источников данных о продуктах .
Следующий пример конфигурации гарантирует, что все атрибуты сначала берутся из источника данных с уникальным идентификатором 1001
. Затем недостающие атрибуты добавляются из первичного источника данных. В конце концов, остальные атрибуты будут взяты из дополнительного источника данных с уникальным идентификатором 1002
если он еще не указан ни в одном другом источнике данных. Если один и тот же атрибут указан в нескольких источниках данных, выбирается значение выше в списке.
defaultRule {
takeFromDataSources: [
'1001', // Supplemental product data source
'self', // Self reference to the primary data source
'1002' // Supplemental product data source
]
}
Автоматическое управление фидами
Чтобы зарегистрировать свою учетную запись для автоматического управления источниками данных, необходимо сделать следующее:
- Проверьте, имеет ли ваша учетная запись право на регистрацию, вызвав
accounts.autofeedSettings.getAutofeedSettings
. - Убедитесь, что ваша учетная запись не является учетной записью торговой площадки .
После того как ваша учетная запись будет допущена к регистрации, вы можете использовать метод accounts.autofeedSettings.updateAutofeedSettings
, чтобы включить автоматическое управление источниками данных. Включение автоматического управления источниками данных позволяет Google автоматически добавлять ваши продукты из вашего интернет-магазина и гарантировать их актуальность на платформах Google.
Получить статус загрузки файла
Чтобы получить статус источника данных с помощью файла, выборки или электронной таблицы, вы можете вызвать метод GET
службы accounts.dataSources.fileUploads
. Чтобы получить результат последнего извлечения источника данных, вычисленный асинхронно после завершения обработки источника данных, используйте идентификатор имени latest
.
GET https://merchantapi.googleapis.com/accounts/v1beta/{ACCOUNT_ID}/datasources/{DATASOURCE_ID}/fileUploads/latest
Статус загрузки файла может содержать подробное описание ваших продуктов, включая любые потенциальные проблемы.
Обратите внимание, что статус загрузки файла может отсутствовать, если файл никогда не был загружен. Статус загрузки файла может быть в состоянии обработки, если запрос будет сделан вскоре после загрузки файла.