Merchant API ile etkileşim kurmaya yönelik bu yaklaşımda, istekte bulunma ve yanıtları işleme ile ilgili düşük düzeyli ayrıntıları kapsayan önceden oluşturulmuş kitaplıkları kullanırsınız. Bu kitaplıklar, API ile etkileşim kurmak için daha uygun ve genellikle dile özgü bir yol sunar. Kimlik doğrulama, istek ve yanıt serileştirme/serileştirme kaldırma ve diğer standart kodları işlerler.
1. Adım: Kimlik doğrulama ayarlarını yapma ve kod örneklerini yapılandırma
Talimatlar için Setting up Authentication and Sample Configuration Samples for Merchant API (Kimlik Doğrulamayı ve Örnek Yapılandırmayı Ayarlama Merchant API İçin Örnekler) başlıklı makaleyi inceleyin.
2. adım: İstemci kitaplığını ve kod örneklerini indirip yükleme
İstemci kitaplığını indirme ve yükleme ile GitHub'daki kod örneklerini kullanma talimatları için Google Merchant API Python Örnekleri başlıklı makaleyi inceleyin.
3. Adım: Geliştirici olarak kayıt ol
Merchant API'yi kullanmak için geliştirici iletişim bilgilerinizi kaydetmeniz gerekir.
Kaydolma işlemiyle aşağıdakiler yapılır:
- Bir kullanıcıya
API developer
rolünü atayarak Merchant Center hesabınız için teknik bir kişi oluşturur. Bu sayede Google, özellikle API ve geliştiricinin kullandığı özelliklerle ilgili önemli güncellemeleri (ör. hizmet duyuruları ve yeni özellikler hakkında bilgiler) gönderebilir. Bu güncellemeler, geliştirici olmayan kullanıcıların ilgisini daha az çekebilir. - Birden fazla satıcı hesabıyla çalışmanıza olanak tanır ve birden fazla kez kaydolmanızı gerektirmez. Kaydolduğunuzda, Merchant API'de kimlik doğrulaması yapmak için kullanılan Google Cloud proje kimliği, teknik kişilerin (
API developer
) bulunduğu Merchant Center hesabınızla ilişkilendirilir. Bu sayede, kimlik doğrulama işlemi kayıtlı Google Cloud projesiyle yapıldığı sürece yönettiğiniz tüm satıcı hesaplarıyla ilgili önemli güncellemeleri alabilirsiniz.
Kayıt sırasında Kayıt bölümünde ayrıntılı olarak açıklanan ön koşullara ve kısıtlamalara uyun.
Projenizi istemci kitaplıklarını kullanarak nasıl kaydedeceğinize dair bir örnek için Python kullanarak geliştirici e-posta adresi sağlayan bir Google Cloud projesi kaydetme örneğine bakın:
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. Adım. Geliştirici kişilerini ve izinlerini yönetme
Kaydolduğunuzda:
- E-posta adresi, Merchant Center hesabındaki bir kullanıcıya aitse bu kullanıcıya
API_DEVELOPER
rolü verilir. - E-posta adresi mevcut bir kullanıcıya ait değilse bu adrese davetiye gönderilir. Alıcının,
API_DEVELOPER
rolüyle yeni kullanıcı olarak eklenmek için daveti kabul etmesi gerekir.
İlk kayıttan sonra birden fazla geliştirici eklemenizi ve onlara ek erişim hakları vermenizi öneririz.
4a adımı: Ek izinler verme
Önemli bildirimleri almak için API_DEVELOPER
rolü gereklidir ancak bu rol, Merchant Center'da minimum izinlere sahiptir. Bu kullanıcının başka API çağrıları yapmasına veya Merchant Center kullanıcı arayüzünde ayarları yönetmesine izin vermek için kullanıcıya STANDARD
veya ADMIN
gibi ek roller vermeniz gerekir. Daha fazla bilgi için Erişim türleri başlıklı makaleyi inceleyin.
Kullanıcının erişim haklarını accounts.users.patch
yöntemiyle güncelleyebilirsiniz.
Örnek
kod
bir kullanıcının hem ADMIN
hem de API_DEVELOPER
rollerini alacak şekilde nasıl güncelleneceğini gösterir.
Bu sayede, hesabı tam olarak yönetebilirler ve API ile ilgili iletişimleri de alırlar.
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)
4b adımı. Yedek geliştiriciler ekleme
Birincil geliştirici iletişim kişiniz kuruluşunuzdan ayrılırsa API erişiminizin kesintiye uğramasını önlemek için en az bir yedek geliştirici eklemeniz gerekir.
accounts.users.create
yöntemiyle kullanıcı ekleyebilir veya accounts.users.patch
yöntemiyle mevcut bir kullanıcıyı güncelleyebilirsiniz. Bu kullanıcıya hem ADMIN
hem de API_DEVELOPER
rollerini vermenizi öneririz.
5. Adım: Birincil ürün veri kaynağı oluşturma
Ürün ekleyebilmek için birincil ürün veri kaynağına ihtiyacınız vardır. Veri kaynağı oluşturan örnek kod için Python ile birden fazla dili destekleyen birincil ürün veri kaynağı oluşturma örneği başlıklı makaleyi inceleyin.
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()
Bu veri kaynağını Merchant Center kullanıcı arayüzünde görüntüleyebilirsiniz. Daha fazla bilgi için Veri kaynakları sekmesini bulma başlıklı makaleyi inceleyin.
6. Adım: Ürün ekle
Veri kaynağını oluşturduktan sonra içine bir ürün eklemeyi deneyin. İstemci kitaplıklarıyla bu işlemin nasıl yapılacağını gösteren örnek kod için Python ile ürün girişi örneği ekleme başlıklı makaleyi inceleyin.
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. Adım: Ürünlerinizi listeleyin
Veri kaynağınızdaki ürünleri listeleyen örnek kod için List products sample with Python (Ürünleri Python ile listeleme örneği) başlıklı makaleyi inceleyin.
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()