Atualizar produto do CSS

Use o método UpdateCssProductInput para atualizar um único produto CSS existente especificando o cssProductInput.name do produto e um corpo JSON contendo os dados que você quer atualizar para o produto.

Observação: esse método só atualiza os atributos fornecidos na solicitação de atualização. A resposta contém os mesmos atributos da solicitação e não reflete o estado completo de CssProductInput após a aplicação da atualização. Não confie na resposta para determinar o estado final do CssProductInput.

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

Para adicionar ou modificar um atributo em um produto, especifique o campo com o novo valor no corpo JSON. O exemplo mostrado vai atualizar o título e o link da oferta de título de um nome de produto 123/cssProductInputs/de~DE~B019G4 existente com o valor do atributo fornecido no corpo da solicitação, deixando todos os outros campos inalterados.

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);
  }
}

Somente os campos de nível superior podem ser atualizados com a solicitação cssProductInputs.update. Se você quiser atualizar campos aninhados, forneça todo o objeto de nível superior.

O exemplo mostrado vai atualizar o objeto headlineOfferPrice de nível superior, incluindo os campos aninhados de um produto existente, com os dados do produto fornecidos no corpo da solicitação, deixando todos os outros campos intactos.

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

Para selecionar determinados campos para atualização sem fazer mudanças nos outros incluídos no corpo da solicitação, especifique um updateMask. Esse parâmetro de string de consulta precisa ser uma lista de campos separados por vírgulas que você precisa modificar. Um updateMask é útil quando você quer garantir que apenas os campos nomeados serão atualizados. Não especificar um updateMask equivale a marcar todos os campos da solicitação para serem atualizados, conforme mostrado no exemplo. No entanto, se um updateMask não for fornecido explicitamente, não será possível excluir atributos existentes.

O exemplo mostrado vai atualizar apenas o title do item existente com os dados do produto fornecidos no corpo da solicitação, deixando todos os outros campos, incluindo o headline offer link, inalterados.

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

Se um campo for fornecido na lista updateMask, mas não no corpo da solicitação, ele será excluído do recurso do produto, se existir.

O exemplo mostrado vai usar updateMask para remover o valor do campo title.

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

ACCOUNT_ID: identificador exclusivo da conta, por exemplo, 123.

CSS_PRODUCT_ID: ID do produto do CSS, por exemplo, de~DE~B019G4.

Para excluir o campo title, deixe-o de fora do corpo da solicitação. Também é possível enviar a solicitação sem corpo ou com um corpo vazio. Os campos que não estão na updateMask vão permanecer inalterados.