Обновить продукт CSS

Метод UpdateCssProductInput позволяет обновить существующий CSS-код товара, указав имя товара cssProductInput.name ) и JSON-тело, содержащее данные, которые вы хотите обновить для товара.

Примечание : Этот метод обновляет только атрибуты, указанные в запросе на обновление. Ответ содержит те же атрибуты, что и запрос, и не отражает полное состояние CssProductInput после применения обновления. Не следует полагаться на ответ для определения конечного состояния CssProductInput .

PATCH https://css.googleapis.com/v1/accounts/{ACCOUNT_ID}/cssProductInputs/{CSS_PRODUCT_ID}

Чтобы добавить или изменить атрибут в товаре, укажите поле с новым значением в теле JSON-запроса. В приведенном примере заголовок и ссылка на заголовок предложения существующего товара с названием 123/cssProductInputs/de~DE~B019G4 будут обновлены значением атрибута, указанным в теле запроса, при этом все остальные поля останутся без изменений.

HTTP

PATCH https://css.googleapis.com/v1/accounts/{ACCOUNT_ID}/cssProductInputs/{CSS_PRODUCT_ID}
{
  "attributes": {
    "title": "new item title",
    "headlineOfferLink": "headline-offer.com"
  }
}

cURL

curl --location --request PATCH 'https://css.googleapis.com/v1/accounts/{ACCOUNT_ID}/cssProductInputs/{CSS_PRODUCT_ID}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <API_TOKEN>' \
--data '{"attributes":{"numberOfOffers":"99","headlineOfferPrice":{"currency_code":"EUR","amount_micros":"1200000"}}}'

Java

// Copyright 2023 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package shopping.css.samples.v1.cssproducts;

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.protobuf.FieldMask;
import com.google.shopping.css.v1.CssProductInput;
import com.google.shopping.css.v1.CssProductInputsServiceClient;
import com.google.shopping.css.v1.CssProductInputsServiceSettings;
import com.google.shopping.css.v1.UpdateCssProductInputRequest;
import shopping.css.samples.utils.Authenticator;
import shopping.css.samples.utils.Config;

/** This class demonstrates how to update a CSS Product for a given Account */
public class UpdateCssProductInput {

  private static String getName(String domainId, String productId) {
    return String.format("accounts/%s/cssProductInputs/%s", domainId, productId);
  }

  public static void updateCssProductInput(Config config, String productId) throws Exception {
    GoogleCredentials credential = new Authenticator().authenticate();
    String name = getName(config.getDomainId().toString(), productId);

    CssProductInputsServiceSettings cssProductInputsServiceSettings =
        CssProductInputsServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    try (CssProductInputsServiceClient cssProductInputsServiceClient =
        CssProductInputsServiceClient.create(cssProductInputsServiceSettings)) {

      // Updates the title of the CSS Product leaving the rest of the fields unchanged
      UpdateCssProductInputRequest request =
          UpdateCssProductInputRequest.newBuilder()
              .setCssProductInput(
                  CssProductInput.newBuilder()
                      .setName(name)
                      .setAttributes(
                          com.google.shopping.css.v1.Attributes.newBuilder()
                              .setTitle("Attribute Title")
                              .setHeadlineOfferLink("abc.com")
                              .setHeadlineOfferCondition("New")
                              .setDescription("CSS Product description 0")
                              .build())
                      .build())
              .setUpdateMask(FieldMask.newBuilder().addPaths("title").build())
              .build();

      System.out.println("Updating CSS Product");
      CssProductInput response = cssProductInputsServiceClient.updateCssProductInput(request);
      System.out.print("CSS product updated:");

    } catch (Exception e) {
      System.out.println(e);
    }
  }

  public static void main(String[] args) throws Exception {
    final Config config = Config.load();

    // The ID uniquely identifying each product. In
    // the format languageCode~countryCode~rawProvidedId
    final String productId = "de~DE~rawProvidedId17";
    updateCssProductInput(config, productId);
  }
}

С помощью запроса cssProductInputs.update можно обновлять только поля верхнего уровня. Если вы хотите обновить вложенные поля, необходимо предоставить весь объект верхнего уровня целиком.

В приведенном примере объект headlineOfferPrice верхнего уровня, включая вложенные поля существующего продукта, будет обновлен данными о продукте, предоставленными в теле запроса, при этом все остальные поля останутся без изменений.

PATCH https://css.googleapis.com/v1/accounts/{ACCOUNT_ID}/cssProductInputs/{CSS_PRODUCT_ID}
{
  "attributes": {
    "headlineOfferPrice": {
      "amountMicros": "17.99",
      "currencyCode": "USD"
    }
  }
}

Чтобы выбрать определенные поля для обновления, не внося изменений в другие поля, включенные в тело запроса, можно указать параметр updateMask . Этот параметр строки запроса должен представлять собой список полей, разделенных запятыми, которые необходимо изменить. Параметр updateMask полезен, когда вы хотите убедиться, что будут обновлены только указанные поля. Отсутствие параметра updateMask эквивалентно пометке всех полей в запросе для обновления, как показано в примере. Однако, если параметр updateMask не указан явно, удалить существующие атрибуты невозможно.

В приведенном примере будет обновлено только title существующего товара с учетом данных о продукте, указанных в тексте запроса, при этом все остальные поля, включая headline offer link останутся без изменений.

PATCH https://css.googleapis.com/v1/accounts/{ACCOUNT_ID}/cssProductInputs/{CSS_PRODUCT_ID}?updateMask=title
{
  "attributes": {
    "title":"item-title",
    "headlineOfferLink":"headline-offer-newer.com"
  }
}

Если поле указано в списке updateMask, но отсутствует в теле запроса, это поле будет удалено из ресурса Product, если оно существует.

В приведенном примере функция updateMask будет использоваться для удаления значения из поля title .

PATCH https://css.googleapis.com/v1/accounts/{ACCOUNT_ID}/cssProductInputs/{CSS_PRODUCT_ID}?updateMask=title

ACCOUNT_ID : Уникальный идентификатор учетной записи, например, 123 .

CSS_PRODUCT_ID : Идентификатор продукта CSS, например, de~DE~B019G4 .

Чтобы удалить поле title , исключите его из тела запроса. Вы также можете отправить запрос без тела или с пустым телом. Поля, не включенные в updateMask, останутся без изменений.