مشاهده پیکربندی‌های منبع داده

میانای برنامه‌سازی کاربردی فرعی «منابع داده» به شما امکان می‌دهد اطلاعات مربوط به منابع داده پیکربندی‌شده در حساب Merchant Center خود را بازیابی کنید. این کار می‌تواند برای درک راه‌اندازی فعلی، درستی‌سنجی پیکربندی‌ها، یا ادغام با سیستم‌های دیگر مفید باشد. می‌توانید منبع داده خاصی را با شناسه آن بازیابی کنید یا همه منابع داده منسوب به حسابتان را فهرست کنید.

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

ملاحظات ویژه

ممکن است پس‌از ایجاد منبع داده، تأخیر کوتاهی (چند ثانیه) وجود داشته باشد تا بتوانید آن را بااستفاده از روش get،‏ list،‏ delete، یا patch بازیابی یا دستکاری کنید.

فهرست کردن همه منابع داده

برای بازیابی فهرست همه منابع داده پیکربندی‌شده برای حساب Merchant Center خود، از روش dataSources.list استفاده کنید.

به‌خاطر داشته باشید که فهرست برگردانده‌شده می‌تواند شامل منابع داده‌ای باشد که ازطریق API فقط خواندنی هستند، مانند منابعی که ازطریق Merchant Center UI (نوع ورودی UI)، فیدهای خودکارسازی‌شده (نوع ورودی AUTOFEED)، یا کاربرگ‌نگار Google (نوع ورودی فایل GOOGLE_SHEETS) ایجاد شده‌اند. هنگام فهرست کردن منابع داده برای یک حساب پیشرفته، نتیجه فقط شامل منابع داده‌ای خواهد بود که مستقیماً متعلق به حساب پیشرفته هستند، نه منابعی که متعلق به حساب‌های فرعی آن هستند.

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

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

{
  "dataSources": [
    {
      "name": "accounts/{ACCOUNT_ID}/dataSources/100000001",
      "dataSourceId": "100000001",
      "displayName": "Primary Product API Feed (US)",
      "primaryProductDataSource": {
        "feedLabel": "US",
        "contentLanguage": "en",
        "countries": ["US"],
        "destinations": [
          {
            "destination": "SHOPPING_ADS",
            "state": "ENABLED"
          },
          {
            "destination": "FREE_LISTINGS",
            "state": "ENABLED"
          }
        ]
      },
      "input": "API"
    },
    {
      "name": "accounts/{ACCOUNT_ID}/dataSources/100000002",
      "dataSourceId": "100000002",
      "displayName": "Merchant Center UI Product Feed",
      "primaryProductDataSource": {
        "feedLabel": "GB",
        "contentLanguage": "en",
        "countries": ["GB"]
      },
      "input": "UI"
    },
    {
      "name": "accounts/{ACCOUNT_ID}/dataSources/100000003",
      "dataSourceId": "100000003",
      "displayName": "Autofeed Products",
      "primaryProductDataSource": {
        "countries": ["DE"]
      },
      "input": "AUTOFEED"
    },
    {
      "name": "accounts/{ACCOUNT_ID}/dataSources/100000004",
      "dataSourceId": "100000004",
      "displayName": "API Promotions Feed (FR)",
      "promotionDataSource": {
        "targetCountry": "FR",
        "contentLanguage": "fr"
      },
      "input": "API"
    },
    {
      "name": "accounts/{ACCOUNT_ID}/dataSources/100000005",
      "dataSourceId": "100000005",
      "displayName": "API Local Inventory Feed (US Stores)",
      "localInventoryDataSource": {
        "feedLabel": "US_Stores",
        "contentLanguage": "en"
      },
      "input": "API"
    },
    {
      "name": "accounts/{ACCOUNT_ID}/dataSources/100000006",
      "dataSourceId": "100000006",
      "displayName": "Supplemental Product API Feed (All Targets)",
      "supplementalProductDataSource": {},
      "input": "API"
    },
    {
      "name": "accounts/{ACCOUNT_ID}/dataSources/100000007",
      "dataSourceId": "100000007",
      "displayName": "Primary Product File Feed (CA)",
      "primaryProductDataSource": {
        "feedLabel": "CA",
        "contentLanguage": "en",
        "countries": ["CA"]
      },
      "input": "FILE",
      "fileInput": {
        "fetchSettings": {
          "enabled": true,
          "timeOfDay": { "hours": 2 },
          "timeZone": "America/Toronto",
          "frequency": "FREQUENCY_DAILY",
          "fetchUri": "sftp://example.com/feeds/ca_products.xml"
        },
        "fileInputType": "FETCH"
      }
    },
    {
      "name": "accounts/{ACCOUNT_ID}/dataSources/100000008",
      "dataSourceId": "100000008",
      "displayName": "API Product Reviews Feed",
      "productReviewDataSource": {},
      "input": "API"
    },
    {
      "name": "accounts/{ACCOUNT_ID}/dataSources/100000009",
      "dataSourceId": "100000009",
      "displayName": "API Merchant Reviews Feed",
      "merchantReviewDataSource": {},
      "input": "API"
    }
  ]
}

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

جاوا

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.datasources.v1.DataSource;
import com.google.shopping.merchant.datasources.v1.DataSourcesServiceClient;
import com.google.shopping.merchant.datasources.v1.DataSourcesServiceClient.ListDataSourcesPagedResponse;
import com.google.shopping.merchant.datasources.v1.DataSourcesServiceSettings;
import com.google.shopping.merchant.datasources.v1.ListDataSourcesRequest;
import java.util.ArrayList;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to list all the datasources for a given Merchant Center account */
public class ListDataSourcesSample {

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

  public static ArrayList<DataSource> listDataSources(Config config) throws Exception {

    // Obtains OAuth token based on the user's configuration.
    GoogleCredentials credential = new Authenticator().authenticate();

    // Creates service settings using the credentials retrieved above.
    DataSourcesServiceSettings dataSourcesServiceSettings =
        DataSourcesServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    // Creates parent to identify the account from which to list all the datasources.
    String parent = getParent(config.getAccountId().toString());

    // Calls the API and catches and prints any network failures/errors.
    try (DataSourcesServiceClient dataSourcesServiceClient =
        DataSourcesServiceClient.create(dataSourcesServiceSettings)) {

      // The parent has the format: accounts/{account}
      ListDataSourcesRequest request =
          ListDataSourcesRequest.newBuilder().setParent(parent).build();

      System.out.println("Sending list datasources request:");
      ListDataSourcesPagedResponse response = dataSourcesServiceClient.listDataSources(request);

      int count = 0;
      ArrayList<DataSource> dataSources = new ArrayList<DataSource>();
      ArrayList<DataSource> justPrimaryDataSources = new ArrayList<DataSource>();

      // Iterates over all rows in all pages and prints the datasource in each row.
      // Automatically uses the `nextPageToken` if returned to fetch all pages of data.
      for (DataSource element : response.iterateAll()) {
        System.out.println(element);
        count++;
        dataSources.add(element);
        // The below lines show how to filter datasources based on type.
        // `element.hasSupplementalProductDataSource()` would give you supplemental
        // datasources, etc.
        if (element.hasPrimaryProductDataSource()) {
          justPrimaryDataSources.add(element);
        }
      }
      System.out.print("The following count of elements were returned: ");
      System.out.println(count);
      return dataSources;
    } catch (Exception e) {
      System.out.println(e);
      System.exit(1);
      return null; // Necessary to satisfy the compiler as we're not returning an
      // ArrayList<DataSource> on failure.
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();

    listDataSources(config);
  }
}

PHP

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

/**
 * Class to demonstrate listing all the datasources for a given Merchant Center
 * account.
 */
class ListDataSourcesSample
{
    /**
     * Lists all DataSources for the given Merchant Center account.
     *
     * @param int $merchantId The Merchant Center Account ID.
     * @return array An array of DataSources.
     */
    public function listDataSources(int $merchantId): array
    {
        // 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 request.
        $request = (new ListDataSourcesRequest())
            ->setParent($parent);

        print('Sending list datasources request:' . PHP_EOL);

        // Calls the API and catches and prints any network failures/errors.
        try {
            $response = $dataSourcesServiceClient->listDataSources($request);

            $dataSources = [];
            $justPrimaryDataSources = [];

            /** @var DataSource $element */
            foreach ($response as $element) {
                print($element->serializeToJsonString() . PHP_EOL);
                $dataSources[] = $element;
                // The below lines show how to filter datasources based on type.
                // `element.hasSupplementalProductDataSource()` would give you supplemental
                // datasources, etc.
                if ($element->hasPrimaryProductDataSource()) {
                    $justPrimaryDataSources[] = $element;
                }
            }
            print('The following count of datasources were returned: ' . count($dataSources) . PHP_EOL);
            print('... of which are primary datasources: ' . count($justPrimaryDataSources) . PHP_EOL);
            return $dataSources;
        } 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'];

        self::listDataSources($merchantId);
    }
}

$sample = new ListDataSourcesSample();
$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 list_data_sources():
  """Lists the `DataSource` resources for a given account."""

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

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

  # Creates the request.
  request = merchant_datasources_v1.ListDataSourcesRequest(parent=_PARENT)

  # Makes the request and catch and print any error messages.
  try:
    response = client.list_data_sources(request=request)
    primary_data_sources = []
    for data_source in response.data_sources:
      # PrimaryProductDataSource is a oneOf field. If it is set, then this is a
      # primary data source.
      if data_source.primary_product_data_source:
        primary_data_sources.append(data_source)
    print(
        f"List request successful. You have {len(response.data_sources)} total"
        f" data sources, of which {len(primary_data_sources)} are primary data"
        " sources"
    )
  except RuntimeError as e:
    print("List request failed")
    print(e)


if __name__ == "__main__":
  list_data_sources()

AppsScript


/**
 * Lists all data sources for a given Merchant Center account.
 */
function listDataSources() {
  // IMPORTANT:
  // Enable the Merchant API DataSources sub-API Advanced Service and call it
  // "MerchantApiDataSources"

  // Replace this with your Merchant Center ID.
  const accountId = '<MERCHANT_CENTER_ID>';

  // Construct the parent name
  const parent = 'accounts/' + accountId;
  const dataSources = [];
  const primaryDataSources = [];
  try {
    console.log('Sending list DataSources request');
    let pageToken;
    const pageSize = 10;
    // Call the DataSources.list API method. Use the pageToken to iterate through
    // all pages of results.
    do {
      const response =
          MerchantApiDataSources.Accounts.DataSources.list(parent, {pageSize, pageToken});
      for (const datasource of response.dataSources) {
        dataSources.push(datasource);
        if (datasource.primaryProductDataSource) {
          primaryDataSources.push(datasource);
        }
      }
      pageToken = response.nextPageToken;
    } while (pageToken); // Exits when there is no next page token.
    console.log('Retrieved ' + dataSources.length + ' data sources.');
    console.log(
        'There were ' + primaryDataSources.length +
        ' primary product data sources.');
  } catch (e) {
    console.log('ERROR!');
    console.log(e);
  }
}

cURL

curl \
"https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources" \
-H "Authorization: Bearer <API_TOKEN>" \
-H "Content-Type: application/json"

دریافت اطلاعات درباره منبع داده‌ای خاص

برای بازیابی اطلاعات مربوط به منبع داده‌ای خاص، از روش dataSources.get استفاده کنید. باید accountId و dataSourceId منبع داده‌ای را که می‌خواهید بازیابی کنید ارائه دهید.

به‌خاطر داشته باشید که ممکن است پس‌از ایجاد منبع داده، تأخیر کوتاهی وجود داشته باشد تا بتوان آن را بااستفاده از این روش بازیابی کرد.

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

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

{
  "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.DataSource;
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.GetDataSourceRequest;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to get a specific datasource for a given Merchant Center account. */
public class GetDataSourceSample {

  public static DataSource getDataSource(Config config, String dataSourceId) throws Exception {

    // Obtains OAuth token based on the user's configuration.
    GoogleCredentials credential = new Authenticator().authenticate();

    // Creates service settings using the credentials retrieved above.
    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();

    // Calls the API and catches and prints any network failures/errors.
    try (DataSourcesServiceClient dataSourcesServiceClient =
        DataSourcesServiceClient.create(dataSourcesServiceSettings)) {

      // The name has the format: accounts/{account}/datasources/{datasource}
      GetDataSourceRequest request = GetDataSourceRequest.newBuilder().setName(name).build();

      System.out.println("Sending GET DataSource request:");
      DataSource response = dataSourcesServiceClient.getDataSource(request);

      System.out.println("Retrieved DataSource below");
      System.out.println(response);
      return response;
    } catch (Exception e) {
      System.out.println(e);
      System.exit(1);
      return null; // Necessary to satisfy the compiler as we're not returning a
      // DataSource on failure.
    }
  }

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

    getDataSource(config, datasourceId);
  }
}

PHP

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

/**
 * Class to demonstrate getting a specific datasource for a given Merchant
 * Center account.
 */
class GetDataSourceSample
{
    // ENSURE you fill in the datasource ID for the sample to work.
    private const DATASOURCE_ID = 'INSERT_DATASOURCE_ID';

    /**
     * Gets a DataSource.
     *
     * @param int $merchantId The Merchant Center Account ID.
     * @param string $dataSourceId The data source ID.
     * @return DataSource The retrieved data source.
     */
    public function getDataSource(int $merchantId, string $dataSourceId): DataSource
    {
        // 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 GetDataSourceRequest())
            ->setName($name);

        print('Sending GET DataSource request:' . PHP_EOL);

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

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

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

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

Python

from examples.authentication import configuration
from examples.authentication import generate_user_credentials
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()
_DATASOURCE = "[INSERT_DATASOURCE_HERE]"
_NAME = f"accounts/{_ACCOUNT}/dataSources/{_DATASOURCE}"


def get_data_source():
  """Gets the specified `DataSource` resource."""

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

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

  # Creates the request.
  request = merchant_datasources_v1.GetDataSourceRequest(name=_NAME)

  # Makes the request and catch and print any error messages.
  try:
    response = client.get_data_source(request=request)
    print(f"Get successful: {response}")
  except RuntimeError as e:
    print("Get failed")
    print(e)


if __name__ == "__main__":
  get_data_source()

cURL

curl \
"https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}" \
-H "Authorization: Bearer <API_TOKEN>" \
-H "Content-Type: application/json"