مدیریت منابع داده میانای برنامه‌سازی کاربردی برای بارگذاری‌های محصول

زیرمیانای برنامه‌سازی کاربردی «منابع داده» به شما امکان می‌دهد منابع داده را به‌طور خاص برای بارگذاری محصولات ازطریق میانای برنامه‌سازی کاربردی ایجاد و مدیریت کنید. باید حداقل یک منبع داده را مشخص کنید تا بتوانید جزئیات محصول را به Merchant Center ارائه دهید.

این راهنما شما را با موارد استفاده رایج برای مدیریت این منابع داده مبتنی بر API آشنا می‌کند. برای کسب اطلاعات درباره بارگذاری محصولات بااستفاده از این منابع داده، راهنمای افزودن و مدیریت محصولات را ببینید. همچنین می‌توانید منابع داده‌تان را ازطریق میانای کاربر Merchant Center مدیریت کنید. برای اطلاعات بیشتر، به مدیریت منابع داده مراجعه کنید.

ملاحظات ویژه

هنگام کار با منابع داده در Merchant API، موارد زیر را درنظر داشته باشید:

  • قوانین: زیرمیانای برنامه‌سازی کاربردی «منابع داده» از قوانین پیش‌فرض برای پیوند دادن منابع داده تکمیلی به منابع داده اصلی پشتیبانی می‌کند. می‌توانید ترتیب منابع داده تکمیلی را در قانون پیش‌فرض مدیریت کنید. ایجاد و مدیریت قانون سفارشی پیچیده مستقیماً با این میانای برنامه‌سازی کاربردی پشتیبانی نمی‌شود. می‌توانید این مورد را بااستفاده از میانای کاربر Merchant Center مدیریت کنید.

  • منابع داده تکمیلی حساب پیشرفته: API از منابع داده تکمیلی و قوانین برای حساب‌های پیشرفته (چندمشتری) پشتیبانی نمی‌کند. فقط بااستفاده از میانای کاربر Merchant Center می‌توانید منابع داده تکمیلی و قوانین را مدیریت کنید.

ایجاد منبع داده اصلی برای محصولات

وقتی می‌خواهید PrimaryProductDataSource ایجاد کنید که بتواند محصولات را با هر برچسب و زبانی بپذیرد، feedLabel و contentLanguage را مشخص نکنید. این راه‌اندازی مدیریت را برای فروشندگانی که به قوانین یا پیکربندی‌های متمایز برای هدف‌های کشوری یا زبانی مختلف نیاز ندارند ساده می‌کند، زیرا به آن‌ها اجازه می‌دهد فقط یک شناسه منبع داده را مدیریت کنند.

درغیراین‌صورت، می‌توانید منبع داده‌ای ایجاد کنید و آن را به برچسب و زبان خاصی محدود کنید. اگر قصد دارید از قوانین منبع داده یا پیکربندی‌های دیگر (مانند هدف‌یابی کشور) که برای ترکیب‌های خاصی از برچسب‌ها و زبان‌ها اعمال می‌شود استفاده کنید، feedLabel و contentLanguage را مشخص کنید.

برای اطلاعات بیشتر درباره استراتژی‌های منبع داده، انتخاب استراتژی منبع داده را ببینید.

توجه داشته باشید که منبع داده feedLabel هیچ تأثیری بر کشور موردهدف ندارد. برای مثال، استفاده از US به‌عنوان برچسب به‌طور خودکار کاربران ایالات متحده را هدف‌یابی نمی‌کند. برای کنترل اینکه محصولاتتان کجا نمایش داده شوند و واجدشرایط باشند، کشورهای هدف به‌صورت زیر تعیین می‌شوند:

  • سطح منبع داده: کشورهای هدف پیش‌فرض را در primary product data source بااستفاده از فیلد countries تنظیم کنید. این قوانین بر همه محصولات موجود در آن منبع داده اعمال می‌شود.
  • سطح محصول (آنلاین): برای روش‌های بازاریابی آنلاین، کشورهای هدف را برای هر محصول بااستفاده از فیلد shipping در product attributes مشخص کنید.
  • سطح حساب (محلی): برای روش‌های بازاریابی محلی، کشورهای هدف به‌طور خودکار از فروشگاه‌های فیزیکی پیوندشده به حساب Merchant Center شما تعیین می‌شوند.

برای اطلاعات بیشتر درباره هدف‌یابی کشورهای خاص، افزودن محصولات با هدف‌یابی کشورهای خاص را ببینید.

همه منابع داده جدید ایجادشده به‌طور پیش‌فرض برای همه مقصدهای فعال‌شده در حساب دردسترس هستند. برای اطلاعات بیشتر، به مقصدها مراجعه کنید. این رویکرد تجربه‌ای یکپارچه و منسجم ارائه می‌دهد و از استراتژی چندکاناله پشتیبانی می‌کند.

هدف‌یابی براساس کشور

می‌توانید کشورهای هدف را به دو روش پیکربندی کنید:

  • بدون کشور پیش‌فرض (هدف‌یابی انعطاف‌پذیر): اگر منبع داده را با شیء primaryProductDataSource خالی ایجاد کنید (همان‌طور که در مثال اول زیر نشان داده شده است)، منبع داده هیچ کشور پیش‌فرضی را هدف‌یابی نمی‌کند. نحوه تعیین کشورها به روش بازاریابی شما بستگی دارد:

    • فروشگاه آنلاین: می‌توانید کشورهای هدف را برای هر محصول به‌طور جداگانه بااستفاده از مشخصه shipping در داده‌های محصول مشخص کنید.
    • فروشگاه‌های محلی: کشورهای هدف به‌طور خودکار از فروشگاه‌های فیزیکی پیوندشده به حساب Merchant Center شما تعیین می‌شوند، بنابراین نیازی به مشخص کردن ارسال ندارید.
  • کشورهای پیش‌فرض (هدف‌یابی در سطح منبع داده): می‌توانید بااستفاده از فیلد countries، کشورهای هدف پیش‌فرض را به‌طور صریح مشخص کنید (همان‌طور که در مثال دوم زیر نشان داده شده است). همه محصولات بارگذاری‌شده در این منبع داده به‌طور پیش‌فرض این کشورها را هدف قرار می‌دهند.

توصیه‌ها

  • منبع داده تکی که کشورهای ثابتی را هدف‌یابی می‌کند: اگر همه محصولات موجود در منبع داده کشور یا مجموعه کشورهای یکسانی را هدف‌یابی می‌کنند، فیلد countries را در منبع داده تنظیم کنید.
  • منبع داده تکی که کشورهای متغیر را هدف قرار می‌دهد: اگر منبع داده تکی را مدیریت می‌کنید که حاوی محصولاتی است که در کشورهای مختلف توزیع شده‌اند، countries را در منبع داده حذف کنید و آن‌ها را در سطح محصول بااستفاده از مشخصه shipping تنظیم کنید.
  • چند منبع داده مختص کشور: اگر ترجیح می‌دهید محصولات یا قوانین کسب‌وکار را براساس منطقه جدا کنید، منابع داده اصلی جداگانه‌ای برای هر کشور (یا مجموعه‌ای از کشورها) ایجاد کنید و فیلد countries را در هر منبع داده تنظیم کنید. اگرچه مدیریت چندین شناسه منبع داده به سربار اضافی نیاز دارد، این کار به شما امکان می‌دهد قوانین منبع داده متمایزی را برای هر کشور پیکربندی کنید.

منبع داده برای هر برچسب و زبان

وقتی محصولات بااستفاده از روش products.insert به این منبع داده وارد می‌شوند، API هر ترکیبی از feedLabel و contentLanguage را که در خود داده‌های محصول ارائه شده باشد می‌پذیرد. منبع داده به‌عنوان یک محفظه واحد برای محصولاتی عمل می‌کند که چندین ترکیب مختلف زبان و برچسب را هدف قرار می‌دهند. اگر راه‌اندازی ساده‌ای دارید که از قوانین پیچیده منبع داده استفاده نمی‌کند، توصیه می‌کنیم فیلدهای feedLabel و contentLanguage را حذف کنید.

محدودیت‌ها و ملاحظات

  • ایجاد منبع داده سازگار با هر برچسب و زبانی فقط برای منابع داده اصلی که از API استفاده می‌کنند پشتیبانی می‌شود.
  • این منابع داده را می‌توان با منابع داده تکمیلی گسترده یا هدفمند پیوند داد. مطابقت درطول پردازش براساس feedLabel و contentLanguage خاص محصول تکی انجام می‌شود.

مثال‌ها

در اینجا مثالی از ایجاد منبع داده برای هر برچسب و زبان بدون کشور پیش‌فرض آورده شده است:

POST https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources
{
  "displayName": "My API Primary Product Source (No Default Countries)",
  "primaryProductDataSource": {}
}

درخواست موفق منبع DataSource زیر را برمی‌گرداند:

{
  "name": "accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}",
  "dataSourceId": "{DATASOURCE_ID}",
  "displayName": "My API Primary Product Source (No Default Countries)",
  "primaryProductDataSource": {},
  "input": "API"
}

در اینجا نمونه‌ای از ایجاد منبع داده برای هر برچسب و زبان با کشور پیش‌فرض (بریتانیا) آورده شده است:

POST https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources
{
  "displayName": "My API Primary Product Source (GB Default)",
  "primaryProductDataSource": {
    "countries": ["GB"]
  }
}

درخواست موفق منبع DataSource زیر را برمی‌گرداند:

{
  "name": "accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}",
  "dataSourceId": "{DATASOURCE_ID}",
  "displayName": "My API Primary Product Source (GB Default)",
  "primaryProductDataSource": {
    "countries": [
      "GB"
    ]
  },
  "input": "API"
}

از name منبع داده جدیداً ایجادشده برای ارجاع به آن هنگام درج محصولات با زیرمیانای برنامه‌سازی کاربردی «محصولات» استفاده کنید.

نمونه‌های کد زیر نحوه ایجاد PrimaryProductDataSource را بدون تنظیم فیلدهای feedLabel، contentLanguage، و countries نشان می‌دهد.

جاوا

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.datasources.v1.CreateDataSourceRequest;
import com.google.shopping.merchant.datasources.v1.DataSource;
import com.google.shopping.merchant.datasources.v1.DataSourcesServiceClient;
import com.google.shopping.merchant.datasources.v1.DataSourcesServiceSettings;
import com.google.shopping.merchant.datasources.v1.PrimaryProductDataSource;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/**
 * This class demonstrates how to create a primary product data source for all `feedLabel` and
 * `contentLanguage` combinations.
 */
public class CreatePrimaryProductDataSourceMultipleLanguagesSample {

  private static String getParent(String merchantId) {
    return String.format("accounts/%s", merchantId);
  }

  public static String createDataSource(Config config, String displayName) throws Exception {
    GoogleCredentials credential = new Authenticator().authenticate();

    DataSourcesServiceSettings dataSourcesServiceSettings =
        DataSourcesServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    String parent = getParent(config.getAccountId().toString());

    // The type of data that this datasource will receive.
    PrimaryProductDataSource primaryProductDataSource =
        PrimaryProductDataSource.newBuilder()
            .addCountries("GB")
            .build();

    try (DataSourcesServiceClient dataSourcesServiceClient =
        DataSourcesServiceClient.create(dataSourcesServiceSettings)) {

      CreateDataSourceRequest request =
          CreateDataSourceRequest.newBuilder()
              .setParent(parent)
              .setDataSource(
                  DataSource.newBuilder()
                      .setDisplayName(displayName)
                      .setPrimaryProductDataSource(primaryProductDataSource)
                      .build())
              .build();

      System.out.println("Sending Create PrimaryProduct DataSource request");
      DataSource response = dataSourcesServiceClient.createDataSource(request);
      System.out.println("Created DataSource Name below");
      System.out.println(response.getName());
      return response.getName();
    } catch (Exception e) {
      System.out.println(e);
      System.exit(1);
      // Null is necessary to satisfy the compiler as we're not returning a String on failure.
      return null;
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    // The displayed data source name in the Merchant Center UI.
    String displayName = "Primary Product Data Multiple Languages";

    createDataSource(config, displayName);
  }
}

PHP

use Google\ApiCore\ApiException;
use Google\Shopping\Merchant\DataSources\V1\Client\DataSourcesServiceClient;
use Google\Shopping\Merchant\DataSources\V1\CreateDataSourceRequest;
use Google\Shopping\Merchant\DataSources\V1\DataSource;
use Google\Shopping\Merchant\DataSources\V1\PrimaryProductDataSource;

/**
 * This class demonstrates how to create a primary product datasource for all `feedLabel` and
 * `contentLanguage` combinations.
 */

class CreatePrimaryProductDataSourceMultipleLanguagesSample
{
    /**
     * Creates a primary product data source.
     *
     * @param int    $merchantId The Merchant Center account ID.
     * @param string $displayName The displayed data source name in the Merchant Center UI.
     *
     * @return string The name of the newly created data source.
     */
    public function createDataSource(int $merchantId, string $displayName): string
    {
        // Gets the OAuth credentials to make the request.
        $credentials = Authentication::useServiceAccountOrTokenFile();

        // Creates options config containing credentials for the client to use.
        $options = ['credentials' => $credentials];

        // Creates a client.
        $dataSourcesServiceClient = new DataSourcesServiceClient($options);

        $parent = sprintf('accounts/%s', $merchantId);

        // The type of data that this datasource will receive.
        $primaryProductDataSource = (new PrimaryProductDataSource())
            ->setCountries(['GB']);

        // Calls the API and catches and prints any network failures/errors.
        try {
            $response = $dataSourcesServiceClient->createDataSource(
                (new CreateDataSourceRequest())
                    ->setParent($parent)
                    ->setDataSource(
                        (new DataSource())
                            ->setDisplayName($displayName)
                            ->setPrimaryProductDataSource($primaryProductDataSource)
                    )
            );
            printf('Created DataSource Name below:' . PHP_EOL);
            printf('%s' . PHP_EOL, $response->getName());
            return $response->getName();
        } catch (ApiException $ex) {
            printf('Call failed with message: %s' . PHP_EOL, $ex->getMessage());
            exit(1);
        }
    }

    // Helper to execute the sample.
    public function callSample(): void
    {
        $config = Config::generateConfig();
        // The Merchant Center Account ID.
        $merchantId = $config['accountId'];

        // The displayed datasource name in the Merchant Center UI.
        $displayName = 'Primary Product Data Multiple Languages';

        self::createDataSource($merchantId, $displayName);
    }
}


$sample = new CreatePrimaryProductDataSourceMultipleLanguagesSample();
$sample->callSample();

Python

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()

cURL

curl -X POST \
"https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources" \
-H "Authorization: Bearer {API_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
      "displayName": "Primary Product Data Multiple Languages",
      "primaryProductDataSource": {
        "countries": ["GB"]
      }
    }'

منبع داده برای برچسب و زبان خاص

برای ایجاد منبع داده‌ای که فقط محصولات را برای ترکیب برچسب و زبان خاصی می‌پذیرد، فیلدهای feedLabel و contentLanguage را بااستفاده از روش dataSources.create تنظیم کنید:

POST https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources
{
  "displayName": "My API Primary Product Source (US-en)",
  "primaryProductDataSource": {
    "feedLabel": "US",
    "contentLanguage": "en",
    "countries": ["US"]
  }
}

درخواست موفق منبع DataSource جدیداً ایجادشده را برمی‌گرداند. می‌توانید از name منبع داده جدیداً ایجادشده برای ارجاع به این منبع داده هنگام درج محصولات با زیرمیانای برنامه‌سازی کاربردی «محصولات» استفاده کنید.

{
  "name": "accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}",
  "dataSourceId": "{DATASOURCE_ID}",
  "displayName": "My API Primary Product Source (US-en)",
  "primaryProductDataSource": {
    "feedLabel": "US",
    "contentLanguage": "en",
    "countries": ["US"]
  },
  "input": "API"
}

نمونه‌های کد زیر نشان می‌دهد که چگونه منبع داده‌ای ایجاد کنید که فقط محصولات را برای ترکیب برچسب و زبان خاصی بپذیرد.

جاوا

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.datasources.v1.CreateDataSourceRequest;
import com.google.shopping.merchant.datasources.v1.DataSource;
import com.google.shopping.merchant.datasources.v1.DataSourcesServiceClient;
import com.google.shopping.merchant.datasources.v1.DataSourcesServiceSettings;
import com.google.shopping.merchant.datasources.v1.PrimaryProductDataSource;
import com.google.shopping.type.Destination.DestinationEnum;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/**
 * This class demonstrates how to create a primary product datasource for the "en" and "GB"
 * `feedLabel` and `contentLanguage` combination.
 */
public class CreatePrimaryProductDataSourceSample {

  private static String getParent(String merchantId) {
    return String.format("accounts/%s", merchantId);
  }

  public static String createDataSource(Config config, String displayName) throws Exception {
    GoogleCredentials credential = new Authenticator().authenticate();

    DataSourcesServiceSettings dataSourcesServiceSettings =
        DataSourcesServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    String parent = getParent(config.getAccountId().toString());

    // The type of data that this datasource will receive.
    PrimaryProductDataSource primaryProductDataSource =
        PrimaryProductDataSource.newBuilder()
            .addCountries("GB")
            .setContentLanguage("en")
            .setFeedLabel("GB")
            // The destinations do not necessarily have to be explicitly listed in which case the
            // default enabled destinations will be used.
            .addDestinations(
                PrimaryProductDataSource.Destination.newBuilder()
                    .setDestination(DestinationEnum.FREE_LISTINGS)
                    .setState(PrimaryProductDataSource.Destination.State.ENABLED)
                    .build())
            .addDestinations(
                PrimaryProductDataSource.Destination.newBuilder()
                    .setDestination(DestinationEnum.SHOPPING_ADS)
                    .setState(PrimaryProductDataSource.Destination.State.DISABLED)
                    .build())
            .build();

    try (DataSourcesServiceClient dataSourcesServiceClient =
        DataSourcesServiceClient.create(dataSourcesServiceSettings)) {

      CreateDataSourceRequest request =
          CreateDataSourceRequest.newBuilder()
              .setParent(parent)
              .setDataSource(
                  DataSource.newBuilder()
                      .setDisplayName(displayName)
                      .setPrimaryProductDataSource(primaryProductDataSource)
                      .build())
              .build();

      System.out.println("Sending Create PrimaryProduct DataSource request");
      DataSource response = dataSourcesServiceClient.createDataSource(request);
      System.out.println("Created DataSource Name below");
      System.out.println(response.getName());
      return response.getName();
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    // The displayed datasource name in the Merchant Center UI.
    String displayName = "British Primary Product Data";

    createDataSource(config, displayName);
  }
}

PHP

use Google\ApiCore\ApiException;
use Google\Shopping\Merchant\DataSources\V1\Client\DataSourcesServiceClient;
use Google\Shopping\Merchant\DataSources\V1\CreateDataSourceRequest;
use Google\Shopping\Merchant\DataSources\V1\DataSource;
use Google\Shopping\Merchant\DataSources\V1\PrimaryProductDataSource;
use Google\Shopping\Type\Destination\DestinationEnum;

/**
 * This class demonstrates how to create a primary product datasource for the "en" and "GB"
 * `feedLabel` and `contentLanguage` combination.
 */
class CreatePrimaryProductDataSourceSample
{
    /**
     * A helper function to create the parent string for DataSource resources.
     *
     * @param string $accountId The Merchant Center account ID.
     * @return string The parent resource name in the format `accounts/{account_id}`.
     */
    private static function getParent(string $accountId): string
    {
        return sprintf("accounts/%s", $accountId);
    }

    /**
     * Creates a new primary product data source.
     *
     * @param array $config The configuration array containing the account ID.
     * @param string $displayName The display name for the new data source.
     * @return void
     */
    public static function createDataSourceSample(array $config, string $displayName): void
    {
        // Gets the OAuth credentials to make the request.
        $credentials = Authentication::useServiceAccountOrTokenFile();

        // Creates options config containing credentials for the client to use.
        $options = ['credentials' => $credentials];

        // Creates a DataSourcesServiceClient.
        $dataSourcesServiceClient = new DataSourcesServiceClient($options);

        // Constructs the parent resource name from the account ID.
        $parent = self::getParent($config['accountId']);

        // Defines the primary product data source specific settings.
        $primaryProductDataSource = new PrimaryProductDataSource([
            'countries' => ['GB'],
            'content_language' => 'en',
            'feed_label' => 'GB',
            // The destinations do not necessarily have to be explicitly listed in which case the
            // default enabled destinations will be used.
            'destinations' => [
                new PrimaryProductDataSource\Destination([
                    'destination' => DestinationEnum::FREE_LISTINGS,
                    'state' => PrimaryProductDataSource\Destination\State::ENABLED
                ]),
                new PrimaryProductDataSource\Destination([
                    'destination' => DestinationEnum::SHOPPING_ADS,
                    'state' => PrimaryProductDataSource\Destination\State::DISABLED
                ])
            ]
        ]);

        // Creates the DataSource object.
        $dataSource = new DataSource([
            'display_name' => $displayName,
            'primary_product_data_source' => $primaryProductDataSource
        ]);

        // Prepares the request message to create the data source.
        $request = new CreateDataSourceRequest([
            'parent' => $parent,
            'data_source' => $dataSource
        ]);

        // Calls the API and catches and prints any network failures/errors.
        try {
            print "Sending Create PrimaryProduct DataSource request\n";
            // Issues the create data source request.
            $response = $dataSourcesServiceClient->createDataSource($request);
            print("Created DataSource below\n");
            print($response->serializeToJsonString() . PHP_EOL);
        } catch (ApiException $e) {
            printf("ApiException was thrown: %s\n", $e->getMessage());
        }
    }

    /**
     * Helper to execute the sample.
     *
     * @return void
     */
    public function callSample(): void
    {
        $config = Config::generateConfig();
        // The displayed datasource name in the Merchant Center UI.
        $displayName = "British Primary Product Data";

        self::createDataSourceSample($config, $displayName);
    }
}

// Run the script.
$sample = new CreatePrimaryProductDataSourceSample();
$sample->callSample();

Python

"""Sample for creating a primary product data source."""
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
# Used for setting the destination type, e.g., FREE_LISTINGS.
from google.shopping.type import types as merchant_api_types


def create_primary_product_data_source(
    account_id: str, display_name: str
) -> str:
  """Creates a primary product data source for the 'en' language and 'GB' region, targeting specific destinations.

  Args:
      account_id: The Merchant Center account ID.
      display_name: The user-visible name for the new data source in Merchant
        Center.

  Returns:
      The resource name of the newly created data source.
  """

  # Obtains OAuth 2.0 credentials for API authentication.
  credentials = generate_user_credentials.main()

  # Initializes the DataSourcesServiceClient with the obtained credentials.
  client = DataSourcesServiceClient(credentials=credentials)

  # Configures the PrimaryProductDataSource.
  # This section defines the core properties of the product data feed.
  primary_product_data_source = PrimaryProductDataSource()

  # Sets the target countries for this data source.
  primary_product_data_source.countries = ["GB"]
  # Sets the content language for the products.
  primary_product_data_source.content_language = "en"
  # Sets the feed label, often matching the country or language.
  primary_product_data_source.feed_label = "GB"

  # Defines the destinations for this data source and their states.
  # If destinations are not explicitly listed, defaults will be used.

  # Configure Free Listings destination (enabled).
  destination_free_listings = PrimaryProductDataSource.Destination()
  destination_free_listings.destination = (
      merchant_api_types.Destination.DestinationEnum.FREE_LISTINGS
  )
  destination_free_listings.state = (
      PrimaryProductDataSource.Destination.State.ENABLED
  )

  # Configure Shopping Ads destination (disabled).
  destination_shopping_ads = PrimaryProductDataSource.Destination()
  destination_shopping_ads.destination = (
      merchant_api_types.Destination.DestinationEnum.SHOPPING_ADS
  )
  destination_shopping_ads.state = (
      PrimaryProductDataSource.Destination.State.DISABLED
  )

  primary_product_data_source.destinations = [
      destination_free_listings,
      destination_shopping_ads,
  ]

  # Assembles the DataSource object.
  data_source = DataSource()
  data_source.display_name = display_name
  data_source.primary_product_data_source = primary_product_data_source

  # Constructs the parent resource name format for Data Source operations.
  parent = f"accounts/{account_id}"

  # Prepares the CreateDataSourceRequest.
  # This request includes the parent account and the data source configuration.
  request = CreateDataSourceRequest(parent=parent, data_source=data_source)

  try:
    # Executes the API call to create the data source.
    print("Sending Create PrimaryProduct DataSource request")
    response = client.create_data_source(request=request)
    # Confirms creation and prints the new data source's name.
    print("Created DataSource Name below")
    print(response)
    return response.name
  except RuntimeError as e:
    # Handles any errors encountered during the API request.
    print(e)
    raise


if __name__ == "__main__":
  # Fetches the Merchant Center account ID from the configuration file.
  # This ID is essential for constructing the 'parent' resource path
  # required by the API.
  merchant_account_id = configuration.Configuration().read_merchant_info()
  # Sets the desired display name for the data source in Merchant Center.
  datasource_display_name = "British Primary Product Data"

  # Calls the function to create the data source.
  create_primary_product_data_source(
      merchant_account_id, datasource_display_name
  )

cURL

curl -X POST \
"https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources" \
-H "Authorization: Bearer {API_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
      "displayName": "British Primary Product Data",
      "primaryProductDataSource": {
        "countries": ["GB"],
        "contentLanguage": "en",
        "feedLabel": "GB",
        "destinations": [
          {
            "destination": "FREE_LISTINGS",
            "state": "ENABLED"
          },
          {
            "destination": "SHOPPING_ADS",
            "state": "DISABLED"
          }
        ]
      }
    }'

منبع داده API تکمیلی ایجاد کنید و آن را به منبع داده اصلی پیوند دهید

منابع داده تکمیلی به شما امکان می‌دهند داده‌های محصول اضافی را که مکمل منابع داده اصلی شما هستند ارائه دهید.

مرحله ۱: ایجاد منبع داده تکمیلی API

ایجاد منبع داده تکمیلی بااستفاده از dataSources.create. اگر می‌خواهید منبع داده تکمیلی‌تان برای هر منبع داده اصلی قابل‌اجرا باشد، می‌توانید feedLabel و contentLanguage را حذف کنید. برای هدف‌یابی منابع داده اصلی با پیکربندی‌های منطبق، feedLabel و contentLanguage را مشخص کنید.

توصیه‌های منبع داده تکمیلی

  • پشتیبانی از هر برچسب و زبان: می‌توانید منابع داده تکمیلی ایجاد کنید تا از هر برچسب و زبانی پشتیبانی کنید یا برچسب‌ها و زبان‌های خاصی را هدف قرار دهید.
  • انعطاف‌پذیری پیوند: منبع داده اصلی را می‌توان به منابع داده تکمیلی پیوند داد، صرف‌نظر از اینکه منبع داده اصلی برچسب و زبان خاصی را هدف قرار می‌دهد یا نه. توجه داشته باشید که منابع داده تکمیلی هیچ برچسب یا زبانی را هدف‌یابی نمی‌کنند. مطابقت درطول پردازش براساس feedLabel و contentLanguage خاص محصول انجام می‌شود.
  • ذخیره کردن نام منابع داده برای استفاده در آینده: پس‌از ایجاد کردن منابع داده تکمیلی، نام آن‌ها را در پایگاه داده محلی‌تان ذخیره کنید تا در فراخوانی‌های API آینده مستقیماً به آن‌ها ارجاع دهید.
POST https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources
{
  "displayName": "My API Supplemental Source",
  "supplementalProductDataSource": {}
}

این کار منبع تکمیلی DataSource جدیداً ایجادشده را برمی‌گرداند. به name آن (که شامل dataSourceId است) توجه کنید.

{
  "name": "accounts/{ACCOUNT_ID}/dataSources/{SUPPLEMENTAL_DATASOURCE_ID}",
  "dataSourceId": "{SUPPLEMENTAL_DATASOURCE_ID}",
  "displayName": "My API Supplemental Source",
  "supplementalProductDataSource": {},
  "input": "API"
}

نمونه‌های کد زیر نحوه ایجاد منبع داده تکمیلی محصول را بدون تنظیم فیلدهای feedLabel و contentLanguage نشان می‌دهد.

جاوا

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.datasources.v1.CreateDataSourceRequest;
import com.google.shopping.merchant.datasources.v1.DataSource;
import com.google.shopping.merchant.datasources.v1.DataSourcesServiceClient;
import com.google.shopping.merchant.datasources.v1.DataSourcesServiceSettings;
import com.google.shopping.merchant.datasources.v1.SupplementalProductDataSource;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/**
 * This class demonstrates how to create a Supplemental product datasource all `feedLabel` and
 * `contentLanguage` combinations. This works only for API supplemental feeds.
 */
public class CreateSupplementalProductDataSourceMultipleLanguagesSample {

  private static String getParent(String merchantId) {
    return String.format("accounts/%s", merchantId);
  }

  public static String createDataSource(Config config, String displayName) throws Exception {
    GoogleCredentials credential = new Authenticator().authenticate();

    DataSourcesServiceSettings dataSourcesServiceSettings =
        DataSourcesServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    String parent = getParent(config.getAccountId().toString());

    try (DataSourcesServiceClient dataSourcesServiceClient =
        DataSourcesServiceClient.create(dataSourcesServiceSettings)) {

      CreateDataSourceRequest request =
          CreateDataSourceRequest.newBuilder()
              .setParent(parent)
              .setDataSource(
                  DataSource.newBuilder()
                      .setDisplayName(displayName)
                      .setSupplementalProductDataSource(
                          SupplementalProductDataSource.newBuilder().build())
                      .build())
              .build();

      System.out.println("Sending create SupplementalProduct DataSource request");
      DataSource response = dataSourcesServiceClient.createDataSource(request);
      System.out.println("Created DataSource Name below");
      System.out.println(response.getName());
      return response.getName();
    } catch (Exception e) {
      System.out.println(e);
      System.exit(1);
      return null; // Necessary to satisfy the compiler as we're not returning a
      // String on failure.
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    // The displayed data source name in the Merchant Center UI.
    String displayName = "Supplemental API Product Data Multiple Languages";

    createDataSource(config, displayName);
  }
}

PHP

use Google\ApiCore\ApiException;
use Google\Shopping\Merchant\DataSources\V1\Client\DataSourcesServiceClient;
use Google\Shopping\Merchant\DataSources\V1\CreateDataSourceRequest;
use Google\Shopping\Merchant\DataSources\V1\DataSource;
use Google\Shopping\Merchant\DataSources\V1\SupplementalProductDataSource;

/**
 * Class to demonstrate creating a Supplemental product datasource for all
 * `feedLabel` and `contentLanguage` combinations. This works only for API
 * supplemental feeds.
 */
class CreateSupplementalProductDataSourceMultipleLanguagesSample
{
    /**
     * Creates a DataSource.
     *
     * @param int $merchantId The Merchant Center Account ID.
     * @param string $displayName The display name of the data source.
     * @return string The name of the newly created data source.
     */
    public function createDataSource(int $merchantId, string $displayName): string
    {
        // Gets the OAuth credentials to make the request.
        $credentials = Authentication::useServiceAccountOrTokenFile();

        // Creates options config containing credentials for the client to use.
        $options = ['credentials' => $credentials];

        // Creates a client.
        $dataSourcesServiceClient = new DataSourcesServiceClient($options);

        $parent = sprintf('accounts/%s', $merchantId);

        // Creates the data source.
        $dataSource = (new DataSource())
            ->setDisplayName($displayName)
            ->setSupplementalProductDataSource(new SupplementalProductDataSource());

        // Creates the request.
        $request = (new CreateDataSourceRequest())
            ->setParent($parent)
            ->setDataSource($dataSource);

        print('Sending create SupplementalProduct DataSource request' . PHP_EOL);

        // Calls the API and catches and prints any network failures/errors.
        try {
            $response = $dataSourcesServiceClient->createDataSource($request);
            print('Created DataSource Name below' . PHP_EOL);
            print($response->getName() . PHP_EOL);
            return $response->getName();
        } catch (ApiException $ex) {
            print('Call failed with message: ' . $ex->getMessage() . PHP_EOL);
            return '';
        }
    }

    // Helper to execute the sample.
    public function callSample(): void
    {
        $config = Config::generateConfig();
        // The Merchant Center Account ID.
        $merchantId = $config['accountId'];

        // The displayed datasource name in the Merchant Center UI.
        $displayName = 'Supplemental API Product Data Multiple Languages';

        self::createDataSource($merchantId, $displayName);
    }
}


$sample = new CreateSupplementalProductDataSourceMultipleLanguagesSample();
$sample->callSample();

Python

from examples.authentication import configuration
from examples.authentication import generate_user_credentials
from google.shopping import merchant_datasources_v1

_ACCOUNT = configuration.Configuration().read_merchant_info()
_PARENT = f"accounts/{_ACCOUNT}"


def create_supplemental_product_data_source_multiple_languages():
  """Creates a `DataSource` resource."""

  # Gets OAuth Credentials.
  credentials = generate_user_credentials.main()

  # Creates a client.
  client = merchant_datasources_v1.DataSourcesServiceClient(
      credentials=credentials
  )

  # Creates a SupplementalProductDataSource.
  supplemental_datasource = (
      merchant_datasources_v1.SupplementalProductDataSource()
  )

  # Creates a DataSource and populates its attributes.
  data_source = merchant_datasources_v1.DataSource()
  data_source.display_name = (
      "Example Multiple Languages Supplemental DataSource"
  )
  data_source.supplemental_product_data_source = supplemental_datasource

  # Creates the request.
  request = merchant_datasources_v1.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_supplemental_product_data_source_multiple_languages()

cURL

curl -X POST \
"https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources" \
-H "Authorization: Bearer {API_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
      "displayName": "Supplemental API Product Data Multiple Languages",
      "supplementalProductDataSource": {}
    }'

منبع داده اصلی‌تان را به‌روز کنید تا به منبع داده تکمیلی تازه ایجادشده پیوند داده شود. می‌توانید این کار را با اصلاح defaultRule PrimaryProductDataSource بااستفاده از روش dataSources.patch انجام دهید.

فهرست takeFromDataSources در defaultRule ترتیب تقدم را مشخص می‌کند. مشخصه‌ها از اولین منبع داده در فهرست که آن‌ها را ارائه می‌دهد گرفته می‌شود. self خلاصه به خود منبع داده اصلی اشاره می‌کند.

مثال‌های زیر تنظیم قانون پیش‌فرض را نشان می‌دهد که ابتدا داده‌ها را از منبع داده اصلی می‌گیرد و اگر مشخصه در آنجا دردسترس نباشد، مشخصه را از منبع تکمیلی می‌گیرد.

PATCH https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources/{PRIMARY_DATASOURCE_ID}?updateMask=primaryProductDataSource.defaultRule
{
  "name": "accounts/{ACCOUNT_ID}/dataSources/{PRIMARY_DATASOURCE_ID}",
  "primaryProductDataSource": {
    "defaultRule": {
      "takeFromDataSources": [
        {
          "self": true
        },
        {
          "supplementalDataSourceName": "accounts/{ACCOUNT_ID}/dataSources/{SUPPLEMENTAL_DATASOURCE_ID}"
        }
      ]
    }
  }
}

درخواست موفقیت‌آمیز منبع اصلی DataSource به‌روزشده را برمی‌گرداند.

{
  "name": "accounts/{ACCOUNT_ID}/dataSources/{PRIMARY_DATASOURCE_ID}",
  "dataSourceId": "{PRIMARY_DATASOURCE_ID}",
  "displayName": "My API Primary Product Source",
  "primaryProductDataSource": {
    "countries": [
      "US",
      "GB",
      "DE"
    ],
    "defaultRule": {
      "takeFromDataSources": [
        {
          "self": true
        },
        {
          "supplementalDataSourceName": "accounts/{ACCOUNT_ID}/dataSources/{SUPPLEMENTAL_DATASOURCE_ID}"
        }
      ]
    }
  },
  "input": "API"
}

نمونه‌های کد زیر نحوه اتصال منبع داده تکمیلی به منبع داده اصلی را نشان می‌دهد.

جاوا

import shopping.merchant.samples.datasources.v1.UpdateDataSourceSample;
import shopping.merchant.samples.utils.Config;

/**
 * This class demonstrates how to add supplemental DataSources to the primary DataSource's default
 * rule.
 */
public class AddSupplementalDataSourceToPrimaryDataSourceSample {

  public static void addSupplementalDataSourceToPrimaryDataSource(
      Config config,
      String primaryDataSourceName,
      String firstSupplementalDataSourceName,
      String secondSupplementalDataSourceName)
      throws Exception {

    // Update the primary DataSource's default rule to include both supplemental feeds.
    UpdateDataSourceSample updateDatasource = new UpdateDataSourceSample();
    updateDatasource.updateDataSource(
        config,
        primaryDataSourceName,
        firstSupplementalDataSourceName,
        secondSupplementalDataSourceName);
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    // The names of the primary and supplemental datasources.
    String primaryDataSourceName = "accounts/{account_id}/dataSources/{datasource_id}";
    String firstSupplementalDataSourceName = "accounts/{account_id}/dataSources/{datasource_id}";
    String secondSupplementalDataSourceName = "accounts/{account_id}/dataSources/{datasource_id}";

    addSupplementalDataSourceToPrimaryDataSource(
        config,
        primaryDataSourceName,
        firstSupplementalDataSourceName,
        secondSupplementalDataSourceName);
  }
}

cURL

curl -X PATCH \
"https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources/{PRIMARY_DATASOURCE_ID}?updateMask=primaryProductDataSource.defaultRule" \
-H "Authorization: Bearer {API_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
      "name": "accounts/{ACCOUNT_ID}/dataSources/{PRIMARY_DATASOURCE_ID}",
      "primaryProductDataSource": {
        "defaultRule": {
          "takeFromDataSources": [
            {
              "self": true
            },
            {
              "supplementalDataSourceName": "accounts/{ACCOUNT_ID}/dataSources/{SUPPLEMENTAL_DATASOURCE_ID_1}"
            },
            {
              "supplementalDataSourceName": "accounts/{ACCOUNT_ID}/dataSources/{SUPPLEMENTAL_DATASOURCE_ID_2}"
            }
          ]
        }
      }
    }'

به‌روزرسانی منبع داده

می‌توانید ویژگی‌های منبع داده موجود را به‌روز کنید، مثلاً displayName آن را. از روش dataSources.patch استفاده کنید و فیلدهای موردنظر برای به‌روزرسانی را در updateMask مشخص کنید.

PATCH https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}?updateMask=displayName
{
  "name": "accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}",
  "displayName": "Updated API Primary Source Name"
}

درخواست موفق منبع DataSource به‌روزشده را برمی‌گرداند.

{
  "name": "accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}",
  "dataSourceId": "{DATASOURCE_ID}",
  "displayName": "Updated API Primary Source Name",
  "primaryProductDataSource": {
    "feedLabel": "US",
    "contentLanguage": "en",
    "countries": ["US"]
  },
  "input": "API"
}

نمونه‌های کد زیر نحوه استفاده از روش patch را برای به‌روزرسانی منبع داده نشان می‌دهد.

جاوا

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.protobuf.FieldMask;
import com.google.shopping.merchant.datasources.v1.DataSource;
import com.google.shopping.merchant.datasources.v1.DataSourceName;
import com.google.shopping.merchant.datasources.v1.DataSourceReference;
import com.google.shopping.merchant.datasources.v1.DataSourcesServiceClient;
import com.google.shopping.merchant.datasources.v1.DataSourcesServiceSettings;
import com.google.shopping.merchant.datasources.v1.PrimaryProductDataSource;
import com.google.shopping.merchant.datasources.v1.PrimaryProductDataSource.DefaultRule;
import com.google.shopping.merchant.datasources.v1.UpdateDataSourceRequest;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/**
 * This class demonstrates how to update a datasource to change its name in the MC UI. It also
 * demonstrates how to update a primary datasource to add supplemental datasources to its default
 * rule (https://support.google.com/merchants/answer/7450276).
 */
public class UpdateDataSourceSample {

  public static String updateDataSource(Config config, String displayName, String dataSourceId)
      throws Exception {
    GoogleCredentials credential = new Authenticator().authenticate();

    DataSourcesServiceSettings dataSourcesServiceSettings =
        DataSourcesServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    // Creates datasource name to identify datasource.
    String name =
        DataSourceName.newBuilder()
            .setAccount(config.getAccountId().toString())
            .setDatasource(dataSourceId)
            .build()
            .toString();

    DataSource dataSource =
        DataSource.newBuilder()
            // Update the datasource to have the new display name
            .setDisplayName(displayName)
            .setName(name)
            .build();

    FieldMask fieldMask = FieldMask.newBuilder().addPaths("display_name").build();

    try (DataSourcesServiceClient dataSourcesServiceClient =
        DataSourcesServiceClient.create(dataSourcesServiceSettings)) {

      UpdateDataSourceRequest request =
          UpdateDataSourceRequest.newBuilder()
              .setDataSource(dataSource)
              .setUpdateMask(fieldMask)
              .build();

      System.out.println("Sending Update DataSource request");
      DataSource response = dataSourcesServiceClient.updateDataSource(request);
      System.out.println("Updated DataSource Name below");
      System.out.println(response.getName());
      return response.getName();
    } catch (Exception e) {
      System.out.println(e);
      System.exit(1);
      return null;
    }
  }

  public String updateDataSource(
      Config config,
      String primaryDataSourceName,
      String firstSupplementalDataSourceName,
      String secondSupplementalDataSourceName)
      throws Exception {
    GoogleCredentials credential = new Authenticator().authenticate();

    DataSourcesServiceSettings dataSourcesServiceSettings =
        DataSourcesServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    // Setting self to 'true' refers to the primary datasource itself.
    DataSourceReference dataSourceReferenceSelf =
        DataSourceReference.newBuilder().setSelf(true).build();
    DataSourceReference firstSupplementalDataSourceReference =
        DataSourceReference.newBuilder()
            .setSupplementalDataSourceName(firstSupplementalDataSourceName)
            .build();
    DataSourceReference secondSupplementalDataSourceReference =
        DataSourceReference.newBuilder()
            .setSupplementalDataSourceName(secondSupplementalDataSourceName)
            .build();

    // The attributes will first be taken from the primary DataSource.
    // Then the first supplemental DataSource if the attribute is not in the primary DataSource
    // And finally the second supplemental DataSource if not in the first two DataSources.
    // Note that CustomRules could change the behavior of how updates are applied.
    DefaultRule defaultRule =
        DefaultRule.newBuilder()
            .addTakeFromDataSources(dataSourceReferenceSelf)
            .addTakeFromDataSources(firstSupplementalDataSourceReference)
            .addTakeFromDataSources(secondSupplementalDataSourceReference)
            .build();

    // The type of data that this datasource will receive.
    PrimaryProductDataSource primaryProductDataSource =
        PrimaryProductDataSource.newBuilder().setDefaultRule(defaultRule).build();

    DataSource dataSource =
        DataSource.newBuilder()
            // Update the primary datasource to have the default rule datasources in the correct
            // order.
            .setPrimaryProductDataSource(primaryProductDataSource)
            .setName(primaryDataSourceName)
            .build();

    // The '.' signifies a nested field.
    FieldMask fieldMask =
        FieldMask.newBuilder().addPaths("primary_product_data_source.default_rule").build();

    try (DataSourcesServiceClient dataSourcesServiceClient =
        DataSourcesServiceClient.create(dataSourcesServiceSettings)) {

      UpdateDataSourceRequest request =
          UpdateDataSourceRequest.newBuilder()
              .setDataSource(dataSource)
              .setUpdateMask(fieldMask)
              .build();

      System.out.println("Sending Update DataSource request");
      DataSource response = dataSourcesServiceClient.updateDataSource(request);
      System.out.println("Updated DataSource Name below");
      System.out.println(response.getName());
      return response.getName();
    } catch (Exception e) {
      System.out.println(e);
      System.exit(1);
      return null;
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    // The updated displayed datasource name in the Merchant Center UI.
    String displayName = "Great Britain Primary Product Data";

    // The ID of the datasource to update
    String dataSourceId = "11111111"; // Replace with your datasource ID.

    updateDataSource(config, displayName, dataSourceId);
  }
}

PHP

use Google\ApiCore\ApiException;
use Google\Protobuf\FieldMask;
use Google\Shopping\Merchant\DataSources\V1\Client\DataSourcesServiceClient;
use Google\Shopping\Merchant\DataSources\V1\DataSource;
use Google\Shopping\Merchant\DataSources\V1\UpdateDataSourceRequest;

/**
 * Class to demonstrate updating a datasource to change its name in the MC UI.
 */
class UpdateDataSourceSample
{
    // ENSURE you fill in the datasource ID for the sample to work.
    private const DATASOURCE_ID = 'INSERT_DATASOURCE_ID';

    /**
     * Updates a DataSource.
     *
     * @param int $merchantId The Merchant Center Account ID.
     * @param string $displayName The new display name of the data source.
     * @param string $dataSourceId The data source ID.
     * @return string The name of the updated data source.
     */
    public function updateDataSource(int $merchantId, string $displayName, string $dataSourceId): string
    {
        // Gets the OAuth credentials to make the request.
        $credentials = Authentication::useServiceAccountOrTokenFile();

        // Creates options config containing credentials for the client to use.
        $options = ['credentials' => $credentials];

        // Creates a client.
        $dataSourcesServiceClient = new DataSourcesServiceClient($options);

        // Creates the data source name.
        $name = sprintf('accounts/%s/dataSources/%s', $merchantId, $dataSourceId);

        // Creates the data source.
        $dataSource = (new DataSource())
            ->setDisplayName($displayName)
            ->setName($name);

        // Creates a FieldMask to specify which fields to update.
        $updateMask = new FieldMask([
            'paths' => ['display_name']
        ]);

        // Creates the request.
        $request = (new UpdateDataSourceRequest())
            ->setDataSource($dataSource)
            ->setUpdateMask($updateMask);

        print('Sending Update DataSource request' . PHP_EOL);

        // Calls the API and catches and prints any network failures/errors.
        try {
            $response = $dataSourcesServiceClient->updateDataSource($request);
            print('Updated DataSource Name below' . PHP_EOL);
            print($response->getName() . PHP_EOL);
            return $response->getName();
        } catch (ApiException $ex) {
            print('Call failed with message: ' . $ex->getMessage() . PHP_EOL);
            return '';
        }
    }

    // Helper to execute the sample.
    public function callSample(): void
    {
        $config = Config::generateConfig();
        // The Merchant Center Account ID.
        $merchantId = $config['accountId'];

        // The updated displayed datasource name in the Merchant Center UI.
        $displayName = 'new name';

        self::updateDataSource($merchantId, $displayName, self::DATASOURCE_ID);
    }
}

$sample = new UpdateDataSourceSample();
$sample->callSample();

Python

from examples.authentication import configuration
from examples.authentication import generate_user_credentials
from google.protobuf import field_mask_pb2
from google.shopping import merchant_datasources_v1

# ENSURE you fill in the datasource ID for the sample to
# work.
_ACCOUNT = configuration.Configuration().read_merchant_info()
# An ID automatically assigned to the datasource after creation by Google.
_DATASOURCE = "[INSERT_DATASOURCE_HERE]"
_NAME = f"accounts/{_ACCOUNT}/dataSources/{_DATASOURCE}"


def update_data_source():
  """Updates the specified `DataSource` resource."""

  # Gets OAuth Credentials.
  credentials = generate_user_credentials.main()

  # Creates a client.
  client = merchant_datasources_v1.DataSourcesServiceClient(
      credentials=credentials
  )

  # Creates a DataSource and populates its attributes.
  data_source = merchant_datasources_v1.DataSource()
  data_source.name = _NAME  # To identify the data source to update.
  data_source.display_name = "Example DataSource 2"

  # Sets field mask to include only the fields you want to update.
  field_mask = field_mask_pb2.FieldMask(paths=["display_name"])

  # Creates the request.
  request = merchant_datasources_v1.UpdateDataSourceRequest(
      data_source=data_source, update_mask=field_mask
  )

  # Makes the request and catch and print any error messages.
  try:
    client.update_data_source(request=request)
    print("Update successful")
  except RuntimeError as e:
    print("Update failed")
    print(e)


if __name__ == "__main__":
  update_data_source()

cURL

curl -X PATCH \
"https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}?updateMask=displayName" \
-H "Authorization: Bearer {API_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
      "name": "accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}",
      "displayName": "Updated API Primary Source Name"
    }'

حذف منبع داده

برای برداشتن منبع داده از حساب Merchant Center، از روش dataSources.delete استفاده کنید. اگر منبع داده تکمیلی به منبع داده اصلی پیوند داده شده باشد، تا زمانی که همه پیوندهای آن را برندارید نمی‌توانید آن را حذف کنید.

DELETE https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}

حذف موفقیت‌آمیز پاسخ خالی برمی‌گرداند.

نمونه‌های کد زیر نحوه استفاده از روش delete را برای حذف منبع داده نشان می‌دهد.

جاوا

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.datasources.v1.DataSourceName;
import com.google.shopping.merchant.datasources.v1.DataSourcesServiceClient;
import com.google.shopping.merchant.datasources.v1.DataSourcesServiceSettings;
import com.google.shopping.merchant.datasources.v1.DeleteDataSourceRequest;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to delete a datasource. */
public class DeleteDataSourceSample {

  public static void deleteDataSource(Config config, String dataSourceId) throws Exception {
    GoogleCredentials credential = new Authenticator().authenticate();

    DataSourcesServiceSettings dataSourcesServiceSettings =
        DataSourcesServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    String name =
        DataSourceName.newBuilder()
            .setAccount(config.getAccountId().toString())
            .setDatasource(dataSourceId)
            .build()
            .toString();

    try (DataSourcesServiceClient dataSourcesServiceClient =
        DataSourcesServiceClient.create(dataSourcesServiceSettings)) {
      DeleteDataSourceRequest request = DeleteDataSourceRequest.newBuilder().setName(name).build();

      System.out.println("Sending deleteDataSource request");
      // Delete works for any datasource type.
      // If Type "Supplemental", delete will only work if it's not linked to any primary feed.
      // If a link exists and the Type is "Supplemental", you will need to remove the supplemental
      // feed from the default and/or custom rule(s) of any primary feed(s) that references it. Then
      // retry the delete.

      dataSourcesServiceClient.deleteDataSource(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.");
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    // An ID automatically assigned to the datasource after creation by Google.
    String dataSourceId = "1111111111"; // Replace with your datasource ID.

    deleteDataSource(config, dataSourceId);
  }
}

PHP

use Google\ApiCore\ApiException;
use Google\Shopping\Merchant\DataSources\V1\Client\DataSourcesServiceClient;
use Google\Shopping\Merchant\DataSources\V1\DeleteDataSourceRequest;

/**
 * Class to demonstrate deleting a datasource.
 */
class DeleteDataSourceSample
{
    // ENSURE you fill in the datasource ID for the sample to work.
    private const DATASOURCE_ID = 'INSERT_DATASOURCE_ID';

    /**
     * Deletes a DataSource.
     *
     * @param int $merchantId The Merchant Center Account ID.
     * @param string $dataSourceId The data source ID.
     */
    public function deleteDataSource(int $merchantId, string $dataSourceId): void
    {
        // Gets the OAuth credentials to make the request.
        $credentials = Authentication::useServiceAccountOrTokenFile();

        // Creates options config containing credentials for the client to use.
        $options = ['credentials' => $credentials];

        // Creates a client.
        $dataSourcesServiceClient = new DataSourcesServiceClient($options);

        // Creates the data source name.
        $name = sprintf('accounts/%s/dataSources/%s', $merchantId, $dataSourceId);

        // Creates the request.
        $request = (new DeleteDataSourceRequest())
            ->setName($name);

        print('Sending deleteDataSource request' . PHP_EOL);

        // Calls the API and catches and prints any network failures/errors.
        try {
            $dataSourcesServiceClient->deleteDataSource($request);
            print('Delete successful, note that it may take a few minutes for the delete to update in the system.' . PHP_EOL);
        } catch (ApiException $ex) {
            print('Call failed with message: ' . $ex->getMessage() . PHP_EOL);
        }
    }

    // Helper to execute the sample.
    public function callSample(): void
    {
        $config = Config::generateConfig();
        // The Merchant Center Account ID.
        $merchantId = $config['accountId'];

        self::deleteDataSource($merchantId, self::DATASOURCE_ID);
    }
}

$sample = new DeleteDataSourceSample();
$sample->callSample();

Python

from examples.authentication import configuration
from examples.authentication import generate_user_credentials
from google.shopping import merchant_datasources_v1


def delete_data_source(account_id: str, datasource_id: str):
  """Deletes the specified `DataSource` resource.

  Delete works for any datasource type.
  If Type "Supplemental", delete will only work if it's not linked to any
  primary feed. If a link exists and the Type is "Supplemental", you will need
  to remove the supplemental feed from the default and/or custom rule(s) of any
  primary feed(s) that references it. Then retry the delete.

  Args:
    account_id: The Merchant Center account ID.
    datasource_id: The ID of the data source to delete.
  """

  # Gets OAuth Credentials.
  credentials = generate_user_credentials.main()

  # Creates a client.
  client = merchant_datasources_v1.DataSourcesServiceClient(
      credentials=credentials
  )

  name = f"accounts/{account_id}/dataSources/{datasource_id}"

  # Creates the request.
  request = merchant_datasources_v1.DeleteDataSourceRequest(name=name)

  # Makes the request and catches and prints any error messages.
  try:
    # No response is returned on request.
    client.delete_data_source(request=request)
    print("Deletion successful")
  except RuntimeError as e:
    print("Deletion failed")
    print(e)
    raise


if __name__ == "__main__":
  # Retrieves the Merchant Center account ID from the configuration file.
  merchant_account_id = configuration.Configuration().read_merchant_info()
  # ENSURE you fill in the datasource ID for the sample to
  # work.
  # An ID automatically assigned to the datasource after creation by Google.
  target_datasource = "[INSERT_DATASOURCE_HERE]"

  delete_data_source(merchant_account_id, target_datasource)

cURL

curl -X DELETE \
"https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}" \
-H "Authorization: Bearer {API_TOKEN}" \