Actualiza el producto del CSS

Usa el método UpdateCssProductInput para actualizar un producto CSS único existente. Para ello, especifica el cssProductInput.name del producto y un cuerpo JSON que contenga los datos que deseas actualizar para el producto.

Nota: Este método solo actualiza los atributos proporcionados en la solicitud de actualización. La respuesta contiene los mismos atributos que la solicitud y no refleja el estado completo de CssProductInput después de que se aplica la actualización. No debes depender de la respuesta para determinar el estado final de CssProductInput.

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

Para agregar o modificar un atributo en un producto, especifica el campo con el valor nuevo en el cuerpo JSON. En el ejemplo que se muestra, se actualizarán el título y el vínculo de la oferta titular de un nombre de producto existente 123/cssProductInputs/de~DE~B019G4 con el valor del atributo proporcionado en el cuerpo de la solicitud, y no se modificarán los demás campos.

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

Solo se pueden actualizar los campos de nivel superior con la solicitud cssProductInputs.update. Si deseas actualizar campos anidados, debes proporcionar todo el objeto de nivel superior.

En el ejemplo que se muestra, se actualizará el objeto headlineOfferPrice de nivel superior, incluidos los campos anidados de un producto existente, con los datos de productos proporcionados en el cuerpo de la solicitud, sin modificar los demás campos.

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

Para seleccionar ciertos campos que se actualizarán sin realizar cambios en los demás incluidos en el cuerpo de la solicitud, puedes especificar un updateMask. Este parámetro de la cadena de consulta debe ser una lista de campos separados por comas que debes modificar. Un updateMask es útil cuando deseas confirmar que solo se actualizarán los campos nombrados. No especificar un updateMask equivale a marcar todos los campos de la solicitud que se actualizarán, como se muestra en el ejemplo. Sin embargo, si no se proporciona un updateMask de forma explícita, no es posible borrar los atributos existentes.

En el ejemplo que se muestra, se actualizará solo el title del elemento existente con los datos de productos correspondientes que se proporcionan en el cuerpo de la solicitud, y no se modificarán los demás campos, incluido 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"
  }
}

Si se proporciona un campo en la lista updateMask, pero no en el cuerpo de la solicitud, ese campo se borrará del recurso de productos, si existe.

En el ejemplo que se muestra, se usará updateMask para quitar el valor del campo title.

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

ACCOUNT_ID: Es el identificador único de la cuenta, por ejemplo, 123.

CSS_PRODUCT_ID: ID de producto del CSS, por ejemplo, de~DE~B019G4.

Para borrar el campo title, no lo incluyas en el cuerpo de la solicitud. También puedes enviar la solicitud sin cuerpo o con un cuerpo vacío. Los campos que no estén en updateMask no cambiarán.