查看資料來源設定

你可以透過資料來源子 API,擷取在 Merchant Center 帳戶中設定的資料來源相關資訊。這有助於瞭解目前的設定、驗證設定,或與其他系統整合。您可以依 ID 擷取特定資料來源,或列出與帳戶相關聯的所有資料來源。

如要瞭解如何管理 (建立、更新、刪除) 產品子 API 的資料來源,請參閱「管理產品上傳的 API 資料來源」指南。你也可以透過 Merchant Center 使用者介面查看資料來源。詳情請參閱「管理資料來源」。

特殊注意事項

建立資料來源後,可能需要稍待片刻 (幾秒),才能使用 getlistdeletepatch 方法擷取或操控資料來源。

列出所有資料來源

如要擷取為 Merchant Center 帳戶設定的所有資料來源清單,請使用 dataSources.list 方法。

請注意,傳回的清單可能包含透過 API 唯讀的資料來源,例如透過 Merchant Center 使用者介面建立的資料來源 (輸入類型 UI)、自動動態饋給 (輸入類型 AUTOFEED) 或 Google 試算表 (檔案輸入類型 GOOGLE_SHEETS)。

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

如果要求成功,系統會傳回分頁的DataSource資源清單。

{
  "dataSources": [
    {
      "name": "accounts/{ACCOUNT_ID}/dataSources/100000001",
      "dataSourceId": "100000001",
      "displayName": "Primary Product API Feed (US)",
      "primaryProductDataSource": {
        "channel": "ONLINE_PRODUCTS",
        "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": {
        "channel": "ONLINE_PRODUCTS",
        "feedLabel": "GB",
        "contentLanguage": "en",
        "countries": ["GB"]
      },
      "input": "UI"
    },
    {
      "name": "accounts/{ACCOUNT_ID}/dataSources/100000003",
      "dataSourceId": "100000003",
      "displayName": "Autofeed Products",
      "primaryProductDataSource": {
        "channel": "ONLINE_PRODUCTS",
        "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": {
        "channel": "ONLINE_PRODUCTS",
        "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 管理的動態饋給、檔案動態饋給、使用者介面動態饋給和自動動態饋給。

Java

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.datasources.v1beta.DataSource;
import com.google.shopping.merchant.datasources.v1beta.DataSourcesServiceClient;
import com.google.shopping.merchant.datasources.v1beta.DataSourcesServiceClient.ListDataSourcesPagedResponse;
import com.google.shopping.merchant.datasources.v1beta.DataSourcesServiceSettings;
import com.google.shopping.merchant.datasources.v1beta.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\V1beta\Client\DataSourcesServiceClient;
use Google\Shopping\Merchant\DataSources\V1beta\DataSource;
use Google\Shopping\Merchant\DataSources\V1beta\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_v1beta

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

  # Creates the request.
  request = merchant_datasources_v1beta.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;
  let dataSources = [];
  let primaryDataSources = [];
  try {
    console.log('Sending list DataSources request');
    let pageToken;
    let pageSize = 10;
    // Call the DataSources.list API method. Use the pageToken to iterate through
    // all pages of results.
    do {
      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/v1beta/accounts/{ACCOUNT_ID}/dataSources" \
-H "Authorization: Bearer <API_TOKEN>" \
-H "Content-Type: application/json"

取得特定資料來源的相關資訊

如要擷取特定資料來源的相關資訊,請使用 dataSources.get 方法。您必須提供要擷取資料來源的 accountIddataSourceId

請注意,建立資料來源後,可能需要過一段時間才能使用這個方法擷取資料。

GET https://merchantapi.googleapis.com/datasources/v1beta/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": {
    "channel": "ONLINE_PRODUCTS",
    "feedLabel": "US",
    "contentLanguage": "en",
    "countries": [
      "US"
    ]
  },
  "input": "API"
}

下列範例示範如何依 ID 擷取特定資料來源。

Java

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.datasources.v1beta.DataSource;
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.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\V1beta\Client\DataSourcesServiceClient;
use Google\Shopping\Merchant\DataSources\V1beta\DataSource;
use Google\Shopping\Merchant\DataSources\V1beta\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_v1beta

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

  # Creates the request.
  request = merchant_datasources_v1beta.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/v1beta/accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}" \
-H "Authorization: Bearer <API_TOKEN>" \
-H "Content-Type: application/json"