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

API فرعی منابع داده به شما امکان می دهد منابع داده را به طور خاص برای آپلود محصولات از طریق API ایجاد و مدیریت کنید. شما باید حداقل یک منبع داده را مشخص کنید تا بتوانید جزئیات محصول را به Merchant Center ارائه دهید.

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

ملاحظات خاص

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

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

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

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

علاوه بر تنظیم کشورها در سطح منبع داده، می توانید با پیکربندی قسمت shipping در منبع products ، کشورهای دیگری را برای محصولات خاص هدف قرار دهید. این کنترل گرانول بیشتری را ارائه می دهد.

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

بدون تنظیم فیلدهای feedLabel و contentLanguage ، با استفاده از روش dataSources.create ، یک PrimaryProductDataSource ایجاد کنید:

POST https://merchantapi.googleapis.com/datasources/v1beta/accounts/{ACCOUNT_ID}/dataSources
{
  "displayName": "My API Primary Product Source",
  "primaryProductDataSource": {}
}

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

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

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

جاوا

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

/**
 * This class demonstrates how to create a primary product datasource for all `feedLabel` and
 * `contentLanguage` combinations. Note that rules functionality is limited for wildcard feeds.
 */
public class CreatePrimaryProductDataSourceWildCardSample {

  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()
            // Channel can be "ONLINE_PRODUCTS" or "LOCAL_PRODUCTS" or "PRODUCTS" .
            // While accepted, datasources with channel "products" representing unified products
            // currently cannot be used with the Products bundle.
            .setChannel(PrimaryProductDataSource.Channel.ONLINE_PRODUCTS)
            .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 datasource name in the Merchant Center UI.
    String displayName = "Primary Product Data Wildcard";

    createDataSource(config, displayName);
  }
}

PHP

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

/**
 * This class demonstrates how to create a primary product datasource for all `feedLabel` and
 * `contentLanguage` combinations. Note that rules functionality is limited for wildcard feeds.
 */

class CreatePrimaryProductDataSourceWildCardSample
{
    /**
     * 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())
            // Channel can be "ONLINE_PRODUCTS" or "LOCAL_PRODUCTS" or "PRODUCTS" .
            // While accepted, datasources with channel "products" representing unified products
            // currently cannot be used with the Products bundle.
            ->setChannel(Channel::ONLINE_PRODUCTS)
            ->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 Wildcard';

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


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

پایتون

from examples.authentication import configuration
from examples.authentication import generate_user_credentials
from google.shopping.merchant_datasources_v1beta import CreateDataSourceRequest
from google.shopping.merchant_datasources_v1beta import DataSource
from google.shopping.merchant_datasources_v1beta import DataSourcesServiceClient
from google.shopping.merchant_datasources_v1beta import PrimaryProductDataSource

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


def create_primary_product_data_source_wildcard():
  """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"]
  # Channel can be "ONLINE_PRODUCTS" or "LOCAL_PRODUCTS" or "PRODUCTS" .
  # While accepted, datasources with channel "products" representing unified
  # products currently cannot be used with the Products bundle.
  primary_datasource.channel = PrimaryProductDataSource.Channel.ONLINE_PRODUCTS

  # Creates a DataSource and populates its attributes.
  data_source = DataSource()
  data_source.display_name = "Example Wildcard 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_wildcard()

CURL

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

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

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

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

یک درخواست موفق، منبع DataSource تازه ایجاد شده را برمی گرداند. هنگام درج محصولات با API فرعی محصولات، می توانید از 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.v1beta.CreateDataSourceRequest;
import com.google.shopping.merchant.datasources.v1beta.DataSource;
import com.google.shopping.merchant.datasources.v1beta.DataSourcesServiceClient;
import com.google.shopping.merchant.datasources.v1beta.DataSourcesServiceSettings;
import com.google.shopping.merchant.datasources.v1beta.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()
            // Channel can be "ONLINE_PRODUCTS" or "LOCAL_PRODUCTS" or "PRODUCTS" .
            // While accepted, datasources with channel "products" representing unified products
            // currently cannot be used with the Products bundle.
            .setChannel(PrimaryProductDataSource.Channel.ONLINE_PRODUCTS)
            .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.SHOPPING_ADS)
                    .setState(PrimaryProductDataSource.Destination.State.ENABLED)
                    .build())
            .addDestinations(
                PrimaryProductDataSource.Destination.newBuilder()
                    .setDestination(DestinationEnum.FREE_LISTINGS)
                    .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();
    } 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 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\V1beta\Client\DataSourcesServiceClient;
use Google\Shopping\Merchant\DataSources\V1beta\CreateDataSourceRequest;
use Google\Shopping\Merchant\DataSources\V1beta\DataSource;
use Google\Shopping\Merchant\DataSources\V1beta\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([
            // Channel can be "ONLINE_PRODUCTS" or "LOCAL_PRODUCTS" or "PRODUCTS".
            // While accepted, datasources with channel "PRODUCTS" representing unified products
            // currently cannot be used with the Products bundle.
            'channel' => PrimaryProductDataSource\Channel::ONLINE_PRODUCTS,
            '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::SHOPPING_ADS,
                    'state' => PrimaryProductDataSource\Destination\State::ENABLED
                ]),
                new PrimaryProductDataSource\Destination([
                    'destination' => DestinationEnum::FREE_LISTINGS,
                    '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();

پایتون

"""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_v1beta import CreateDataSourceRequest
from google.shopping.merchant_datasources_v1beta import DataSource
from google.shopping.merchant_datasources_v1beta import DataSourcesServiceClient
from google.shopping.merchant_datasources_v1beta import PrimaryProductDataSource
# Used for setting the destination type, e.g., SHOPPING_ADS.
from google.shopping.type import types as merchant_api_types


# Fetches the Merchant Center account ID from the configuration file.
# This ID is essential for constructing the 'parent' resource path
# required by the API.
_ACCOUNT_ID = configuration.Configuration().read_merchant_info()
# Constructs the parent resource name format for Data Source operations.
_PARENT = f"accounts/{_ACCOUNT_ID}"


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

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

  Returns:
      The resource name of the newly created data source if successful,
      otherwise None.
  """

  # 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()
  # Specifies the channel for the products (e.g., ONLINE_PRODUCTS).
  # Note: While "PRODUCTS" (for unified products) is accepted, it's not
  # currently usable with the Products API bundle.
  primary_product_data_source.channel = (
      PrimaryProductDataSource.Channel.ONLINE_PRODUCTS
  )
  # 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 Shopping Ads destination (enabled).
  destination_shopping_ads = PrimaryProductDataSource.Destination()
  destination_shopping_ads.destination = (
      merchant_api_types.Destination.DestinationEnum.SHOPPING_ADS
  )
  destination_shopping_ads.state = (
      PrimaryProductDataSource.Destination.State.ENABLED
  )

  # Configure Free Listings destination (disabled).
  destination_free_listings = PrimaryProductDataSource.Destination()
  destination_free_listings.destination = (
      merchant_api_types.Destination.DestinationEnum.FREE_LISTINGS
  )
  destination_free_listings.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

  # 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)
  except RuntimeError as e:
    # Handles any errors encountered during the API request.
    print(e)


if __name__ == "__main__":
  # 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(datasource_display_name)

CURL

curl -X POST \
"https://merchantapi.googleapis.com/datasources/v1beta/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": "SHOPPING_ADS",
            "state": "ENABLED"
          },
          {
            "destination": "FREE_LISTINGS",
            "state": "DISABLED"
          }
        ]
      }
    }'

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

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

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

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

POST https://merchantapi.googleapis.com/datasources/v1beta/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.v1beta.CreateDataSourceRequest;
import com.google.shopping.merchant.datasources.v1beta.DataSource;
import com.google.shopping.merchant.datasources.v1beta.DataSourcesServiceClient;
import com.google.shopping.merchant.datasources.v1beta.DataSourcesServiceSettings;
import com.google.shopping.merchant.datasources.v1beta.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 CreateSupplementalProductDataSourceWildCardSample {

  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 datasource name in the Merchant Center UI.
    String displayName = "Supplemental API Product Data Wildcard";

    createDataSource(config, displayName);
  }
}

PHP

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

/**
 * Class to demonstrate creating a Supplemental product datasource for all
 * `feedLabel` and `contentLanguage` combinations. This works only for API
 * supplemental feeds.
 */
class CreateSupplementalProductDataSourceWildCardSample
{
    /**
     * 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 Wildcard';

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


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

پایتون

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

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


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

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

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

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

  # Creates a DataSource and populates its attributes.
  data_source = merchant_datasources_v1beta.DataSource()
  data_source.display_name = "Example Wildcard Supplemental DataSource"
  data_source.supplemental_product_data_source = supplemental_datasource

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

CURL

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

منبع داده اولیه خود را برای پیوند به منبع داده تکمیلی جدید ایجاد شده به روز کنید. شما می توانید با تغییر defaultRule PrimaryProductDataSource با متد dataSources.update به این امر دست یابید.

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

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

PATCH https://merchantapi.googleapis.com/datasources/v1beta/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.v1beta.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/v1beta/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/v1beta/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.v1beta.DataSource;
import com.google.shopping.merchant.datasources.v1beta.DataSourceName;
import com.google.shopping.merchant.datasources.v1beta.DataSourceReference;
import com.google.shopping.merchant.datasources.v1beta.DataSourcesServiceClient;
import com.google.shopping.merchant.datasources.v1beta.DataSourcesServiceSettings;
import com.google.shopping.merchant.datasources.v1beta.PrimaryProductDataSource;
import com.google.shopping.merchant.datasources.v1beta.PrimaryProductDataSource.DefaultRule;
import com.google.shopping.merchant.datasources.v1beta.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\V1beta\Client\DataSourcesServiceClient;
use Google\Shopping\Merchant\DataSources\V1beta\DataSource;
use Google\Shopping\Merchant\DataSources\V1beta\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();

پایتون

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_v1beta

# 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_v1beta.DataSourcesServiceClient(
      credentials=credentials
  )

  # Creates a DataSource and populates its attributes.
  data_source = merchant_datasources_v1beta.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_v1beta.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/v1beta/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": "New Display Name for API Feed"
    }'

یک منبع داده را حذف کنید

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

DELETE https://merchantapi.googleapis.com/datasources/v1beta/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.v1beta.DataSourceName;
import com.google.shopping.merchant.datasources.v1beta.DataSourcesServiceClient;
import com.google.shopping.merchant.datasources.v1beta.DataSourcesServiceSettings;
import com.google.shopping.merchant.datasources.v1beta.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.");
    } catch (Exception e) {
      System.out.println(e);
    }
  }

  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\V1beta\Client\DataSourcesServiceClient;
use Google\Shopping\Merchant\DataSources\V1beta\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();

پایتون

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

# 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 delete_data_source():
  """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.
  """

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

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

  # Creates the request.
  request = merchant_datasources_v1beta.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)


if __name__ == "__main__":
  delete_data_source()

CURL

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