Пользовательский пакет Google Content API для продуктов не работает
Для проекта мне нужно автоматизировать процесс обновления продуктов в Google Merchant Center. Эти продукты были добавлены через канал с Google Sheet в качестве метода ввода. Это "основная подача".
Согласно документации API v2.1, обновление продуктов, добавленных через основной канал, можно выполнить с помощью дополнительного канала (см. https://developers.google.com/shopping-content/guides/products/supplemental-feeds/using-supplemental-feeds). Этот дополнительный фид позволяет обновлять только часть атрибутов продукта.
Используя идентификатор дополнительного канала, я заставил вставлять отдельные продукты. Однако из-за ограничений на запросы api http и огромного количества обновляемых продуктов мне необходимо использовать пакетный метод. К сожалению, я не могу заставить его работать.
TL;DR Вставка одного продукта работает, вставка продукта с помощью метода custombatch не работает. Ответ пакетного метода кажется нормальным, но не влияет на панель управления Google Merchant Center.
Реализация
Обслуживание:
service = build('content', 'v2.1', credentials=scoped_credentials)
Обновление одного продукта через мой дополнительный канал работает со следующим кодом.
/*
product = {'title': 'Single update 12-42', 'price': {'value': '69', 'currency': 'EUR'}, 'offerId': 'abcd1', 'contentLanguage': 'en', 'targetCountry': 'NL', 'channel': 'online', 'availability': 'out of stock'}
*/
result = service.products().insert(merchantId=MERCHANT_ID, body=product, feedId=FEED_ID).execute()
/*
result = {'kind': 'content#product', 'id': 'online:en:NL:abcd1', 'offerId': 'abcd1', 'contentLanguage': 'en', 'targetCountry': 'NL', 'channel': 'online'}
*/
Однако выполнение обновления через пакетный запрос не имеет никакого эффекта.
/*
body = {'entries': [{'batchId': 1, 'merchantId': MERCHANT_ID, 'method': 'insert', 'feedId': FEED_ID, 'product': {'title': 'Batch update 12-44', 'price': {'value': '69', 'currency': 'EUR'}, 'offerId': 'abcd2', 'contentLanguage': 'en', 'targetCountry': 'NL', 'channel': 'online', 'availability': 'out of stock'}}]}
*/
result = service.products().custombatch(body=body).execute()
/*
result = {'kind': 'content#productsCustomBatchResponse', 'entries': [{'kind': 'content#productsCustomBatchResponseEntry', 'batchId': 1, 'product': {'kind': 'content#product', 'id': 'online:en:NL:abcd2', 'offerId': 'abcd2', 'contentLanguage': 'en', 'targetCountry': 'NL', 'channel': 'online'}}]}
*/
Примечательно, что я получаю действительный ответ без каких-либо ошибок. Тем не менее, нет никакого эффекта на панели инструментов торгового центра с пакетным методом (есть с одиночной вставкой).
Кто-нибудь еще сталкивается с такой же проблемой, или я что-то упускаю?
1 ответ
Я столкнулся с той же проблемой при интеграции клиентской библиотеки Node. После некоторого исследования я нашел ответ на этот вопрос на GitHub.
Вам нужно добавить поле «ресурс», которое содержит «записи», поскольку они отправляются как часть тела. Вы можете обратиться к проблеме GitHub здесь.
Измените тело кода на:
body = {'resource': {'entries': [{'batchId': 1, 'merchantId': MERCHANT_ID, 'method': 'insert', 'feedId': FEED_ID, 'product': {'title': 'Batch update 12-44', 'price': {'value': '69', 'currency': 'EUR'}, 'offerId': 'abcd2', 'contentLanguage': 'en', 'targetCountry': 'NL', 'channel': 'online', 'availability': 'out of stock'}}]}}