데이터 소스 하위 API를 사용하면 판매자 센터 계정에 구성된 데이터 소스에 관한 정보를 가져올 수 있습니다. 이는 현재 설정을 이해하거나, 구성을 확인하거나, 다른 시스템과 통합하는 데 유용할 수 있습니다. ID로 특정 데이터 소스를 가져오거나 계정과 연결된 모든 데이터 소스를 나열할 수 있습니다.
제품 하위 API의 데이터 소스를 관리 (생성, 업데이트, 삭제)하는 방법은 제품 업로드를 위한 API 데이터 소스 관리 가이드를 참고하세요. 판매자 센터 사용자 인터페이스를 통해 데이터 소스를 확인할 수도 있습니다. 데이터 소스 관리에서 자세히 알아보세요.
특별 고려사항
데이터 소스를 만든 후 get
, list
, delete
또는 patch
메서드를 사용하여 데이터 소스를 가져오거나 조작하기 전에 약간의 지연 (몇 초)이 발생할 수 있습니다.
모든 데이터 소스 나열
판매자 센터 계정에 구성된 모든 데이터 소스의 목록을 가져오려면 dataSources.list
메서드를 사용하세요.
반환된 목록에는 판매자 센터 UI (입력 유형 UI
), 자동 피드 (입력 유형 AUTOFEED
) 또는 Google Sheets (파일 입력 유형 GOOGLE_SHEETS
)를 통해 생성된 데이터 소스와 같이 API를 통해 읽기 전용인 데이터 소스가 포함될 수 있습니다.
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 관리 피드, 파일 피드, UI 피드, 자동 피드를 비롯한 모든 유형의 데이터 소스가 포함됩니다.
자바
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"
특정 데이터 소스에 대한 정보 가져오기
특정 데이터 소스에 관한 정보를 가져오려면 dataSources.get
메서드를 사용합니다. 가져오려는 데이터 소스의 accountId
및 dataSourceId
을(를) 제공해야 합니다.
데이터 소스를 만든 후 이 메서드를 사용하여 검색할 수 있게 되기까지 약간의 지연이 있을 수 있습니다.
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로 특정 데이터 소스를 가져오는 방법을 보여줍니다.
자바
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"