隨時更新店內資訊

你可以使用 Merchant Inventories API,讓店內產品資訊保持最新狀態。包括更新 priceavailability,以及移除產品已停售的商店。

如果您是第三方供應商,可以使用 Merchant Inventories API 建立介面,讓商家更新店內產品的供應情形。

依商店更新價格和供應情形

使用 localInventories.insert 更新產品的店內資訊。

這個呼叫會取代完整的 LocalInventory 資源,因此請務必納入所有欄位。如需程式碼範例和更多詳細資訊,請參閱「在本地產品中新增店內資訊」。

查看現有商店

本節說明如何查看與產品或帳戶相關聯的商店。

依產品

使用 localInventories.list 即可列出帳戶中與特定 product 相關聯的所有本機廣告空間。這個呼叫會傳回完整的 LocalInventory 資源。使用 store_code 屬性來識別每個商店。

以下是可用於列出產品店面商品目錄的範例:

Java

  public static void listLocalInventories(Config config, String productId) throws Exception {
    GoogleCredentials credential = new Authenticator().authenticate();

    LocalInventoryServiceSettings localInventoryServiceSettings =
        LocalInventoryServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    String parent = getParent(config.getMerchantId().toString(), productId);

    try (LocalInventoryServiceClient localInventoryServiceClient =
        LocalInventoryServiceClient.create(localInventoryServiceSettings)) {

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

      System.out.println("Sending list Local inventory request:");
      ListLocalInventoriesPagedResponse response =
          localInventoryServiceClient.listLocalInventories(request);

      int count = 0;

      // Iterates over all rows in all pages and prints the Local inventory
      // in each row.
      for (LocalInventory element : response.iterateAll()) {
        System.out.println(element);
        count++;
      }
      System.out.print("The following count of elements were returned: ");
      System.out.println(count);
    } catch (Exception e) {
      System.out.println(e);
    }
  }

cURL

  curl --location
  'https://merchantapi.googleapis.com/inventories/v1beta/accounts/987654321/products/en~US~12345/localInventories' \
  --header 'Authorization: Bearer <API_TOKEN>'

PHP

class ListLocalInventories
{

    // 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]';

    /**
     * Lists all the local inventories of a given product.
     *
     * @param string $parent The `name` of the parent product to list `LocalInventory`
     *     resources for.
     *     Format: `accounts/{account}/products/{product}`
     */
    function listLocalInventoriesSample(string $parent): 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);

        // Calls the API and catches and prints any network failures/errors.
        try {
            // Page size is set to the default value. If you are returned more
            // responses than your page size, this code will automatically
            // re-call the service with the `pageToken` until all responses
            // are returned.
            $parameters = ['pageSize' => 25000];

            /** @var PagedListResponse $response */
            $response =
                $localInventoryServiceClient->listLocalInventories($parent, $parameters);

            /** @var LocalInventory $element */
            foreach ($response as $element) {
                printf('LocalInventory data: %s%s', $element->serializeToJsonString(), PHP_EOL);
            }
        } catch (ApiException $ex) {
            printf('Call failed with message: %s%s', $ex->getMessage(), PHP_EOL);
        }
    }

    // Helper to execute the sample.
    function callSample(): void
    {
        // Lists all the local inventories of the parent product.
        $this->listLocalInventoriesSample($this::PARENT);
    }
}

Python

from examples.authentication import generate_user_credentials
from google.shopping import merchant_inventories_v1beta

# ENSURE you fill in the merchant account and product ID for the sample to
# work.
_ACCOUNT = "[INSERT_ACCOUNT_HERE]"
_PRODUCT = "[INSERT_PRODUCT_HERE]"
_PARENT = f"accounts/{_ACCOUNT}/products/{_PRODUCT}"


def list_local_inventories():
  """Lists the `LocalInventory` resources for the given product.

  The response might contain fewer items than specified by
  `pageSize`. If `pageToken` was returned in previous request, it can be
  used to obtain additional results.

  `LocalInventory` resources are listed per product for a given account.
  """

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

  # Creates a client.
  client = merchant_inventories_v1beta.LocalInventoryServiceClient(
      credentials=credentials)

  # Creates the request.
  # Page size is set to the default value.
  request = merchant_inventories_v1beta.ListLocalInventoriesRequest(
      parent=_PARENT,
      page_size=25000
  )

  try:
    # Makes the request and catch and print any error messages.
    # If you are returned more responses than your page size, this code
    # will automatically re-call the service with the `pageToken` until all
    # responses are returned.
    page_result = client.list_local_inventories(request=request)

    # Print the response.
    for response in page_result:
      print(response)

  except Exception as e:
    print("List failed")
    print(e)

按照客戶篩選

您可以在商家檔案中,或透過 Google 我的商家 API,查看與帳戶相關聯的所有商店。這類資訊來自商家檔案,因此您無法使用 Merchant API 查看或管理帳戶層級的商店。

移除商店

以下說明如何移除不再販售產品的商店。

來自產品

如果某項產品已不再在特定商店販售,請從產品中移除該商店的當地商品目錄項目。你可以使用 localInventories.delete 從產品中移除特定店面商品目錄項目。

以下是可用於從產品中移除店面商品目錄項目的範例:

Java

  public static void deleteLocalInventory(Config config, String productId, String storeCode)
      throws Exception {
    GoogleCredentials credential = new Authenticator().authenticate();

    LocalInventoryServiceSettings localInventoryServiceSettings =
        LocalInventoryServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    String name =
        LocalInventoryName.newBuilder()
            .setAccount(config.getMerchantId().toString())
            .setProduct(productId)
            .setStoreCode(storeCode)
            .build()
            .toString();

    try (LocalInventoryServiceClient localInventoryServiceClient =
        LocalInventoryServiceClient.create(localInventoryServiceSettings)) {
      DeleteLocalInventoryRequest request =
          DeleteLocalInventoryRequest.newBuilder().setName(name).build();

      System.out.println("Sending deleteLocalInventory request");
      localInventoryServiceClient.deleteLocalInventory(request); // no response returned on success
      System.out.println(
          "Delete successful, note that it may take up to 30 minutes for the delete to update in"
              + " the system.");
    } catch (Exception e) {
      System.out.println(e);
    }
  }

cURL

  curl --location --request DELETE
  'https://merchantapi.googleapis.com/inventories/v1beta/accounts/987654321/products/en~US~12345/localInventories/123456' \
  --header 'Authorization: Bearer <API_TOKEN>'

PHP

class DeleteLocalInventory
{

    // ENSURE you fill in the merchant account, product, and region ID for the
    // sample to work.
    private const ACCOUNT = 'INSERT_ACCOUNT_ID_HERE';
    private const PRODUCT = 'INSERT_PRODUCT_ID_HERE';
    private const STORE_CODE = 'INSERT_STORE_CODE_HERE';

    /**
     * Deletes a specific local inventory of a given product.
     *
     * @param string $formattedName The name of the `LocalInventory` resource
     * to delete.
     *     Format: `accounts/{account}/products/{product}/localInventories/{store_code}`
     *     Please see {@see LocalInventoryServiceClient::localInventoryName()}
     *     for help formatting this field.
     */
    function deleteLocalInventorySample(string $formattedName): 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);

         // Calls the API and catches and prints any network failures/errors.
         try {
             $localInventoryServiceClient->deleteLocalInventory($formattedName);
             print 'Delete call completed successfully.' . PHP_EOL;
         } catch (ApiException $ex) {
             printf('Call failed with message: %s%s', $ex->getMessage(), PHP_EOL);
         }
    }

    /**
     * Helper to execute the sample.
     */
    function callSample(): void
    {
        // These variables are defined at the top of the file.
        $formattedName = LocalInventoryServiceClient::localInventoryName(
            $this::ACCOUNT,
            $this::PRODUCT,
            $this::STORE_CODE
        );

        // Deletes the specific local inventory of the parent product.
        $this->deleteLocalInventorySample($formattedName);
    }
}

Python

from examples.authentication import generate_user_credentials
from google.shopping import merchant_inventories_v1beta

# ENSURE you fill in the merchant account and product ID and store code
# for the sample to work.
_ACCOUNT = "[INSERT_ACCOUNT_HERE]"
_PRODUCT = "[INSERT_PRODUCT_HERE]"
_STORE_CODE = "[INSERT_STORE_CODE_HERE]"
_NAME = (f"accounts/{_ACCOUNT}/products/{_PRODUCT}/localInventories/"
         f"{_STORE_CODE}")


def delete_local_inventory():
  """Deletes the specified `LocalInventory` resource from the given product.

  It might take up to an hour for the `LocalInventory` to be deleted
  from the specific product. Once you have received a successful delete
  response, wait for that period before attempting a delete again.
  """

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

  # Creates a client.
  client = merchant_inventories_v1beta.LocalInventoryServiceClient(
      credentials=credentials)

  # Creates the request.
  request = merchant_inventories_v1beta.DeleteLocalInventoryRequest(name=_NAME)

  # Makes the request and catch and print any error messages.
  try:
    client.delete_local_inventory(request=request)
    print("Delete successful")
  except Exception as e:
    print("Delete failed")
    print(e)

這個呼叫只會移除指定商店的資訊,且只會從指定產品移除。

來自帳戶

你可以從商家檔案中移除不再銷售產品的商店,詳情請參閱「關閉或移除商家」。