Merchant API は、ビジネスニーズに沿った商品関連情報を提供するために、複数の種類のデータソースと入力方法をサポートしています。データソースにはさまざまな種類のデータを含めることができます。
- 商品
- インベントリ
- プロモーション
- 件のレビュー
データソースは、次のようないくつかの方法で構成できます。
- API 呼び出し
- ファイルのアップロード
- 自動給紙
データソース サブ API で管理可能なデータソース タイプ(商品やプロモーションなど)を、複数のサポートされている入力方法(API、ファイル アップロード、ファイル取得)と組み合わせることができます。たとえば、メインの商品データソースは次のいずれかになります。
- API フィード
- フェッチされたファイル フィード
- アップロードしたファイル フィード
- 自動フィード
このガイドでは、さまざまな種類のデータと入力方法を使用してデータソースを管理する例を示します。
特記事項
一部のデータソース タイプでは、次の特別な考慮事項を考慮してください。
- 読み取り専用データソース: データソース サブ API を介して読み取り専用になるデータソース タイプもあります。つまり、この API を使用して一覧表示や詳細の表示はできますが、作成、更新、削除はできません。たとえば、次のようなものがあります。
- Merchant Center の UI で直接管理される商品を含むデータソース(入力タイプ UI)。
- 自動フィード(入力タイプ AUTOFEED)。自動フィード自体は Data sources サブ API 内で読み取り専用ですが、Accounts サブ API のautofeedSettingsメソッドを使用して、アカウントの自動フィード機能を有効または無効にできます。詳細については、自動フィード設定を構成するセクションをご覧ください。
 
- Merchant Center の UI で直接管理される商品を含むデータソース(入力タイプ 
- フィードルール: データソース サブ API は、主に補助データソースをメイン データソースにリンクするためのデフォルトのフィードルールをサポートしています。この API では、複雑なカスタムルールの作成と管理は直接サポートされていません。デフォルトのルール内で補助データソースの順序を管理して、メインソースと補助ソースの属性を結合する順序を指定できます。
ファイル取得のスケジュール設定を使用してローカル在庫データソースを設定する
スケジュールに沿って指定した URL からファイルを自動的に取得するローカル在庫データソースを作成できます。リージョン インベントリの同様のデータソースを作成するには、リクエスト本文で localInventoryDataSource フィールドを regionalInventoryDataSource に置き換えます。
データソースを作成するには、dataSources.create メソッドを使用し、fetchSettings が構成された fileInput オブジェクトを指定します。
POST https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources
{
  "displayName": "My Scheduled Local Inventory Feed",
  "localInventoryDataSource": {
    "feedLabel": "US_Stores",
    "contentLanguage": "en"
  },
  "fileInput": {
    "fetchSettings": {
      "enabled": true,
      "timeOfDay": {
        "hours": 23
      },
      "timeZone": "America/New_York",
      "frequency": "FREQUENCY_DAILY",
      "fetchUri": "https://www.example.com/inventory/local_inventory_feed.csv"
    }
  }
}
リクエストが成功すると、作成された DataSource リソースが返されます。
{
  "name": "accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}",
  "dataSourceId": "{DATASOURCE_ID}",
  "displayName": "My Scheduled Local Inventory Feed",
  "localInventoryDataSource": {
    "feedLabel": "US_Stores",
    "contentLanguage": "en"
  },
  "input": "FILE",
  "fileInput": {
    "fetchSettings": {
      "enabled": true,
      "timeOfDay": {
        "hours": 23
      },
      "timeZone": "America/New_York",
      "frequency": "FREQUENCY_DAILY",
      "fetchUri": "https://www.example.com/inventory/local_inventory_feed.csv"
    },
    "fileInputType": "FETCH"
  }
}
次のコードサンプルは、スケジュールされた取得でローカル在庫データソースを作成する方法を示しています。
Java
import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.datasources.v1.CreateDataSourceRequest;
import com.google.shopping.merchant.datasources.v1.DataSource;
import com.google.shopping.merchant.datasources.v1.DataSourcesServiceClient;
import com.google.shopping.merchant.datasources.v1.DataSourcesServiceSettings;
import com.google.shopping.merchant.datasources.v1.FileInput;
import com.google.shopping.merchant.datasources.v1.LocalInventoryDataSource;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;
/** This class demonstrates how to create a local inventory datasource */
public class CreateFileLocalInventoryDataSourceSample {
  private static String getParent(String merchantId) {
    return String.format("accounts/%s", merchantId);
  }
  private static FileInput setFileInput() {
    // If FetchSettings are not set, then this will be an `UPLOAD` file type
    // that you must manually upload via the Merchant Center UI.
    return FileInput.newBuilder()
        // FileName is required for `UPLOAD` fileInput type.
        .setFileName("British T-shirts Local Inventory Data")
        .build();
  }
  public static String createDataSource(Config config, String displayName, FileInput fileInput)
      throws Exception {
    GoogleCredentials credential = new Authenticator().authenticate();
    DataSourcesServiceSettings dataSourcesServiceSettings =
        DataSourcesServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();
    String parent = getParent(config.getAccountId().toString());
    // LocalInventoryDataSources can only be created for a specific `feedLabel` and
    // `contentLanguage` combination.
    LocalInventoryDataSource localInventoryDataSource =
        LocalInventoryDataSource.newBuilder().setContentLanguage("en").setFeedLabel("GB").build();
    try (DataSourcesServiceClient dataSourcesServiceClient =
        DataSourcesServiceClient.create(dataSourcesServiceSettings)) {
      CreateDataSourceRequest request =
          CreateDataSourceRequest.newBuilder()
              .setParent(parent)
              .setDataSource(
                  DataSource.newBuilder()
                      .setDisplayName(displayName)
                      .setLocalInventoryDataSource(localInventoryDataSource)
                      .setFileInput(fileInput)
                      .build())
              .build();
      System.out.println("Sending Create Local Inventory DataSource request");
      DataSource response = dataSourcesServiceClient.createDataSource(request);
      System.out.println("Inserted DataSource Name below");
      System.out.println(response.getName());
      return response.getName();
    } catch (Exception e) {
      System.out.println(e);
      System.exit(1);
      return null;
    }
  }
  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    // The displayed datasource name in the Merchant Center UI.
    String displayName = "British Local Inventory File";
    // The file input data that this datasource will receive.
    FileInput fileInput = setFileInput();
    createDataSource(config, displayName, fileInput);
  }
}
PHP
use Google\ApiCore\ApiException;
use Google\Shopping\Merchant\DataSources\V1\Client\DataSourcesServiceClient;
use Google\Shopping\Merchant\DataSources\V1\CreateDataSourceRequest;
use Google\Shopping\Merchant\DataSources\V1\DataSource;
use Google\Shopping\Merchant\DataSources\V1\FileInput;
use Google\Shopping\Merchant\DataSources\V1\LocalInventoryDataSource;
/**
 * This class demonstrates how to create a local inventory datasource with a 
 * file input.
 */
class CreateFileLocalInventoryDataSourceSample
{
    private static function getFileInput(): FileInput
    {
        // If FetchSettings is not set, then this will be an `UPLOAD` file type
        // that you must manually upload via the Merchant Center UI.
        return (new FileInput())
            // FileName is required for `UPLOAD` fileInput type.
            ->setFileName('British T-shirts Local Inventory Data');
    }
    public function createDataSource(string $merchantId, string $displayName, FileInput $fileInput): 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.
        $dataSourcesServiceClient = new DataSourcesServiceClient($options);
        $parent = sprintf('accounts/%s', $merchantId);
        // LocalInventoryDataSources can only be created for a specific `feedLabel` and
        // `contentLanguage` combination.
        $localInventoryDataSource =
            (new LocalInventoryDataSource())
                ->setContentLanguage('en')
                ->setFeedLabel('GB');
        try {
            // Prepare the request message.
            $request = (new CreateDataSourceRequest())
                ->setParent($parent)
                ->setDataSource(
                    (new DataSource())
                        ->setDisplayName($displayName)
                        ->setLocalInventoryDataSource($localInventoryDataSource)
                        ->setFileInput($fileInput)
                );
            print('Sending Create Local Inventory DataSource request' . PHP_EOL);
            $response = $dataSourcesServiceClient->createDataSource($request);
            print('Inserted DataSource Name below' . PHP_EOL);
            print($response->getName() . PHP_EOL);
        } catch (ApiException $ex) {
            printf('Call failed with message: %s' . PHP_EOL, $ex->getMessage());
        }
    }
    // Helper to execute the sample.
    function callSample(): void
    {
        $config = Config::generateConfig();
        // The Merchant Center Account ID.
        $merchantId = $config['accountId'];
        // The displayed datasource name in the Merchant Center UI.
        $displayName = 'British Primary Inventory File';
        $fileInput = self::getFileInput();
        $this->createDataSource($merchantId, $displayName, $fileInput);
    }
}
$sample = new CreateFileLocalInventoryDataSourceSample();
$sample->callSample();
Python
from examples.authentication import configuration
from examples.authentication import generate_user_credentials
from google.shopping.merchant_datasources_v1 import CreateDataSourceRequest
from google.shopping.merchant_datasources_v1 import DataSource
from google.shopping.merchant_datasources_v1 import DataSourcesServiceClient
from google.shopping.merchant_datasources_v1 import FileInput
from google.shopping.merchant_datasources_v1 import LocalInventoryDataSource
_ACCOUNT = configuration.Configuration().read_merchant_info()
_PARENT = f"accounts/{_ACCOUNT}"
def create_file_local_inventory_data_source():
  """Creates a `DataSource` resource."""
  # Gets OAuth Credentials.
  credentials = generate_user_credentials.main()
  # Creates a client.
  client = DataSourcesServiceClient(credentials=credentials)
  # If FetchSettings are not set, then this will be an `UPLOAD` file type
  # that you must manually upload via the Merchant Center UI or via SFTP.
  file_input = FileInput()
  file_input.file_name = "British T-shirts Local Inventory Data.txt"
  # Creates a SupplementalProductDataSource.
  local_inventory_datasource = LocalInventoryDataSource()
  # LocalInventoryDataSources can only be created for a specific
  # `feedLabel` and `contentLanguage` combination.
  local_inventory_datasource.content_language = "en"
  local_inventory_datasource.feed_label = "GB"
  # Creates a DataSource and populates its attributes.
  data_source = DataSource()
  data_source.display_name = "Example Local Inventory DataSource"
  data_source.local_inventory_data_source = local_inventory_datasource
  data_source.file_input = file_input
  # Creates the request.
  request = CreateDataSourceRequest(parent=_PARENT, data_source=data_source)
  # Makes the request and catches and prints any error messages.
  try:
    response = client.create_data_source(request=request)
    print(f"DataSource successfully created: {response}")
  except RuntimeError as e:
    print("DataSource creation failed")
    print(e)
if __name__ == "__main__":
  create_file_local_inventory_data_source()
cURL
curl -X POST \
"https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources" \
-H "Authorization: Bearer <API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
      "displayName": "My Scheduled Local Inventory Feed",
      "localInventoryDataSource": {
        "feedLabel": "US_Stores",
        "contentLanguage": "en"
      },
      "fileInput": {
        "fetchSettings": {
          "enabled": true,
          "timeOfDay": {
            "hours": 23
          },
          "timeZone": "America/New_York",
          "frequency": "FREQUENCY_DAILY",
          "fetchUri": "https://www.example.com/inventory/local_inventory_feed.csv"
        }
      }
    }'
API を使用してプロモーション データソースを確立する
プロモーション データソースを使用すると、商品のプロモーション特典を送信できます。プロモーション用の API ベースのデータソースを作成すると、ファイルを管理することなくプロモーション データを直接送信できます。
dataSources.create メソッドを使用して、promotionDataSource を指定します。API フィードの場合は、fileInput フィールドを省略します。
POST https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources
{
  "displayName": "My API Promotions Source",
  "promotionDataSource": {
    "targetCountry": "US",
    "contentLanguage": "en"
  }
}
リクエストが成功すると、新しく作成された DataSource リソースが返されます。
{
  "name": "accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}",
  "dataSourceId": "{DATASOURCE_ID}",
  "displayName": "My API Promotions Source",
  "promotionDataSource": {
    "targetCountry": "US",
    "contentLanguage": "en"
  },
  "input": "API"
}
次のコードサンプルは、API ベースのプロモーション データソースを作成する方法を示しています。
Java
import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.datasources.v1.CreateDataSourceRequest;
import com.google.shopping.merchant.datasources.v1.DataSource;
import com.google.shopping.merchant.datasources.v1.DataSourcesServiceClient;
import com.google.shopping.merchant.datasources.v1.DataSourcesServiceSettings;
import com.google.shopping.merchant.datasources.v1.PromotionDataSource;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;
/** This class demonstrates how to create a promotion datasource. */
public class CreatePromotionDataSourceSample {
  private static String getParent(String merchantId) {
    return String.format("accounts/%s", merchantId);
  }
  public static String createDataSource(Config config, String displayName) throws Exception {
    GoogleCredentials credential = new Authenticator().authenticate();
    DataSourcesServiceSettings dataSourcesServiceSettings =
        DataSourcesServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();
    String parent = getParent(config.getAccountId().toString());
    try (DataSourcesServiceClient dataSourcesServiceClient =
        DataSourcesServiceClient.create(dataSourcesServiceSettings)) {
      CreateDataSourceRequest request =
          CreateDataSourceRequest.newBuilder()
              .setParent(parent)
              .setDataSource(
                  DataSource.newBuilder()
                      .setDisplayName(displayName)
                      // PromotionDataSources
                      // can only be created for a specific `targetCountry` and `contentLanguage`
                      // combination.
                      .setPromotionDataSource(
                          PromotionDataSource.newBuilder()
                              .setContentLanguage("en")
                              .setTargetCountry("GB")
                              .build())
                      .build())
              .build();
      System.out.println("Sending Create Promotion DataSource request");
      DataSource response = dataSourcesServiceClient.createDataSource(request);
      System.out.println("Inserted DataSource Name below");
      System.out.println(response.getName());
      return response.getName();
    } catch (Exception e) {
      System.out.println(e);
      System.exit(1);
      return null;
    }
  }
  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    // The displayed datasource name in the Merchant Center UI.
    String displayName = "British Promotions";
    createDataSource(config, displayName);
  }
}
PHP
use Google\ApiCore\ApiException;
use Google\Shopping\Merchant\DataSources\V1\Client\DataSourcesServiceClient;
use Google\Shopping\Merchant\DataSources\V1\CreateDataSourceRequest;
use Google\Shopping\Merchant\DataSources\V1\DataSource;
use Google\Shopping\Merchant\DataSources\V1\PromotionDataSource;
/**
 * This class demonstrates how to create a promotion datasource.
 */
class CreatePromotionDataSource
{
    /**
     * Creates a new PromotionDataSource.
     *
     * @param int    $merchantId The Merchant Center account ID.
     * @param string $displayName The displayed datasource name in the Merchant Center UI.
     * @return string The name of the newly created PromotionDataSource.
     */
    function createPromotionDataSourceSample(int $merchantId, string $displayName): string
    {
        // 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 data source.
        $dataSource = (new DataSource())
            ->setDisplayName($displayName)
            ->setPromotionDataSource(
                (new PromotionDataSource())
                    ->setContentLanguage('en')
                    ->setTargetCountry('GB')
            );
        // Creates the request.
        $request = (new CreateDataSourceRequest())
            ->setParent($parent)
            ->setDataSource($dataSource);
        // Sends the request to the API.
        try {
            print('Sending Create Promotion DataSource request' . PHP_EOL);
            $response = $dataSourcesServiceClient->createDataSource($request);
            print('Inserted DataSource Name below' . PHP_EOL);
            print($response->getName() . PHP_EOL);
            return $response->getName();
        } catch (ApiException $ex) {
            printf('Call failed with message: %s' . PHP_EOL, $ex->getMessage());
            return '';
        }
    }
    // Helper to execute the sample.
    public function callSample(): void
    {
        $config = Config::generateConfig();
        // The Merchant Center Account ID.
        $merchantId = $config['accountId'];
        // The displayed datasource name in the Merchant Center UI.
        $displayName = 'British Promotions';
        $this->createPromotionDataSourceSample($merchantId, $displayName);
    }
}
$sample = new CreatePromotionDataSource();
$sample->callSample();
Python
from examples.authentication import configuration
from examples.authentication import generate_user_credentials
from google.shopping import merchant_datasources_v1
_ACCOUNT = configuration.Configuration().read_merchant_info()
_PARENT = f"accounts/{_ACCOUNT}"
def create_promotion_data_source():
  """Creates a `DataSource` resource."""
  # Gets OAuth Credentials.
  credentials = generate_user_credentials.main()
  # Creates a client.
  client = merchant_datasources_v1.DataSourcesServiceClient(
      credentials=credentials
  )
  # Creates a PromotionDataSource.
  # PromotionDataSources
  # can only be created for a specific `targetCountry` and `contentLanguage`
  # combination.
  promotion_datasource = merchant_datasources_v1.PromotionDataSource()
  promotion_datasource.target_country = "CH"
  promotion_datasource.content_language = "fr"
  # Creates a DataSource and populates its attributes.
  data_source = merchant_datasources_v1.DataSource()
  data_source.display_name = "Example DataSource"
  data_source.promotion_data_source = promotion_datasource
  # Creates the request.
  request = merchant_datasources_v1.CreateDataSourceRequest(
      parent=_PARENT, data_source=data_source
  )
  # Makes the request and catches and prints any error messages.
  try:
    response = client.create_data_source(request=request)
    print(f"DataSource successfully created: {response}")
  except RuntimeError as e:
    print("DataSource creation failed")
    print(e)
if __name__ == "__main__":
  create_promotion_data_source()
cURL
curl -X POST \
"https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources" \
-H "Authorization: Bearer <API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
      "displayName": "My API Promotions Source",
      "promotionDataSource": {
        "targetCountry": "US",
        "contentLanguage": "en"
      }
    }'
ファイル アップロード用の商品レビュー データソースを作成する
商品レビュー データソースを使用して、商品の顧客レビューを送信します。商品レビュー用に手動でアップロードされたファイルを受け入れるようにデータソースを設定できます。
dataSources.create メソッドを使用して productReviewDataSource を指定し、指定された fileName を含む fileInput を含めます。
POST https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources
{
  "displayName": "My Product Reviews Upload Feed",
  "productReviewDataSource": {},
  "fileInput": {
    "fileName": "product_reviews.xml"
  }
}
リクエストが成功すると、新しく作成された DataSource リソースが返されます。
{
  "name": "accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}",
  "dataSourceId": "{DATASOURCE_ID}",
  "displayName": "My Product Reviews Upload Feed",
  "productReviewDataSource": {},
  "input": "FILE",
  "fileInput": {
    "fileName": "product_reviews.xml",
    "fileInputType": "UPLOAD"
  }
}
販売者レビューのデータソースを作成するには、同様のリクエストを使用し、productReviewDataSource オブジェクトを空の merchantReviewDataSource オブジェクトに置き換えます。
次のコードサンプルは、手動でファイルをアップロードするための商品レビュー データソースを作成する方法を示しています。
Java
import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.datasources.v1.CreateDataSourceRequest;
import com.google.shopping.merchant.datasources.v1.DataSource;
import com.google.shopping.merchant.datasources.v1.DataSourcesServiceClient;
import com.google.shopping.merchant.datasources.v1.DataSourcesServiceSettings;
import com.google.shopping.merchant.datasources.v1.ProductReviewDataSource;
import java.io.IOException;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;
/** This class demonstrates how to create a product review data source. */
public class CreateProductReviewsDataSourceSample {
  private static void createProductReviewsDataSource(String accountId) throws IOException {
    GoogleCredentials credential = new Authenticator().authenticate();
    DataSourcesServiceSettings dataSourcesServiceSettings =
        DataSourcesServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();
    try (DataSourcesServiceClient dataSourcesServiceClient =
        DataSourcesServiceClient.create(dataSourcesServiceSettings)) {
      CreateDataSourceRequest request =
          CreateDataSourceRequest.newBuilder()
              .setParent(String.format("accounts/%s", accountId))
              .setDataSource(
                  DataSource.newBuilder()
                      .setDisplayName("Product Reviews Data Source")
                      .setProductReviewDataSource(ProductReviewDataSource.newBuilder().build())
                      .build())
              .build();
      System.out.println("Creating product reviews data source...");
      DataSource dataSource = dataSourcesServiceClient.createDataSource(request);
      System.out.println(
          String.format("Datasource created successfully: %s", dataSource.getName()));
    } catch (Exception e) {
      System.out.println(e);
      System.exit(1);
    }
  }
  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    createProductReviewsDataSource(config.getAccountId().toString());
  }
}
cURL
curl -X POST \
"https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources" \
-H "Authorization: Bearer <API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
      "displayName": "My Product Reviews Upload Feed",
      "productReviewDataSource": {},
      "fileInput": {
        "fileName": "product_reviews.xml"
      }
    }'
自動フィードの設定を行う
自動データソースは、ウェブサイトのコンテンツに基づいて商品データを自動的に作成します。自動フィード データソース自体はデータソース サブ API 内で読み取り専用ですが、アカウント サブ API の autofeedSettings.updateAutofeedSettings メソッドを使用して、アカウントの自動フィード機能を有効または無効にできます。
この例では、アカウントの Autofeed を介した商品クロールを有効にします。
PATCH https://merchantapi.googleapis.com/accounts/v1/accounts/{ACCOUNT_ID}/autofeedSettings?updateMask=enableProducts
{
  "name": "accounts/{ACCOUNT_ID}/autofeedSettings",
  "enableProducts": true
}
リクエストが成功すると、更新された AutofeedSettings リソースが返されます。
{
  "name": "accounts/{ACCOUNT_ID}/autofeedSettings",
  "enableProducts": true,
  "eligible": true
}
次のコードサンプルは、アカウントの自動フィード設定を有効にする方法を示しています。
Java
import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.protobuf.FieldMask;
import com.google.shopping.merchant.accounts.v1.AutofeedSettings;
import com.google.shopping.merchant.accounts.v1.AutofeedSettingsName;
import com.google.shopping.merchant.accounts.v1.AutofeedSettingsServiceClient;
import com.google.shopping.merchant.accounts.v1.AutofeedSettingsServiceSettings;
import com.google.shopping.merchant.accounts.v1.UpdateAutofeedSettingsRequest;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;
/** This class demonstrates how to update AutofeedSettings to be enabled. */
public class UpdateAutofeedSettingsSample {
  public static void updateAutofeedSettings(Config config) throws Exception {
    GoogleCredentials credential = new Authenticator().authenticate();
    AutofeedSettingsServiceSettings autofeedSettingsServiceSettings =
        AutofeedSettingsServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();
    // Creates AutofeedSettings name to identify AutofeedSettings.
    String name =
        AutofeedSettingsName.newBuilder()
            .setAccount(config.getAccountId().toString())
            .build()
            .toString();
    // Create AutofeedSettings with the updated fields.
    AutofeedSettings autofeedSettings = AutofeedSettings.newBuilder().setName(name).build();
    FieldMask fieldMask = FieldMask.newBuilder().addPaths("*").build();
    try (AutofeedSettingsServiceClient autofeedSettingsServiceClient =
        AutofeedSettingsServiceClient.create(autofeedSettingsServiceSettings)) {
      UpdateAutofeedSettingsRequest request =
          UpdateAutofeedSettingsRequest.newBuilder()
              .setAutofeedSettings(autofeedSettings)
              .setUpdateMask(fieldMask)
              .build();
      System.out.println("Sending Update AutofeedSettings request");
      AutofeedSettings response = autofeedSettingsServiceClient.updateAutofeedSettings(request);
      System.out.println("Updated AutofeedSettings 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();
    updateAutofeedSettings(config);
  }
}
PHP
use Google\ApiCore\ApiException;
use Google\Protobuf\FieldMask;
use Google\Shopping\Merchant\Accounts\V1\AutofeedSettings;
use Google\Shopping\Merchant\Accounts\V1\Client\AutofeedSettingsServiceClient;
use Google\Shopping\Merchant\Accounts\V1\UpdateAutofeedSettingsRequest;
/**
 * This class demonstrates how to update AutofeedSettings to be enabled.
 */
class UpdateAutofeedSettingsSample
{
    /**
     * Update AutofeedSettings to be enabled.
     *
     * @param array $config The configuration data for authentication and account ID.
     * @return void
     */
    public static function updateAutofeedSettingsSample(array $config): void
    {
        // Get OAuth credentials.
        $credentials = Authentication::useServiceAccountOrTokenFile();
        // Create options for the client.
        $options = ['credentials' => $credentials];
        // Create a client.
        $autofeedSettingsServiceClient = new AutofeedSettingsServiceClient($options);
        // Create the AutofeedSettings name.
        $name = "accounts/" . $config['accountId'] . "/autofeedSettings";
        // Create AutofeedSettings object.
        $autofeedSettings = (new AutofeedSettings())
            ->setName($name);
        // Create FieldMask.
        $fieldMask = (new FieldMask())
            ->setPaths(["*"]);
        // Call the API.
        try {
            // Prepare the request.
            $request = (new UpdateAutofeedSettingsRequest())
                ->setAutofeedSettings($autofeedSettings)
                ->setUpdateMask($fieldMask);
            print "Sending Update AutofeedSettings request\n";
            $response = $autofeedSettingsServiceClient->updateAutofeedSettings($request);
            print "Updated AutofeedSettings Name below\n";
            print $response->getName() . "\n";
        } catch (ApiException $e) {
            print $e->getMessage();
        }
    }
    /**
     * Helper to execute the sample.
     *
     * @return void
     */
    public function callSample(): void
    {
        $config = Config::generateConfig();
        self::updateAutofeedSettingsSample($config);
    }
}
// Run the script
$sample = new UpdateAutofeedSettingsSample();
$sample->callSample();
Python
from examples.authentication import configuration
from examples.authentication import generate_user_credentials
from google.protobuf import field_mask_pb2
from google.shopping.merchant_accounts_v1 import AutofeedSettings
from google.shopping.merchant_accounts_v1 import AutofeedSettingsServiceClient
from google.shopping.merchant_accounts_v1 import UpdateAutofeedSettingsRequest
_ACCOUNT = configuration.Configuration().read_merchant_info()
def update_autofeed_settings():
  """Updates the AutofeedSettings of a Merchant Center account."""
  # Gets OAuth Credentials.
  credentials = generate_user_credentials.main()
  # Creates a client.
  client = AutofeedSettingsServiceClient(credentials=credentials)
  # Creates name to identify the AutofeedSettings.
  name = "accounts/" + _ACCOUNT + "/autofeedSettings"
  # Create AutofeedSettings with the updated fields.
  autofeed_settings = AutofeedSettings(name=name, enable_products=False)
  # Create the field mask.
  field_mask = field_mask_pb2.FieldMask(paths=["enable_products"])
  # Creates the request.
  request = UpdateAutofeedSettingsRequest(
      autofeed_settings=autofeed_settings, update_mask=field_mask
  )
  # Makes the request and catches and prints any error messages.
  try:
    response = client.update_autofeed_settings(request=request)
    print("Updated AutofeedSettings Name below")
    print(response.name)
  except RuntimeError as e:
    print("Update AutofeedSettings request failed")
    print(e)
if __name__ == "__main__":
  update_autofeed_settings()
cURL
curl -X PATCH \
"https://merchantapi.googleapis.com/accounts/v1/accounts/{ACCOUNT_ID}/autofeedSettings?updateMask=enableProducts" \
-H "Authorization: Bearer <API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
      "name": "accounts/{ACCOUNT_ID}/autofeedSettings",
      "enableProducts": true
    }'