シームレスで統合されたショッピング エクスペリエンスを提供するため、Merchant API で商品を追加すると、オンラインやローカルの掲載先タイプなど、有効になっているすべての掲載先でデフォルトで利用できるようになります。これは、ショッピングのマルチチャネル戦略の一環です。
商品のローカル ショッピングに関する追加情報を指定するには、Inventories サブ API を使用して、商品が実店舗で販売されていることを示します。
Content API for Shopping から移行する場合は、広告在庫管理を移行するをご覧ください。
ローカル商品に店舗情報を追加する手順は次のとおりです。
ビジネスを Merchant Center に接続する
Google にローカル商品を掲載するには、ビジネス プロフィールと販売アカウントが必要です。
ローカル商品リスティングのアカウントを設定し、ローカル在庫のアカウントを設定します。
アカウントを設定したら、ビジネス プロフィールと Merchant Center アカウントをリンクします。
無料ローカル リスティングに登録する
ビジネス プロフィールを Merchant Center アカウントにリンクすると、無料ローカル リスティングに登録できます。無料リスティングに関するポリシーを遵守してください。
無料ローカル リスティングに参加すると、Google サービス全体で、店舗内の商品が無料リスティングに表示されるようになります。
ローカル商品があることを確認する
ローカル在庫を商品に挿入する前に、ローカル(店舗)の掲載先(マーケティング方法とも呼ばれます)をターゲットとする商品があることを確認する必要があります。たとえば、ローカル在庫広告や無料ローカル リスティングはローカル マーケティング方法です。掲載先について詳しくは、マーケティング方法をご覧ください。
商品のローカルの掲載先は、Destinations を使用してデータソース レベルで定義するか、ProductAttributes(includedDestinations など)を使用して product レベルで定義します。
店舗情報を挿入する
Merchant Center アカウントにローカル商品を追加したら、storeCode や availability などの店頭情報と、price などのオプション情報を指定する必要があります。指定できるフィールドの詳細については、ローカル在庫データの仕様をご覧ください。
次の例では、localInventories.insert メソッドを使用して商品の店舗情報を追加しています。
POST https://merchantapi.googleapis.com/inventories/v1/accounts/{ACCOUNT_ID}/products/{en~US~SKU12345}/localInventories:insert
{
"storeCode": "123456",
"localInventoryAttributes": {
"price": {
"amountMicros": "33450000",
"currencyCode": "USD"
},
"availability": "OUT_OF_STOCK"
}
}
次のコードサンプルは、商品の店舗内情報を追加する方法を示しています。
Java
import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.inventories.v1.InsertLocalInventoryRequest;
import com.google.shopping.merchant.inventories.v1.LocalInventory;
import com.google.shopping.merchant.inventories.v1.LocalInventoryAttributes;
import com.google.shopping.merchant.inventories.v1.LocalInventoryAttributes.Availability;
import com.google.shopping.merchant.inventories.v1.LocalInventoryServiceClient;
import com.google.shopping.merchant.inventories.v1.LocalInventoryServiceSettings;
import com.google.shopping.type.Price;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;
/** This class demonstrates how to insert a Local inventory for a given product */
public class InsertLocalInventorySample {
private static String getParent(String accountId, String productId) {
return String.format("accounts/%s/products/%s", accountId, productId);
}
public static void insertLocalInventory(Config config, String productId, String storeCode)
throws Exception {
GoogleCredentials credential = new Authenticator().authenticate();
LocalInventoryServiceSettings localInventoryServiceSettings =
LocalInventoryServiceSettings.newBuilder()
.setCredentialsProvider(FixedCredentialsProvider.create(credential))
.build();
String parent = getParent(config.getAccountId().toString(), productId);
try (LocalInventoryServiceClient localInventoryServiceClient =
LocalInventoryServiceClient.create(localInventoryServiceSettings)) {
Price price = Price.newBuilder().setAmountMicros(33_450_000).setCurrencyCode("USD").build();
InsertLocalInventoryRequest request =
InsertLocalInventoryRequest.newBuilder()
.setParent(parent)
.setLocalInventory(
LocalInventory.newBuilder()
.setStoreCode(storeCode)
.setLocalInventoryAttributes(
LocalInventoryAttributes.newBuilder()
.setAvailability(Availability.OUT_OF_STOCK)
.setPrice(price)
.build())
.build())
.build();
System.out.println("Sending insert LocalInventory request");
LocalInventory response = localInventoryServiceClient.insertLocalInventory(request);
System.out.println("Inserted LocalInventory Name below");
System.out.println(response.getName());
} catch (Exception e) {
System.out.println(e);
}
}
public static void main(String[] args) throws Exception {
Config config = Config.load();
// An ID assigned to a product by Google. In the format
// contentLanguage~feedLabel~offerId
String productId = "en~label~1111111111";
// The code uniquely identifying each store.
String storeCode = "Example1";
insertLocalInventory(config, productId, storeCode);
}
}
PHP
use Google\ApiCore\ApiException;
use Google\Shopping\Merchant\Inventories\V1\LocalInventory;
use Google\Shopping\Merchant\Inventories\V1\Client\LocalInventoryServiceClient;
use Google\Shopping\Merchant\Inventories\V1\InsertLocalInventoryRequest;
use Google\Shopping\Merchant\Inventories\V1\LocalInventoryAttributes;
use Google\Shopping\Merchant\Inventories\V1\LocalInventoryAttributes\Availability;
use Google\Shopping\Type\Price;
/**
* Class to insert a `LocalInventory` to a given product in your
* merchant account.
*
* Replaces the full `LocalInventory` resource if an entry with the same
* [`storeCode`]
* [google.shopping.merchant.inventories.v1beta.LocalInventory.storeCode]
* already exists for the product.
*
* It might take up to 30 minutes for the new or updated `LocalInventory`
* resource to appear in products.
*/
class InsertLocalInventory
{
// ENSURE you fill in the merchant account and product ID for the sample to
// work.
private const PARENT = 'accounts/[INSERT_ACCOUNT_HERE]/products/[INSERT_PRODUCT_HERE]';
// ENSURE you fill in store code for the sample to work.
private const LOCAL_INVENTORY_STORE_CODE = 'INSERT_STORE_CODE_HERE';
/**
* Inserts a local inventory underneath the parent product.
*
* @param string $parent The account and product where this inventory will be inserted.
* Format: `accounts/{account}/products/{product}`
* @param string $localInventoryRegion
* ID of the region for this
* `LocalInventory` resource. See the [Local availability and
* pricing](https://support.google.com/merchants/answer/9698880) for more details.
*/
public function insertLocalInventorySample(
string $parent,
string $localInventoryStoreCode
): 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.
$localInventoryServiceClient = new LocalInventoryServiceClient($options);
// Creates a price object.
$price = new Price(
[
'currency_code' => "USD",
'amount_micros' => 33450000,
]
);
// Creates a new local inventory object.
$localInventory = (new LocalInventory())
->setStoreCode($localInventoryStoreCode)
->setLocalInventoryAttributes((new LocalInventoryAttributes())
->setAvailability(Availability::IN_STOCK)
->setPrice($price));
$request = (new InsertLocalInventoryRequest())
->setParent($parent)
->setLocalInventory($localInventory);
// Calls the API and catches and prints any network failures/errors.
try {
/** @var LocalInventory $response */
$response = $localInventoryServiceClient->insertLocalInventory($request);
printf('Response data: %s%s', $response->serializeToJsonString(), PHP_EOL);
} catch (ApiException $ex) {
printf('Call failed with message: %s%s', $ex->getMessage(), PHP_EOL);
}
}
/**
* Helper to execute the sample.
*/
public function callSample(): void
{
// Makes the call to insert the local inventory to the parent product
// for the given region.
$this->insertLocalInventorySample($this::PARENT, $this::LOCAL_INVENTORY_STORE_CODE);
}
}
$sample = new InsertLocalInventory();
$sample->callSample();
Python
from examples.authentication import configuration
from examples.authentication import generate_user_credentials
from google.shopping import merchant_inventories_v1
from google.shopping.merchant_inventories_v1.types import LocalInventoryAttributes
# ENSURE you fill in product ID and store code for the sample to
# work.
_ACCOUNT = configuration.Configuration().read_merchant_info()
# ENSURE you fill in product ID for the sample to work.
_PRODUCT = "INSERT_PRODUCT_HERE"
_PARENT = f"accounts/{_ACCOUNT}/products/{_PRODUCT}"
# ENSURE you fill in store code for the sample to work.
_STORE_CODE = "INSERT_STORE_CODE_HERE"
def insert_local_inventory():
"""Inserts a `LocalInventory` to a given product.
Replaces the full `LocalInventory` resource if an entry with the same
`region` already exists for the product.
It might take up to 30 minutes for the new or updated `LocalInventory`
resource to appear in products.
"""
# Gets OAuth Credentials.
credentials = generate_user_credentials.main()
# Creates a client.
client = merchant_inventories_v1.LocalInventoryServiceClient(
credentials=credentials
)
# Creates a Local inventory and populate its attributes.
local_inventory = merchant_inventories_v1.LocalInventory()
local_inventory.store_code = _STORE_CODE
local_inventory.local_inventory_attributes.availability = (
LocalInventoryAttributes.Availability.IN_STOCK
)
local_inventory.local_inventory_attributes.price = {
"currency_code": "USD",
"amount_micros": 33450000,
}
# Creates the request.
request = merchant_inventories_v1.InsertLocalInventoryRequest(
parent=_PARENT,
local_inventory=local_inventory,
)
# Makes the request and catch and print any error messages.
try:
response = client.insert_local_inventory(request=request)
print("Insert successful")
print(response)
except RuntimeError as e:
print("Insert failed")
print(e)
if __name__ == "__main__":
insert_local_inventory()
cURL
curl --location
'https://merchantapi.googleapis.com/inventories/v1/accounts/{ACCOUNT_ID}/products/{en~US~SKU12345}/localInventories:insert' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {API_TOKEN}' \
--data '{
"storeCode": "123456",
"localInventoryAttributes": {
"price": {
"amountMicros": "33450000",
"currencyCode": "USD"
},
"availability": "OUT_OF_STOCK"
}
}'
呼び出しが成功すると、指定した値を含む新しく作成された LocalInventory リソースが返されますが、最終的な在庫データを完全に表しているとは限りません。新しい LocalInventory がプロダクトに表示されるまでに、最長で 30 分ほどかかることがあります。