API phụ Nguồn dữ liệu cho phép bạn truy xuất thông tin về các nguồn dữ liệu được định cấu hình trong tài khoản Merchant Center. Điều này có thể hữu ích cho việc tìm hiểu chế độ thiết lập hiện tại, xác minh cấu hình hoặc tích hợp với các hệ thống khác. Bạn có thể truy xuất một nguồn dữ liệu cụ thể theo mã nhận dạng hoặc liệt kê tất cả các nguồn dữ liệu được liên kết với tài khoản của mình.
Để biết thông tin về cách quản lý (tạo, cập nhật, xoá) nguồn dữ liệu cho API phụ Sản phẩm, hãy xem hướng dẫn Quản lý nguồn dữ liệu API để tải sản phẩm lên. Bạn cũng có thể xem các nguồn dữ liệu thông qua giao diện người dùng Merchant Center. Tìm hiểu thêm tại phần Quản lý nguồn dữ liệu.
Các điểm cần cân nhắc đặc biệt
Có thể sẽ có một độ trễ ngắn (vài giây) sau khi bạn tạo một nguồn dữ liệu trước khi bạn có thể truy xuất hoặc thao tác với nguồn dữ liệu đó bằng phương thức get
, list
, delete
hoặc patch
.
Liệt kê tất cả nguồn dữ liệu
Để truy xuất danh sách tất cả các nguồn dữ liệu được định cấu hình cho tài khoản Merchant Center, hãy sử dụng phương thức dataSources.list
.
Xin lưu ý rằng danh sách được trả về có thể bao gồm các nguồn dữ liệu chỉ đọc thông qua API, chẳng hạn như những nguồn dữ liệu được tạo thông qua giao diện người dùng Merchant Center (loại đầu vào UI
), nguồn cấp dữ liệu tự động (loại đầu vào AUTOFEED
) hoặc Google Trang tính (loại đầu vào tệp GOOGLE_SHEETS
).
GET https://merchantapi.googleapis.com/datasources/v1beta/accounts/{ACCOUNT_ID}/dataSources
Yêu cầu thành công sẽ trả về một danh sách được phân trang gồm các tài nguyên 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"
}
]
}
Các mẫu sau đây minh hoạ cách liệt kê tất cả nguồn dữ liệu cho tài khoản của bạn. Phản hồi sẽ bao gồm tất cả các loại nguồn dữ liệu, bao gồm cả nguồn cấp dữ liệu do API quản lý, nguồn cấp dữ liệu tệp, nguồn cấp dữ liệu giao diện người dùng và nguồn cấp dữ liệu tự động.
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 Bundle 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"
Xem thông tin về một nguồn dữ liệu cụ thể
Để truy xuất thông tin về một nguồn dữ liệu cụ thể, hãy sử dụng phương thức dataSources.get
. Bạn cần cung cấp accountId
và dataSourceId
của nguồn dữ liệu mà bạn muốn truy xuất.
Xin lưu ý rằng có thể sẽ có một khoảng thời gian trễ ngắn sau khi bạn tạo một nguồn dữ liệu trước khi nguồn dữ liệu đó có thể truy xuất được bằng phương thức này.
GET https://merchantapi.googleapis.com/datasources/v1beta/accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}
Một yêu cầu thành công sẽ trả về tài nguyên 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"
}
Các mẫu sau đây minh hoạ cách truy xuất một nguồn dữ liệu cụ thể theo mã nhận dạng của nguồn dữ liệu đó.
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"