Mettre à jour un produit du CSS

Utilisez la méthode UpdateCssProductInput pour mettre à jour un seul produit CSS existant en spécifiant le cssProductInput.name du produit et un corps JSON contenant les données que vous souhaitez mettre à jour pour le produit.

Remarque: Cette méthode ne met à jour que les attributs fournis dans la requête de mise à jour. La réponse contient les mêmes attributs que la requête et ne reflète pas l'état complet de CssProductInput une fois la mise à jour appliquée. Vous ne devez pas vous fier à la réponse pour déterminer l'état final de CssProductInput.

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

Pour ajouter ou modifier un attribut dans un produit, indiquez le champ avec la nouvelle valeur dans le corps JSON. L'exemple ci-dessous met à jour le titre et le lien de l'offre principale d'un nom de produit 123/cssProductInputs/de~DE~B019G4 existant avec la valeur de l'attribut fournie dans le corps de la requête. Tous les autres champs restent inchangés.

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

Seuls les champs de premier niveau peuvent être mis à jour avec une requête cssProductInputs.update. Si vous voulez mettre à jour des champs imbriqués, vous devez fournir l'objet de premier niveau dans son intégralité.

L'exemple ci-dessous met à jour l'objet headlineOfferPrice de premier niveau, y compris les champs imbriqués d'un produit existant, avec les données produit fournies dans le corps de la requête. Tous les autres champs restent inchangés.

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

Pour sélectionner certains champs à mettre à jour sans modifier les autres champs inclus dans le corps de la requête, vous pouvez spécifier un updateMask. Ce paramètre de chaîne de requête doit être une liste des champs à modifier, séparés par une virgule. Un updateMask est utile lorsque vous voulez indiquer que seuls les champs nommés seront mis à jour. Si vous ne spécifiez pas d'updateMask, cela équivaut à marquer tous les champs de la requête comme devant être mis à jour, comme dans l'exemple. Toutefois, si un updateMask n'est pas fourni explicitement, il est impossible de supprimer les attributs existants.

L'exemple ci-dessous met à jour uniquement le title de l'article existant avec les données produit respectives fournies dans le corps de la requête. Tous les autres champs, y compris headline offer link, restent inchangés.

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 un champ figure dans la liste updateMask, mais pas dans le corps de la requête, il est supprimé de la ressource Product s'il existe.

L'exemple ci-dessous utilise updateMask pour supprimer la valeur du champ title.

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

ACCOUNT_ID : identifiant unique du compte (par exemple, 123).

CSS_PRODUCT_ID : ID du produit CSS, par exemple de~DE~B019G4.

Pour supprimer le champ title, ne l'incluez pas dans le corps de la requête. Vous pouvez également envoyer la requête sans corps ou le laisser vide. Les champs qui ne figurent pas dans updateMask ne seront pas modifiés.