Auf dieser Seite wird erläutert, wie Sie Ihre Produkte programmatisch hochladen und verwalten können. Mit der Merchant Products API können Sie ein Produkt in eine Datenquelle einfügen oder aktualisieren, ein Produkt aus Ihrem Konto abrufen und ein Produkt aus einer Datenquelle löschen.
Die Merchant Products API enthält zwei Ressourcen.
productInputs
steht für die Eingabeteile Ihrer Produkte.products
steht für die verarbeiteten Produkte, die aus Ihren Eingabeteilen erstellt wurden.
productInputs
kann primär und ergänzend sein, je nachdem, ob es in eine primäre Datenquelle oder eine ergänzende Datenquelle hochgeladen wird.
Jeder product
wird aus einem einzigen primären productInput
und einer beliebigen Anzahl von ergänzenden productInputs
erstellt.
Mit der Merchant Products API können Sie Online- oder Ladengeschäftskataloge erstellen. Das sind Produkte, die auf mehreren Shopping-Plattformen erscheinen können.
Sie können die Ressource productInputs
verwenden, sobald Sie Ihr Merchant Center-Konto erstellt, Ihre erste Datenquelle eingerichtet und die ersten Produkte über die API hochgeladen haben.
Händler können zwar Produkte über eine Datei namens PrimaryProductDataSource hochladen, es gibt jedoch mehrere Vorteile beim Erstellen und Löschen von Produkten mit der Merchant API. Zu diesen Vorteilen gehören eine kürzere Reaktionszeit und die Möglichkeit, Produkte in Echtzeit zu aktualisieren, ohne große Dateien verwalten zu müssen. Es kann einige Stunden dauern, bis Produktänderungen, die über API-Aufrufe vorgenommen wurden, in der Shopping-Datenbank zu sehen sind.
Vorbereitung
Wenn Sie noch keine Datenquelle haben, erstellen Sie eine mit der Merchant Data Sources API oder im Merchant Center.
Wenn Sie bereits eine Datenquelle haben, die Sie entweder über die Merchant Center-Benutzeroberfläche oder über die API erstellt haben, können Sie Ihre Produkte mit der Merchant Products API hinzufügen. Wenn Sie Produkte mit der Content API for Shopping hinzufügen, finden Sie im Migrationsleitfaden Informationen zu den ersten Schritten mit der Merchant Products API.
Sie sind dafür verantwortlich, die Richtlinien für Shopping-Anzeigen und Produkteinträge einzuhalten. Shopping Ads behält sich das Recht vor, diese Richtlinien durchzusetzen und entsprechende Maßnahmen zu ergreifen, wenn wir Inhalte oder Verhaltensweisen feststellen, die gegen diese Richtlinien verstoßen.
Ressourcen
Über die Ressource products
können Sie Produktinformationen aus der Shopping-Datenbank abrufen.
Die Ressource productInput
steht für die Eingabedaten, die Sie für ein Produkt einreichen. Außerdem bietet es Methoden, mit denen Sie Produktinformationen einzeln oder im Batch-Modus auf einmal aktualisieren oder löschen können. Eine productInput
-Ressource muss die folgenden Felder enthalten:
channel
: Der Channel des Produkts.offerId
: Die eindeutige Kennung für das Produkt.contentLanguage
: Der zweistellige ISO 639-1-Sprachcode für das Produkt.feedLabel
: Das Label, mit dem Sie Ihre Produkte kategorisieren und identifizieren können. Es sind maximal 20 Zeichen zulässig. Folgende Zeichen werden unterstützt:A-Z
,0-9
, Bindestrich und Unterstrich. Das Feedlabel darf keine Leerzeichen enthalten. Weitere Informationen finden Sie unter Feedlabels verwenden.
Produktdaten in Ihr Konto hochladen
Verwenden Sie die Methode accounts.productInputs.insert
, um eine Produkteingabe in Ihr Konto hochzuladen. Sie müssen die eindeutige Kennung der primären oder ergänzenden Datenquelle übergeben.
In der folgenden Beispielanfrage wird gezeigt, wie Sie mit der Methode accounts.productInputs.insert
einen Produkteintrag in Ihr Händlerkonto hochladen. In der Anfrage werden der Versandpreis und die Region sowie benutzerdefinierte Attribute wie das Herstellungsdatum und die Größe festgelegt.
POST https://merchantapi.googleapis.com/products/v1beta/accounts/{ACCOUNT_ID}/productInputs:insert?dataSource={DATASOURCE}
{
"name": "{PRODUCT_TITLE}",
"versionNumber": {VERSION_NUMBER},
"contentLanguage": "{CONTENT_LANGUAGE}",
"feedLabel": "{FEED_LABEL}",
"offerId": "{OFFER_ID}",
"channel": "ONLINE",
"attributes": {
"availability": "in stock",
"imageLink": "{IMAGE_LINK}",
"link": "{PRODUCT_LINK}",
"brand": "{BRAND_NAME}",
"price": {
"currencyCode": "{CURRENCY_CODE}",
"amountMicros": {PRICE}
},
"color": "red",
"productWeight": {
"value": 320,
"unit": "g"
},
"adult": false,
"shipping": [
{
"country": "GB",
"price": {
"amountMicros": {SHIPPING_COST},
"currencyCode": "{CURRENCY_CODE_SHIPPING}"
},
"postalCode": "{SHIPPING_POSTALCODE}",
"service": "",
"region": "{SHIPPING_REGION}",
"maxHandlingTime": "{MAX_HANDLING_TIME}",
"minHandlingTime": "{MIN_HANDLING_TIME}",
"maxTransitTime": "{MAX_TRANSIT_TIME}",
"minTransitTime": "{MIN_TRANSIT_TIME}"
}
],
"gender": "Female"
},
"customAttributes": [
{
"name": "size",
"value": "Large"
},
{
"name": "Date of Manufacturing",
"value": "2024-05-05"
}
]
}
Ersetzen Sie Folgendes:
- {ACCOUNT_ID}: Die eindeutige Kennung Ihres Merchant Center-Kontos.
- {DATASOURCE}: Die eindeutige Kennung der Datenquelle. Er sollte das Format
accounts/
{ACCOUNT_ID}/dataSources/
{DATASOURCE_ID} haben. - {PRODUCT_TITLE}: Der Name des Produkts.
- {VERSION_NUMBER}: Die Versionsnummer des Produkts. Optional.
- {CONTENT_LANGUAGE}: Der zweistellige ISO 639-1-Sprachcode für das Produkt. Erforderlich.
- {FEED_LABEL}: Das Label, mit dem Sie Ihre Produkte kategorisieren und identifizieren können. Es sind maximal 20 Zeichen zulässig. Folgende Zeichen werden unterstützt:
A-Z
,0-9
, Bindestrich und Unterstrich. Das Feedlabel darf keine Leerzeichen enthalten. - {OFFER_ID}: Die eindeutige Kennung des Produkts. Erforderlich.
- {IMAGE_LINK}: Der Link zum Bild des Produkts auf Ihrer Website. Optional.
- {PRODUCT_LINK}: Der Link zum Produkt auf Ihrer Website. Optional.
- {CURRENCY_CODE}: Die Währung des Preises mit dreistelligen Akronymen gemäß ISO 4217. Optional.
- {PRICE}: Der Preis des Produkts als Zahl in Mikroeinheiten. Optional.
- {SHIPPING_COST}: Der feste Versandpreis als Zahl. Optional.
- {SHIPPING_POSTALCODE}: Der Postleitzahlenbereich, für den der Versandpreis gilt. Optional.
- {MAX_HANDLING_TIME}: Die maximale Bearbeitungszeit in Arbeitstagen zwischen dem Eingang der Bestellung und dem Versand. Optional.
- {MIN_HANDLING_TIME}: Die minimale Bearbeitungszeit in Arbeitstagen zwischen dem Eingang der Bestellung und dem Versand. Der Wert „0“ bedeutet, dass die Bestellung am selben Tag geliefert wird, an dem sie eingegangen ist. Optional.
- {MAX_TRANSIT_TIME}: Die maximale Laufzeit in Arbeitstagen zwischen dem Versand und der Zustellung der Bestellung. Optional.
- {MIN_TRANSIT_TIME}: Die minimale Laufzeit in Arbeitstagen zwischen dem Versand der Bestellung und der Zustellung. Der Wert 0 bedeutet, dass die Bestellung am selben Tag geliefert wird, an dem sie versendet wird. Optional.
Wenn die Anfrage erfolgreich ausgeführt wird, wird die folgende Antwort angezeigt:
{
"name": "{PRODUCT_NAME}",
"product": "{PRODUCT_ID}",
"channel": "ONLINE",
"offerId": "{OFFER_ID}",
"contentLanguage": "{CONTENT_LANGUAGE}",
"feedLabel": "{FEED_LABEL}",
"versionNumber": "{VERSION_NUMBER}",
"attributes": {
"link": "{PRODUCT_LINK}",
"imageLink": "{IMAGE_LINK}",
"adult": false,
"availability": "in stock",
"brand": "{BRAND_NAME}",
"color": "red",
"gender": "Female",
"price": {
"amountMicros": "{PRICE}",
"currencyCode": "{CURRENCY_CODE}"
},
"shipping": [
{
"price": {
"amountMicros": "{SHIPPING_COST}",
"currencyCode": "{CURRENCY_CODE}"
},
"country": "{SHIPPING_COUNTRY}",
"region": "{SHIPPING_REGION}",
"postalCode": "{SHIPPING_POSTALCODE}",
"minHandlingTime": "{MIN_HANDLING_TIME}",
"maxHandlingTime": "{MAX_HANDLING_TIME}",
"minTransitTime": "{MIN_TRANSIT_TIME}",
"maxTransitTime": "{MAX_TRANSIT_TIME}"
}
],
"productWeight": {
"value": 320,
"unit": "g"
}
},
"customAttributes": [
{
"name": "Size",
"value": "Large"
},
{
"name": "Date of Manufacturing",
"value": "2024-05-05"
}
]
}
Sie können Ihrem Merchant Center-Konto ein Produkt mithilfe der Methode google.shopping.merchant.accounts.v1beta.InsertProductInputSample
hinzufügen, wie im folgenden Beispiel gezeigt.
Java
public static void insertProductInput(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)) {
// Price to be used for shipping ($33.45).
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();
// The datasource can be either a primary or supplemental datasource.
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(
ProductInput.newBuilder()
.setChannel(ChannelEnum.ONLINE)
.setContentLanguage("en")
.setFeedLabel("label")
.setOfferId("sku123")
.setAttributes(attributes)
.build())
.build();
System.out.println("Sending insert ProductInput request");
ProductInput response = productInputsServiceClient.insertProductInput(request);
System.out.println("Inserted ProductInput Name below");
// The last part of the product name will be the product ID assigned to a product by Google.
// Product ID has the format `channel~contentLanguage~feedLabel~offerId`
System.out.println(response.getName());
System.out.println("Inserted Product Name below");
System.out.println(response.getProduct());
} catch (Exception e) {
System.out.println(e);
}
}
Ein verarbeitetes Produkt aus Ihrem Konto abrufen
Wenn Sie ein verarbeitetes Produkt aus Ihrem Konto abrufen möchten, verwenden Sie die Methode accounts.products.get
. Es kann einige Minuten dauern, bis das verarbeitete Produkt nach dem Einfügen angezeigt wird.
GET https://merchantapi.googleapis.com/products/v1beta/accounts/{ACCOUNT_ID}/products/{PRODUCT_NAME}
Ersetzen Sie {PRODUCT_NAME} durch den Namen der Produkt-Eingaberessource, die Sie löschen möchten. Beispiel: online~en~US~sku123
.
Sie können den Ressourcennamen des verarbeiteten Produkts aus dem Feld product
in der Antwort von accounts.productInputs.insert
abrufen.
Wenn Sie ein einzelnes Produkt für ein bestimmtes Merchant Center-Konto abrufen möchten, können Sie die Methode google.shopping.merchant.accounts.v1beta.GetProductRequest
verwenden, wie im folgenden Beispiel gezeigt.
Java
public static void getProduct(Config config, String product) throws Exception {
// Obtains OAuth token based on the user's configuration.
GoogleCredentials credential = new Authenticator().authenticate();
// Creates service settings using the credentials retrieved above.
ProductsServiceSettings productsServiceSettings =
ProductsServiceSettings.newBuilder()
.setCredentialsProvider(FixedCredentialsProvider.create(credential))
.build();
// Calls the API and catches and prints any network failures/errors.
try (ProductsServiceClient productsServiceClient =
ProductsServiceClient.create(productsServiceSettings)) {
// The name has the format: accounts/{account}/products/{productId}
GetProductRequest request = GetProductRequest.newBuilder().setName(product).build();
System.out.println("Sending get product request:");
Product response = productsServiceClient.getProduct(request);
System.out.println("Retrieved Product below");
System.out.println(response);
} catch (Exception e) {
System.out.println(e);
}
}
Produkteingabe aus Ihrem Konto löschen
Wenn Sie eine Produkteingabe aus Ihrem Konto löschen möchten, verwenden Sie die Methode accounts.productInputs.delete
. Wenn Sie ein Produkt mithilfe der Merchant Products API löschen möchten, müssen Sie die eindeutige Kennung der primären oder zusätzlichen Datenquelle angeben, zu der das Produkt gehört.
In der folgenden Anfrage wird gezeigt, wie Sie mit der Methode accounts.productInputs.delete
einen Produkteintrag löschen können:
DELETE https://merchantapi.googleapis.com/products/v1beta/accounts/{ACCOUNT_ID}/productInputs/{PRODUCT_NAME}?dataSource=accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}
Ersetzen Sie {PRODUCT_NAME} durch den Namen der Produkt-Eingaberessource, die Sie löschen möchten. Beispiel: online~en~US~sku123
.
Wenn Sie ein Produkt für ein bestimmtes Merchant Center-Konto löschen möchten, können Sie die Methode google.shopping.merchant.accounts.v1beta.DeleteProductInputRequest
verwenden, wie im folgenden Beispiel gezeigt.
Java
public static void deleteProductInput(Config config, String productId, 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 product name to identify product.
String name =
ProductInputName.newBuilder()
.setAccount(config.getAccountId().toString())
.setProductinput(productId)
.build()
.toString();
// Calls the API and catches and prints any network failures/errors.
try (ProductInputsServiceClient productInputsServiceClient =
ProductInputsServiceClient.create(productInputsServiceSettings)) {
DeleteProductInputRequest request =
DeleteProductInputRequest.newBuilder().setName(name).setDataSource(dataSource).build();
System.out.println("Sending deleteProductInput request");
productInputsServiceClient.deleteProductInput(request); // no response returned on success
System.out.println(
"Delete successful, note that it may take a few minutes for the delete to update in"
+ " the system. If you make a products.get or products.list request before a few"
+ " minutes have passed, the old product data may be returned.");
} catch (Exception e) {
System.out.println(e);
}
}
Produkte aus Ihrem Konto auflisten
Verwenden Sie die Methode accounts.products.list
, um die verarbeiteten Produkte in Ihrem Konto aufzulisten, wie in der folgenden Anfrage gezeigt.
GET https://merchantapi.googleapis.com/products/v1beta/accounts/{ACCOUNT_ID}/products
Wenn Sie ein Produkt für ein bestimmtes Merchant Center-Konto auflisten möchten, können Sie die Methode google.shopping.merchant.accounts.v1beta.ListProductsRequest
verwenden, wie im folgenden Beispiel gezeigt.
Java
public static void listProducts(Config config) throws Exception {
// Obtains OAuth token based on the user's configuration.
GoogleCredentials credential = new Authenticator().authenticate();
// Creates service settings using the credentials retrieved above.
ProductsServiceSettings productsServiceSettings =
ProductsServiceSettings.newBuilder()
.setCredentialsProvider(FixedCredentialsProvider.create(credential))
.build();
// Creates parent to identify the account from which to list all products.
String parent = getParent(config.getAccountId().toString());
// Calls the API and catches and prints any network failures/errors.
try (ProductsServiceClient productsServiceClient =
ProductsServiceClient.create(productsServiceSettings)) {
// The parent has the format: accounts/{account}
ListProductsRequest request = ListProductsRequest.newBuilder().setParent(parent).build();
System.out.println("Sending list products request:");
ListProductsPagedResponse response = productsServiceClient.listProducts(request);
int count = 0;
// Iterates over all rows in all pages and prints the datasource in each row.
// Automatically uses the `nextPageToken` if returned to fetch all pages of data.
for (Product product : response.iterateAll()) {
System.out.println(product); // The product includes the `productStatus` field
// That shows approval and disapproval information.
count++;
}
System.out.print("The following count of products were returned: ");
System.out.println(count);
} catch (Exception e) {
System.out.println("An error has occured: ");
System.out.println(e);
}
}