בגישה הזו לאינטראקציה עם Merchant API, משתמשים בספריות מוכנות מראש שמכילות את הפרטים ברמה הנמוכה של יצירת בקשות וטיפול בתגובות, ומציעות דרך נוחה יותר לאינטראקציה עם ה-API, שלרוב מתאימה לשפה. הם מטפלים באימות, בסריאליזציה/דה-סריאליזציה של בקשות ותגובות ובקודים סטנדרטיים אחרים.
שלב 1. הגדרת אימות והגדרת דוגמאות קוד
הוראות מופיעות במאמר הגדרת אימות ודוגמאות להגדרות של Merchant API.
שלב 2. הורדה והתקנה של ספריית הלקוח ודוגמאות הקוד
הוראות להורדה ולהתקנה של ספריית הלקוח ולשימוש בדוגמאות הקוד מ-GitHub מופיעות במאמר דוגמאות ל-Python של Google Merchant API.
שלב 3. הירשם כמפתח
כדי להשתמש ב-Merchant API, צריך לרשום את הפרטים ליצירת קשר עם המפתח.
הרישום מאפשר לבצע את הפעולות הבאות:
- יוצר איש קשר טכני לחשבון Merchant Center על ידי הקצאת התפקיד
API developer
למשתמש. כך Google יכולה לשלוח עדכונים חשובים שקשורים ספציפית ל-API ולתכונות שבהן המפתח משתמש, כמו הודעות על שירותים ומידע על תכונות חדשות, שעשויים להיות פחות מעניינים למשתמשים שאינם מפתחים. - האפשרות הזו מאפשרת לכם לעבוד עם כמה חשבונות מוכר בלי שתצטרכו להירשם כמה פעמים. כשאתם נרשמים, מספר הפרויקט ב-Google Cloud שמשמש לאימות ב-Merchant API משויך לחשבון Merchant Center שלכם, שבו מוגדרים אנשי הקשר הטכניים (
API developer
). כך תוכלו לקבל עדכונים חשובים לגבי כל חשבונות המוכרים שאתם מנהלים, כל עוד האימות מתבצע באמצעות פרויקט Google Cloud הרשום.
במהלך ההרשמה, חשוב לעיין בדרישות המוקדמות ובהגבלות שמפורטות במאמר בנושא הרשמה.
דוגמה להרשמת פרויקט באמצעות ספריות לקוח מופיעה במאמר הרשמת פרויקט ב-Google Cloud עם כתובת אימייל של מפתח באמצעות Python.
Python
# -*- coding: utf-8 -*-
# Copyright 2025 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.
"""This example registers a GCP project with a developer email."""
from examples.authentication import configuration
from examples.authentication import generate_user_credentials
from google.shopping.merchant_accounts_v1 import DeveloperRegistrationServiceClient
from google.shopping.merchant_accounts_v1 import RegisterGcpRequest
def register_gcp(account_id: str, developer_email: str) -> None:
"""Registers the GCP project used to call the Merchant API with a developer email.
Args:
account_id: The ID of your Merchant Center account.
developer_email: The email address of the developer to register.
"""
# Get OAuth credentials.
credentials = generate_user_credentials.main()
# Create a client to the Developer Registration Service.
client = DeveloperRegistrationServiceClient(credentials=credentials)
# The name has the format: accounts/{account}/developerRegistration
name = f"accounts/{account_id}/developerRegistration"
# Create the request to register the GCP project.
request = RegisterGcpRequest(
name=name,
developer_email=developer_email,
)
# Make the API call and handle potential errors.
try:
print("Sending RegisterGcp request:")
response = client.register_gcp(request=request)
print("Registered GCP project successfully:")
print(response)
except RuntimeError as e:
print(f"An error occurred: {e}")
if __name__ == "__main__":
# Your Merchant Center account ID.
# This can be found in the Merchant Center UI.
_account_id = configuration.Configuration().read_merchant_info()
# The developer email to associate with the GCP project.
_developer_email = "YOUR_EMAIL_HERE"
register_gcp(_account_id, _developer_email)
שלב 4. ניהול אנשי קשר והרשאות של מפתחים
כשנרשמים:
- אם כתובת האימייל שייכת למשתמש בחשבון Merchant Center, למשתמש הזה מוקצה התפקיד
API_DEVELOPER
. - אם כתובת האימייל לא שייכת למשתמש קיים, נשלחת הזמנה לכתובת הזו. המקבל צריך לאשר את ההזמנה כדי להתווסף כמשתמש חדש עם התפקיד
API_DEVELOPER
.
אחרי הרישום הראשוני, מומלץ להוסיף כמה מפתחים ולהעניק להם זכויות גישה נוספות.
שלב 4א. מתן הרשאות נוספות
כדי לקבל התראות חשובות, צריך להקצות את התפקיד API_DEVELOPER
, אבל ההרשאות שלו ב-Merchant Center הן מינימליות. כדי לאפשר למשתמש הזה לבצע קריאות אחרות ל-API או לנהל הגדרות בממשק המשתמש של Merchant Center, צריך להקצות לו תפקידים נוספים, כמו STANDARD
או ADMIN
. מידע נוסף זמין במאמר בנושא סוגי גישה.
אפשר לעדכן את הרשאות הגישה של המשתמש באמצעות השיטה
accounts.users.patch
.
בדוגמת הקוד
מוצג איך לעדכן משתמש כדי להעניק לו את התפקידים ADMIN
ו-API_DEVELOPER
.
כך הם יוכלו לנהל את החשבון באופן מלא, וגם יקבלו הודעות שקשורות ל-API.
Python
# -*- coding: utf-8 -*-
# Copyright 2024 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
#
# http://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.
"""A module to update a user."""
from examples.authentication import configuration
from examples.authentication import generate_user_credentials
from google.protobuf import field_mask_pb2
from google.shopping.merchant_accounts_v1 import AccessRight
from google.shopping.merchant_accounts_v1 import UpdateUserRequest
from google.shopping.merchant_accounts_v1 import User
from google.shopping.merchant_accounts_v1 import UserServiceClient
FieldMask = field_mask_pb2.FieldMask
_ACCOUNT = configuration.Configuration().read_merchant_info()
def update_user(user_email, user_access_right):
"""Updates a user to make it an admin of the MC account."""
credentials = generate_user_credentials.main()
client = UserServiceClient(credentials=credentials)
# Create user name string
name = "accounts/" + _ACCOUNT + "/users/" + user_email
user = User(name=name, access_rights=[user_access_right])
field_mask = FieldMask(paths=["access_rights"])
try:
request = UpdateUserRequest(user=user, update_mask=field_mask)
print("Sending Update User request")
response = client.update_user(request=request)
print("Updated User Name below")
print(response.name)
except RuntimeError as e:
print(e)
if __name__ == "__main__":
# Modify this email to update the right user
email = "USER_MAIL_ACCOUNT"
access_right = AccessRight.ADMIN
update_user(email, access_right)
שלב 4ב. הוספת מפתחים לגיבוי
כדי למנוע שיבושים בגישה ל-API אם איש הקשר הראשי של חשבון הפיתוח יעזוב את הארגון, מומלץ להוסיף לפחות מפתח גיבוי אחד.
אפשר להוסיף משתמש באמצעות השיטה accounts.users.create
או לעדכן משתמש קיים באמצעות השיטה accounts.users.patch
. מומלץ להקצות למשתמש הזה את התפקידים ADMIN
ו-API_DEVELOPER
.
שלב 5. יצירת מקור ראשי של נתוני מוצרים
כדי להוסיף מוצר, צריך קודם להגדיר מקור ראשי של נתוני מוצרים. דוגמה לקוד ליצירת מקור נתונים זמינה במאמר יצירת מקור ראשי של נתוני מוצרים שתומך במספר שפות באמצעות Python.
Python
# -*- coding: utf-8 -*-
# Copyright 2024 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
#
# http://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.
"""This class demonstrates how to create a Primary product datasource all `feedLabel` and `contentLanguage` combinations.
This works only for API primary feeds.
"""
from examples.authentication import configuration
from examples.authentication import generate_user_credentials
from google.shopping.merchant_datasources_v1 import CreateDataSourceRequest
from google.shopping.merchant_datasources_v1 import DataSource
from google.shopping.merchant_datasources_v1 import DataSourcesServiceClient
from google.shopping.merchant_datasources_v1 import PrimaryProductDataSource
_ACCOUNT = configuration.Configuration().read_merchant_info()
_PARENT = f"accounts/{_ACCOUNT}"
def create_primary_product_data_source_multiple_languages():
"""Creates a `DataSource` resource."""
# Gets OAuth Credentials.
credentials = generate_user_credentials.main()
# Creates a client.
client = DataSourcesServiceClient(credentials=credentials)
# Creates a PrimaryProductDataSource.
primary_datasource = PrimaryProductDataSource()
primary_datasource.countries = ["GB"]
# Creates a DataSource and populates its attributes.
data_source = DataSource()
data_source.display_name = "Example Multiple Languages Primary DataSource"
data_source.primary_product_data_source = primary_datasource
# Creates the request.
request = CreateDataSourceRequest(parent=_PARENT, data_source=data_source)
# Makes the request and catches and prints any error messages.
try:
response = client.create_data_source(request=request)
print(f"DataSource successfully created: {response}")
except RuntimeError as e:
print("DataSource creation failed")
print(e)
if __name__ == "__main__":
create_primary_product_data_source_multiple_languages()
אפשר לראות את מקור הנתונים הזה בממשק המשתמש של Merchant Center. מידע נוסף מופיע במאמר איך ניגשים לכרטיסייה 'מקורות נתונים'.
שלב 6. הוסף מוצר
אחרי שיוצרים את מקור הנתונים, מנסים להוסיף אליו מוצר. דוגמאות קוד שמראות איך עושים את זה באמצעות ספריות הלקוח מופיעות במאמר הוספת דוגמה של קלט מוצר באמצעות Python.
Python
# -*- coding: utf-8 -*-
# Copyright 2024 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
#
# http://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.
"""A module to insert a Product Input."""
from examples.authentication import configuration
from examples.authentication import generate_user_credentials
from google.shopping import merchant_products_v1
from google.shopping.merchant_products_v1 import Availability
from google.shopping.merchant_products_v1 import Condition
from google.shopping.type import Price
_ACCOUNT = configuration.Configuration().read_merchant_info()
_PARENT = f"accounts/{_ACCOUNT}"
# You can only insert products into datasource types of Input "API" and
# "FILE", and of Type "Primary" or "Supplemental."
_DATA_SOURCE = "[INSERT_DATA_SOURCE_HERE]"
_DATA_SOURCE_NAME = f"accounts/{_ACCOUNT}/dataSources/{_DATA_SOURCE}"
def create_product_input():
"""Creates a `ProductInput` resource."""
# Creates a shipping setting
price = Price()
price.amount_micros = 33_450_000
price.currency_code = "GBP"
shipping_option_1 = merchant_products_v1.Shipping()
shipping_option_1.price = price
shipping_option_1.country = "GB"
shipping_option_1.service = "1st class post"
price2 = Price()
price2.amount_micros = 33_450_000
price2.currency_code = "EUR"
shipping_option_2 = merchant_products_v1.Shipping()
shipping_option_2.price = price2
shipping_option_2.country = "FR"
shipping_option_2.service = "2nd class post"
# Sets product attributes. Make sure to replace these values with your own.
attributes = merchant_products_v1.ProductAttributes()
attributes.title = "A Tale of Two Cities"
attributes.description = "A classic novel about the French Revolution"
attributes.link = "https://exampleWebsite.com/tale-of-two-cities.html"
attributes.image_link = "https://exampleWebsite.com/tale-of-two-cities.jpg"
attributes.price = price
attributes.availability = Availability.IN_STOCK
attributes.condition = Condition.NEW
attributes.google_product_category = "Media > Books"
attributes.gtins = ["9780007350896"]
attributes.shipping = [shipping_option_1, shipping_option_2]
return merchant_products_v1.ProductInput(
content_language="en",
feed_label="GB",
offer_id="sku123",
product_attributes=attributes,
)
def insert_product_input():
"""Inserts the specified `ProductInput` resource."""
# Gets OAuth Credentials.
credentials = generate_user_credentials.main()
# Creates a client.
client = merchant_products_v1.ProductInputsServiceClient(
credentials=credentials
)
# Creates the request.
request = merchant_products_v1.InsertProductInputRequest(
parent=_PARENT,
# If this product is already owned by another datasource, when
# re-inserting, the new datasource will take ownership of the product.
product_input=create_product_input(),
data_source=_DATA_SOURCE_NAME,
)
# Makes the request and catches and prints any error messages.
try:
response = client.insert_product_input(request=request)
# The last part of the product name will be the product ID assigned to a
# product by Google. Product ID has the format
# `contentLanguage~feedLabel~offerId`
print(f"Input successful: {response}")
except RuntimeError as e:
print("Input failed")
print(e)
# After the product is inserted, the product ID will be returned in the
# response. We recommend that you check the Merchant Center to ensure that
# the product is approved and visible to users before using the product ID
# in any downstream processes.
if __name__ == "__main__":
insert_product_input()
שלב 7. הצגת המוצרים
דוגמה לקוד שמציג את המוצרים במקור הנתונים מופיעה במאמר דוגמה לרישום מוצרים באמצעות Python.
Python
# -*- coding: utf-8 -*-
# Copyright 2024 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
#
# http://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.
"""A module to list Products."""
from examples.authentication import configuration
from examples.authentication import generate_user_credentials
from google.shopping import merchant_products_v1
_ACCOUNT = configuration.Configuration().read_merchant_info()
_PARENT = f"accounts/{_ACCOUNT}"
def list_products():
"""Lists the `Product` resources for a given account."""
# Gets OAuth Credentials.
credentials = generate_user_credentials.main()
# Creates a client.
client = merchant_products_v1.ProductsServiceClient(
credentials=credentials
)
# Creates the request. Set the page size to the maximum value.
request = merchant_products_v1.ListProductsRequest(
parent=_PARENT, page_size=1000
)
# Makes the request and catches and prints any error messages.
try:
response = client.list_products(request=request)
for product in response:
print(product)
print("List request successful!")
except RuntimeError as e:
print("List request failed")
print(e)
if __name__ == "__main__":
list_products()