На этой странице объясняется, как вы можете загружать свои продукты и управлять ими программно. Используя API торговых продуктов, вы можете вставлять или обновлять продукт в источнике данных, получать продукт из своей учетной записи и удалять продукт из источника данных.
API торговых продуктов содержит два ресурса.
-
productInputs
представляет входные части ваших продуктов. -
products
представляют собой обработанные продукты, созданные из входных частей.
productInputs
может быть первичным и дополнительным, в зависимости от того, загружается ли он в основной или дополнительный источник данных . Каждый product
будет создан из одного основного productInput
и любого количества дополнительных productInputs
.
Вы можете использовать API Merchant Products для создания каталогов интернет-магазинов или локальных магазинов. Это продукты, которые могут появляться в нескольких местах покупок . Вы можете использовать ресурс productInputs
после того, как создадите свою учетную запись Merchant Center, настроите свой первый источник данных и будете готовы загрузить первоначальный набор продуктов через API.
Хотя продавцы имеют возможность загружать продукты с помощью файла PrimaryProductDataSource , создание и удаление продуктов с помощью Merchant API дает несколько преимуществ. Эти преимущества включают более быстрое время отклика и возможность обновлять продукты в режиме реального времени без необходимости управлять большими файлами. Прежде чем изменения продукта, внесенные вызовами API, отобразятся в базе данных Покупок, может пройти до нескольких часов.
Предварительные условия
Если у вас нет источника данных, создайте его с помощью API источников данных Merchant или Merchant Center.
Если у вас уже есть источник данных, который вы создали с помощью пользовательского интерфейса Merchant Center или API, вы можете использовать API Merchant Products API для добавления своих продуктов. Если вы используете Content API for Shopping для добавления продуктов, обратитесь к руководству по миграции, чтобы понять, как начать работу с API Merchant Products API.
Вы несете ответственность за соблюдение правил в отношении товарной рекламы и размещения бесплатных объявлений . Товарная реклама оставляет за собой право обеспечивать соблюдение этих политик и реагировать соответствующим образом, если мы обнаружим контент или поведение, нарушающее эти политики.
Ресурсы
Ресурс products
позволяет получать информацию о продуктах из базы данных покупок .
Ресурс productInput
представляет входные данные, которые вы отправляете для продукта. Он также предоставляет методы, позволяющие обновлять или удалять информацию о продукте по одному или сразу по нескольким в пакетном режиме . Ресурс productInput
должен иметь следующие поля:
-
channel
: канал продукта. -
offerId
: уникальный идентификатор продукта. -
contentLanguage
: двухбуквенный код языка ISO 639-1 для продукта. -
feedLabel
: метка, которая позволяет классифицировать и идентифицировать ваши продукты. Максимально допустимое количество символов — 20. Поддерживаемые символы —AZ
,0-9
, дефис и подчеркивание. Ярлык фида не должен содержать пробелов. Дополнительную информацию см. в разделе Использование ярлыков фидов .
Загрузите информацию о продукте в свой аккаунт
Чтобы загрузить данные о продукте в свою учетную запись, используйте метод accounts.productInputs.insert
. Необходимо передать уникальный идентификатор основного или дополнительного источника данных .
В следующем образце запроса показано, как вы можете использовать метод accounts.productInputs.insert
для загрузки входных данных о продукте в свой торговый аккаунт. В запросе задаются цена доставки и регион, а также пользовательские атрибуты, такие как дата изготовления и размер.
POST https://merchantapi.googleapis.com/products/v1beta/accounts/{ACCOUNT_ID}/productInputs:insert?dataSource={DATASOURCE}
{
"name": "{PRODUCT_TITLE}",
"versionNumber": {VERSION_NUMBER},
"contentLanguage": "{CONTENT_LANGUAGE}",
"feedLabel": "{FEED_LABEL}",
"offerId": "{OFFER_ID}",
"channel": "ONLINE",
"attributes": {
"availability": "in stock",
"imageLink": "{IMAGE_LINK}",
"link": "{PRODUCT_LINK}",
"brand": "{BRAND_NAME}",
"price": {
"currencyCode": "{CURRENCY_CODE}",
"amountMicros": {PRICE}
},
"color": "red",
"productWeight": {
"value": 320,
"unit": "g"
},
"adult": false,
"shipping": [
{
"country": "GB",
"price": {
"amountMicros": {SHIPPING_COST},
"currencyCode": "{CURRENCY_CODE_SHIPPING}"
},
"postalCode": "{SHIPPING_POSTALCODE}",
"service": "",
"region": "{SHIPPING_REGION}",
"maxHandlingTime": "{MAX_HANDLING_TIME}",
"minHandlingTime": "{MIN_HANDLING_TIME}",
"maxTransitTime": "{MAX_TRANSIT_TIME}",
"minTransitTime": "{MIN_TRANSIT_TIME}"
}
],
"gender": "Female"
},
"customAttributes": [
{
"name": "size",
"value": "Large"
},
{
"name": "Date of Manufacturing",
"value": "2024-05-05"
}
]
}
Замените следующее:
- {ACCOUNT_ID} : уникальный идентификатор вашего аккаунта Merchant Center.
- {DATASOURCE} : уникальный идентификатор источника данных. Он должен быть в
accounts/
{ACCOUNT_ID}/dataSources/
{DATASOURCE_ID} . - {PRODUCT_TITLE} : название продукта.
- {VERSION_NUMBER} : номер версии продукта. Необязательный.
- {CONTENT_LANGUAGE} : двухбуквенный код языка продукта по стандарту ISO 639-1 . Необходимый.
- {FEED_LABEL} : ярлык, позволяющий классифицировать и идентифицировать ваши продукты. Максимально допустимое количество символов — 20. Поддерживаемые символы —
AZ
,0-9
, дефис и подчеркивание. Ярлык фида не должен содержать пробелов. - {OFFER_ID} : уникальный идентификатор продукта. Необходимый.
- {IMAGE_LINK} : ссылка на изображение продукта на вашем веб-сайте. Необязательный.
- {PRODUCT_LINK} : ссылка на продукт на вашем веб-сайте. Необязательный.
- {CURRENCY_CODE} : валюта цены с использованием трехбуквенных сокращений в соответствии со стандартом ISO 4217 . Необязательный.
- {PRICE} : цена продукта, представленная числом в микронах. Необязательный.
- {SHIPPING_COST} : фиксированная цена доставки, представленная в виде числа. Необязательный.
- {SHIPPING_POSTALCODE} : диапазон почтовых индексов, к которому применяется стоимость доставки. Необязательный.
- {MAX_HANDLING_TIME} : максимальное время обработки в рабочих днях между получением заказа и его отправкой. Необязательный.
- {MIN_HANDLING_TIME} : минимальное время обработки в рабочих днях между получением заказа и его отправкой. Значение 0 означает, что заказ доставляется в тот же день, когда он был получен. Необязательный.
- {MAX_TRANSIT_TIME} : максимальное время доставки в рабочих днях между отправкой заказа и доставкой. Необязательный.
- {MIN_TRANSIT_TIME} : минимальное время доставки в рабочих днях между отправкой заказа и доставкой. Значение 0 означает, что заказ доставляется в тот же день, когда он был отправлен. Необязательный.
Если запрос выполнен успешно, вы увидите следующий ответ:
{
"name": "{PRODUCT_NAME}",
"product": "{PRODUCT_ID}",
"channel": "ONLINE",
"offerId": "{OFFER_ID}",
"contentLanguage": "{CONTENT_LANGUAGE}",
"feedLabel": "{FEED_LABEL}",
"versionNumber": "{VERSION_NUMBER}",
"attributes": {
"link": "{PRODUCT_LINK}",
"imageLink": "{IMAGE_LINK}",
"adult": false,
"availability": "in stock",
"brand": "{BRAND_NAME}",
"color": "red",
"gender": "Female",
"price": {
"amountMicros": "{PRICE}",
"currencyCode": "{CURRENCY_CODE}"
},
"shipping": [
{
"price": {
"amountMicros": "{SHIPPING_COST}",
"currencyCode": "{CURRENCY_CODE}"
},
"country": "{SHIPPING_COUNTRY}",
"region": "{SHIPPING_REGION}",
"postalCode": "{SHIPPING_POSTALCODE}",
"minHandlingTime": "{MIN_HANDLING_TIME}",
"maxHandlingTime": "{MAX_HANDLING_TIME}",
"minTransitTime": "{MIN_TRANSIT_TIME}",
"maxTransitTime": "{MAX_TRANSIT_TIME}"
}
],
"productWeight": {
"value": 320,
"unit": "g"
}
},
"customAttributes": [
{
"name": "Size",
"value": "Large"
},
{
"name": "Date of Manufacturing",
"value": "2024-05-05"
}
]
}
Чтобы добавить продукт в свой аккаунт Merchant Center, вы можете использовать метод google.shopping.merchant.accounts.v1beta.InsertProductInputSample
, как показано в следующем примере.
Ява
public static void insertProductInput(Config config, String dataSource) throws Exception {
// Obtains OAuth token based on the user's configuration.
GoogleCredentials credential = new Authenticator().authenticate();
// Creates service settings using the credentials retrieved above.
ProductInputsServiceSettings productInputsServiceSettings =
ProductInputsServiceSettings.newBuilder()
.setCredentialsProvider(FixedCredentialsProvider.create(credential))
.build();
// Creates parent to identify where to insert the product.
String parent = getParent(config.getAccountId().toString());
// Calls the API and catches and prints any network failures/errors.
try (ProductInputsServiceClient productInputsServiceClient =
ProductInputsServiceClient.create(productInputsServiceSettings)) {
// Price to be used for shipping ($33.45).
Price price = Price.newBuilder().setAmountMicros(33_450_000).setCurrencyCode("USD").build();
Shipping shipping =
Shipping.newBuilder()
.setPrice(price)
.setCountry("GB")
.setService("1st class post")
.build();
Shipping shipping2 =
Shipping.newBuilder()
.setPrice(price)
.setCountry("FR")
.setService("1st class post")
.build();
Attributes attributes =
Attributes.newBuilder()
.setTitle("A Tale of Two Cities")
.setDescription("A classic novel about the French Revolution")
.setLink("https://exampleWebsite.com/tale-of-two-cities.html")
.setImageLink("https://exampleWebsite.com/tale-of-two-cities.jpg")
.setAvailability("in stock")
.setCondition("new")
.setGoogleProductCategory("Media > Books")
.setGtin(0, "9780007350896")
.addShipping(shipping)
.addShipping(shipping2)
.build();
// The datasource can be either a primary or supplemental datasource.
InsertProductInputRequest request =
InsertProductInputRequest.newBuilder()
.setParent(parent)
// You can only insert products into datasource types of Input "API" and "FILE", and
// of Type "Primary" or "Supplemental."
// This field takes the `name` field of the datasource.
.setDataSource(dataSource)
// If this product is already owned by another datasource, when re-inserting, the
// new datasource will take ownership of the product.
.setProductInput(
ProductInput.newBuilder()
.setChannel(ChannelEnum.ONLINE)
.setContentLanguage("en")
.setFeedLabel("label")
.setOfferId("sku123")
.setAttributes(attributes)
.build())
.build();
System.out.println("Sending insert ProductInput request");
ProductInput response = productInputsServiceClient.insertProductInput(request);
System.out.println("Inserted ProductInput Name below");
// The last part of the product name will be the product ID assigned to a product by Google.
// Product ID has the format `channel~contentLanguage~feedLabel~offerId`
System.out.println(response.getName());
System.out.println("Inserted Product Name below");
System.out.println(response.getProduct());
} catch (Exception e) {
System.out.println(e);
}
}
Получите обработанный продукт из своей учетной записи
Чтобы получить обработанный продукт из вашей учетной записи, используйте метод accounts.products.get
. После вставки обработанный продукт может появиться через несколько минут.
GET https://merchantapi.googleapis.com/products/v1beta/accounts/{ACCOUNT_ID}/products/{PRODUCT_NAME}
Замените {PRODUCT_NAME} на имя входного ресурса продукта, который вы хотите удалить. Например, online~en~US~sku123
.
Вы можете получить имя ресурса обработанного продукта из поля product
в ответе accounts.productInputs.insert
.
Чтобы получить один продукт для определенного аккаунта Merchant Center, вы можете использовать метод google.shopping.merchant.accounts.v1beta.GetProductRequest
, как показано в следующем примере.
Ява
public static void getProduct(Config config, String product) throws Exception {
// Obtains OAuth token based on the user's configuration.
GoogleCredentials credential = new Authenticator().authenticate();
// Creates service settings using the credentials retrieved above.
ProductsServiceSettings productsServiceSettings =
ProductsServiceSettings.newBuilder()
.setCredentialsProvider(FixedCredentialsProvider.create(credential))
.build();
// Calls the API and catches and prints any network failures/errors.
try (ProductsServiceClient productsServiceClient =
ProductsServiceClient.create(productsServiceSettings)) {
// The name has the format: accounts/{account}/products/{productId}
GetProductRequest request = GetProductRequest.newBuilder().setName(product).build();
System.out.println("Sending get product request:");
Product response = productsServiceClient.getProduct(request);
System.out.println("Retrieved Product below");
System.out.println(response);
} catch (Exception e) {
System.out.println(e);
}
}
Удалить информацию о продукте из своей учетной записи
Чтобы удалить ввод продукта из вашей учетной записи, используйте метод accounts.productInputs.delete
. Для удаления продукта с помощью API продуктов Merchant необходимо передать уникальный идентификатор основного или дополнительного источника данных, которому принадлежит продукт.
Следующий запрос показывает, как можно использовать метод accounts.productInputs.delete
для удаления ввода продукта:
DELETE https://merchantapi.googleapis.com/products/v1beta/accounts/{ACCOUNT_ID}/productInputs/{PRODUCT_NAME}?dataSource=accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}
Замените {PRODUCT_NAME} на имя входного ресурса продукта, который вы хотите удалить. Например, online~en~US~sku123
.
Чтобы удалить продукт для определенного аккаунта Merchant Center, вы можете использовать метод google.shopping.merchant.accounts.v1beta.DeleteProductInputRequest
, как показано в следующем примере.
Ява
public static void deleteProductInput(Config config, String productId, String dataSource)
throws Exception {
// Obtains OAuth token based on the user's configuration.
GoogleCredentials credential = new Authenticator().authenticate();
// Creates service settings using the credentials retrieved above.
ProductInputsServiceSettings productInputsServiceSettings =
ProductInputsServiceSettings.newBuilder()
.setCredentialsProvider(FixedCredentialsProvider.create(credential))
.build();
// Creates product name to identify product.
String name =
ProductInputName.newBuilder()
.setAccount(config.getAccountId().toString())
.setProductinput(productId)
.build()
.toString();
// Calls the API and catches and prints any network failures/errors.
try (ProductInputsServiceClient productInputsServiceClient =
ProductInputsServiceClient.create(productInputsServiceSettings)) {
DeleteProductInputRequest request =
DeleteProductInputRequest.newBuilder().setName(name).setDataSource(dataSource).build();
System.out.println("Sending deleteProductInput request");
productInputsServiceClient.deleteProductInput(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. If you make a products.get or products.list request before a few"
+ " minutes have passed, the old product data may be returned.");
} catch (Exception e) {
System.out.println(e);
}
}
Перечислите продукты из вашего аккаунта
Чтобы перечислить обработанные продукты в вашей учетной записи, используйте метод accounts.products.list
, как показано в следующем запросе.
GET https://merchantapi.googleapis.com/products/v1beta/accounts/{ACCOUNT_ID}/products
Чтобы разместить продукт для определенного аккаунта Merchant Center, вы можете использовать метод google.shopping.merchant.accounts.v1beta.ListProductsRequest
, как показано в следующем примере.
Ява
public static void listProducts(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.
ProductsServiceSettings productsServiceSettings =
ProductsServiceSettings.newBuilder()
.setCredentialsProvider(FixedCredentialsProvider.create(credential))
.build();
// Creates parent to identify the account from which to list all products.
String parent = getParent(config.getAccountId().toString());
// Calls the API and catches and prints any network failures/errors.
try (ProductsServiceClient productsServiceClient =
ProductsServiceClient.create(productsServiceSettings)) {
// The parent has the format: accounts/{account}
ListProductsRequest request = ListProductsRequest.newBuilder().setParent(parent).build();
System.out.println("Sending list products request:");
ListProductsPagedResponse response = productsServiceClient.listProducts(request);
int count = 0;
// 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 (Product product : response.iterateAll()) {
System.out.println(product); // The product includes the `productStatus` field
// That shows approval and disapproval information.
count++;
}
System.out.print("The following count of products were returned: ");
System.out.println(count);
} catch (Exception e) {
System.out.println("An error has occured: ");
System.out.println(e);
}
}