Vous pouvez utiliser ce guide pour intégrer l'API Merchant à votre implémentation existante de Content API for Shopping.
Merchant API vous permet d'automatiser les workflows de gestion liés aux comptes, aux produits et à l'inventaire dans Merchant Center. Voici quelques cas d'utilisation de l'API Merchant API:
- Gestion automatisée des comptes
- Gestion automatisée des produits
- Gestion automatisée de l'inventaire
- Création de rapports personnalisés
Améliorations par rapport à Content API
Merchant API améliore Content API dans les domaines suivants:
- Sous-API avec de nouvelles fonctionnalités pour votre intégration unique
- Nouvelles méthodes pour l'inventaire, les données produit et d'autres API
- Possibilité de créer non seulement des sources de données principales, mais aussi plusieurs sources de données, par exemple :
- Lancement de l'importation d'avis sur les produits et les marchands
- Avec l'API Merchant, vous pouvez activer les notifications pour les modifications apportées aux données du compte.
Commencer
Pour en savoir plus sur l'API Merchant et ses sous-API, consultez la section Conception de l'API Merchant.
Pour commencer à utiliser l'API Merchant, remplacez les URL de vos requêtes par le format suivant:
https://merchantapi.googleapis.com/{SUB_API} /{VERSION} /{RESOURCE_NAME} :{METHOD} …
Pour en savoir plus, consultez le guide de démarrage rapide et la documentation de référence de l'API Merchant.
Compatibilité avec gRPC
L'API Merchant est compatible avec gRPC et REST. Vous pouvez utiliser gRPC pour l'API Merchant et REST pour Content API for Shopping en même temps.
Les bibliothèques clientes de l'API Merchant nécessitent gRPC.
Pour en savoir plus, consultez Utiliser gRPC.
Compatibilité
Ce guide décrit les modifications générales qui s'appliquent à l'ensemble de l'API Merchant. Pour connaître les modifications apportées à des fonctionnalités spécifiques, consultez les guides suivants:
- Migrer la gestion des comptes
- Migrer les paramètres de livraison
- Migrer la gestion des produits
- Migrer la gestion des sources de données
- Migrer la gestion des inventaires
- Migrer la gestion des promotions
- Migrer la gestion des rapports
- Migrer la gestion des sources de conversion
- Migrer la gestion des partenariats pour les flux en magasin
L'API Merchant est conçue pour fonctionner avec les fonctionnalités existantes de la version 2.1 de Content API for Shopping.
Par exemple, vous pouvez utiliser l'API Merchant Inventories avec votre implémentation existante de Content API for Shopping v2.1 products
. Vous pouvez utiliser Content API for Shopping pour importer un nouveau produit en magasin (que vous vendez dans un magasin local), puis utiliser la ressource LocalInventory
de l'API Merchant Inventories pour gérer les informations en magasin sur ce produit.
Requêtes par lot
L'API Merchant n'est pas compatible avec la méthode customBatch
proposée dans Content API for Shopping. Consultez plutôt Envoyer plusieurs requêtes à la fois ou exécutez vos appels de manière asynchrone.
L'exemple suivant montre comment insérer une entrée de produit.
import com.google.api.core.ApiFuture;
import com.google.api.core.ApiFutureCallback;
import com.google.api.core.ApiFutures;
import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.common.util.concurrent.MoreExecutors;
import com.google.shopping.merchant.products.v1beta.Attributes;
import com.google.shopping.merchant.products.v1beta.InsertProductInputRequest;
import com.google.shopping.merchant.products.v1beta.ProductInput;
import com.google.shopping.merchant.products.v1beta.ProductInputsServiceClient;
import com.google.shopping.merchant.products.v1beta.ProductInputsServiceSettings;
import com.google.shopping.merchant.products.v1beta.Shipping;
import com.google.shopping.type.Channel.ChannelEnum;
import com.google.shopping.type.Price;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;
/** This class demonstrates how to insert a product input */
public class InsertProductInputAsyncSample {
private static String getParent(String accountId) {
return String.format("accounts/%s", accountId);
}
private static String generateRandomString() {
String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
Random random = new Random();
StringBuilder sb = new StringBuilder(8);
for (int i = 0; i < 8; i++) {
sb.append(characters.charAt(random.nextInt(characters.length())));
}
return sb.toString();
}
private static ProductInput createRandomProduct() {
Price price = Price.newBuilder().setAmountMicros(33_450_000).setCurrencyCode("USD").build();
Shipping shipping =
Shipping.newBuilder().setPrice(price).setCountry("GB").setService("1st class post").build();
Shipping shipping2 =
Shipping.newBuilder().setPrice(price).setCountry("FR").setService("1st class post").build();
Attributes attributes =
Attributes.newBuilder()
.setTitle("A Tale of Two Cities")
.setDescription("A classic novel about the French Revolution")
.setLink("https://exampleWebsite.com/tale-of-two-cities.html")
.setImageLink("https://exampleWebsite.com/tale-of-two-cities.jpg")
.setAvailability("in stock")
.setCondition("new")
.setGoogleProductCategory("Media > Books")
.setGtin(0, "9780007350896")
.addShipping(shipping)
.addShipping(shipping2)
.build();
return ProductInput.newBuilder()
.setChannel(ChannelEnum.ONLINE)
.setContentLanguage("en")
.setFeedLabel("CH")
.setOfferId(generateRandomString())
.setAttributes(attributes)
.build();
}
public static void asyncInsertProductInput(Config config, String dataSource) throws Exception {
// Obtains OAuth token based on the user's configuration.
GoogleCredentials credential = new Authenticator().authenticate();
// Creates service settings using the credentials retrieved above.
ProductInputsServiceSettings productInputsServiceSettings =
ProductInputsServiceSettings.newBuilder()
.setCredentialsProvider(FixedCredentialsProvider.create(credential))
.build();
// Creates parent to identify where to insert the product.
String parent = getParent(config.getAccountId().toString());
// Calls the API and catches and prints any network failures/errors.
try (ProductInputsServiceClient productInputsServiceClient =
ProductInputsServiceClient.create(productInputsServiceSettings)) {
// Creates five insert product input requests with random product IDs.
List<InsertProductInputRequest> requests = new ArrayList<>(5);
for (int i = 0; i < 5; i++) {
InsertProductInputRequest request =
InsertProductInputRequest.newBuilder()
.setParent(parent)
// You can only insert products into datasource types of Input "API" and "FILE", and
// of Type "Primary" or "Supplemental."
// This field takes the `name` field of the datasource.
.setDataSource(dataSource)
// If this product is already owned by another datasource, when re-inserting, the
// new datasource will take ownership of the product.
.setProductInput(createRandomProduct())
.build();
requests.add(request);
}
System.out.println("Sending insert product input requests");
List<ApiFuture<ProductInput>> futures =
requests.stream()
.map(
request ->
productInputsServiceClient.insertProductInputCallable().futureCall(request))
.collect(Collectors.toList());
// Creates callback to handle the responses when all are ready.
ApiFuture<List<ProductInput>> responses = ApiFutures.allAsList(futures);
ApiFutures.addCallback(
responses,
new ApiFutureCallback<List<ProductInput>>() {
@Override
public void onSuccess(List<ProductInput> results) {
System.out.println("Inserted products below");
System.out.println(results);
}
@Override
public void onFailure(Throwable throwable) {
System.out.println(throwable);
}
},
MoreExecutors.directExecutor());
} catch (Exception e) {
System.out.println(e);
}
}
public static void main(String[] args) throws Exception {
Config config = Config.load();
// Identifies the data source that will own the product input.
String dataSource = "accounts/" + config.getAccountId() + "/dataSources/{datasourceId}";
asyncInsertProductInput(config, dataSource);
}
}
Si vous utilisez customBatch
dans Content API et que vous avez besoin de cette fonctionnalité pour Merchant API, indiquez-nous pourquoi dans vos commentaires.
Identifiants
Pour nous conformer aux principes d'amélioration des API de Google, nous avons apporté quelques modifications aux identifiants des ressources de l'API Merchant.
Le nom remplace l'ID
Toutes les ressources de l'API Merchant utilisent le champ name
comme identifiant unique.
Voici un exemple d'utilisation du champ name
dans vos appels:
POST https://merchantapi.googleapis.com/inventories/v1beta/{PARENT} /regionalInventories:insert
Ce nouveau champ name
est renvoyé en tant qu'identifiant de ressource pour tous les appels de lecture et d'écriture dans l'API Merchant.
Par exemple, implémentez une méthode getName()
pour récupérer le name
à partir d'une ressource, puis stockez la sortie en tant que variable au lieu de créer vous-même le name
à partir des ID du marchand et de la ressource.
Champs parent pour les ressources enfants
Dans l'API Merchant, toutes les ressources enfants disposent du champ parent
. Vous pouvez utiliser le champ parent
pour spécifier le name
de la ressource dans laquelle insérer l'enfant, au lieu de transmettre l'intégralité de la ressource parente.
Vous pouvez également utiliser le champ parent
avec les méthodes list
pour répertorier les ressources enfants de cet élément parent
.
Par exemple, pour lister les inventaires en magasin d'un produit donné, spécifiez le name
du produit dans le champ parent
de la méthode list
. Dans ce cas, le product
donné est le parent
des ressources LocalInventory
renvoyées.
Types
Voici quelques types courants partagés entre les sous-API de l'API Merchant.
Prix
Voici les modifications apportées à Price
dans le package Merchant Common:
Content API | API Merchant | |
---|---|---|
Champ du montant | value:string |
amountMicros:int64 |
Champ de devise | currency:string
|
currencyCode:string |
Le montant Price
est désormais enregistré en micros, où un million de micros équivaut à l'unité standard de votre devise.
Dans Content API for Shopping, Price
était un nombre décimal sous la forme d'une chaîne.
Le nom du champ "Montant" est passé de value
à amountMicros
Le nom du champ de devise est passé de currency
à currencyCode
. Le format reste ISO 4217.