Créer une source de données produit principale pour la récupération de fichiers

Exemple de code de l'API Merchant pour créer une source de données produit principale par récupération de fichier.

Java

// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package shopping.merchant.samples.datasources.v1beta;
import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.datasources.v1beta.CreateDataSourceRequest;
import com.google.shopping.merchant.datasources.v1beta.DataSource;
import com.google.shopping.merchant.datasources.v1beta.DataSourcesServiceClient;
import com.google.shopping.merchant.datasources.v1beta.DataSourcesServiceSettings;
import com.google.shopping.merchant.datasources.v1beta.FileInput;
import com.google.shopping.merchant.datasources.v1beta.FileInput.FetchSettings;
import com.google.shopping.merchant.datasources.v1beta.PrimaryProductDataSource;
import com.google.type.TimeOfDay;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to insert a File primary product datasource */
public class CreateFileFetchPrimaryProductDataSourceSample {

  private static String getParent(String merchantId) {
    return String.format("accounts/%s", merchantId);
  }

  private static FileInput setFileInput() {
    FetchSettings fetchSettings =
        FetchSettings.newBuilder()
            .setEnabled(true)
            // Note that the system only respects hours for the fetch schedule.
            .setTimeOfDay(TimeOfDay.newBuilder().setHours(22).build())
            .setTimeZone("Europe/London")
            .setFrequency(FetchSettings.Frequency.FREQUENCY_DAILY)
            .setFetchUri("https://example.file.com/products")
            .build();

    return FileInput.newBuilder().setFetchSettings(fetchSettings).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());

    // The type of data that this datasource will receive.
    PrimaryProductDataSource primaryProductDataSource =
        PrimaryProductDataSource.newBuilder()
            // Channel can be "ONLINE_PRODUCTS" or "LOCAL_PRODUCTS" or "PRODUCTS" .
            // While accepted, datasources with channel "products" currently cannot be used
            // with the Products sub-API.
            .setChannel(PrimaryProductDataSource.Channel.ONLINE_PRODUCTS)
            .addCountries("GB")
            // `contentLanguage` and `feedLabel` must be set.
            .setContentLanguage("en")
            .setFeedLabel("GB")
            .build();

    try (DataSourcesServiceClient dataSourcesServiceClient =
        DataSourcesServiceClient.create(dataSourcesServiceSettings)) {

      CreateDataSourceRequest request =
          CreateDataSourceRequest.newBuilder()
              .setParent(parent)
              .setDataSource(
                  DataSource.newBuilder()
                      .setDisplayName(displayName)
                      .setPrimaryProductDataSource(primaryProductDataSource)
                      .setFileInput(fileInput)
                      .build())
              .build();

      System.out.println("Sending Create File Fetch PrimaryProduct DataSource request");
      DataSource response = dataSourcesServiceClient.createDataSource(request);
      System.out.println("Created 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 File Fetch Primary Product Data";

    // The file input data that this datasource will receive.
    FileInput fileInput = setFileInput();

    createDataSource(config, displayName, fileInput);
  }
}

PHP

<?php
/**
 * Copyright 2024 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

require_once __DIR__ . '/../../../vendor/autoload.php';
require_once __DIR__ . '/../../Authentication/Authentication.php';
require_once __DIR__ . '/../../Authentication/Config.php';
use Google\ApiCore\ApiException;
use Google\Shopping\Merchant\DataSources\V1beta\Client\DataSourcesServiceClient;
use Google\Shopping\Merchant\DataSources\V1beta\CreateDataSourceRequest;
use Google\Shopping\Merchant\DataSources\V1beta\DataSource;
use Google\Shopping\Merchant\DataSources\V1beta\FileInput;
use Google\Shopping\Merchant\DataSources\V1beta\FileInput\FetchSettings;
use Google\Shopping\Merchant\DataSources\V1beta\PrimaryProductDataSource;
use Google\Type\TimeOfDay;

/**
 * This class demonstrates how to insert a primary product datasource with a
 * file input that is fetched from a URL.
 */
class CreateFileFetchPrimaryProductDataSourceSample
{

    private static function getFileInput(): FileInput
    {
        // If FetchSettings were not set, then this would be an `UPLOAD` file
        // type that you must manually upload via the Merchant Center UI.
        $fetchSettings =
            (new FetchSettings())
                ->setEnabled(true)
                // Note that the system only respects hours for the fetch schedule.
                ->setTimeOfDay((new TimeOfDay())->setHours(22))
                ->setTimeZone('Europe/London')
                ->setFrequency(FetchSettings\Frequency::FREQUENCY_DAILY)
                ->setFetchUri('https://example.file.com/products');

        // Creates the file input with the fetch settings
        return (new FileInput())->setFetchSettings($fetchSettings);
    }

    /**
     * Creates a new data source
     *
     * @param string $merchantId The Merchant Center Account ID
     * @param string $displayName The displayed data source name in the Merchant Center UI
     * @param FileInput $fileInput The file input data that this datasource will receive
     * @return string The name of the newly created data source
     */
    public static function createDataSource(string $merchantId, string $displayName, FileInput $fileInput): 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);

        // The account to create the data source for
        $parent = sprintf('accounts/%s', $merchantId);

        // The type of data that this datasource will receive.
        $primaryProductDataSource =
            (new PrimaryProductDataSource())
                // Channel can be "ONLINE_PRODUCTS" or "LOCAL_PRODUCTS" or "PRODUCTS" .
                // While accepted, datasources with channel "products" currently cannot be used
                // with the Products sub-API.
                ->setChannel(PrimaryProductDataSource\Channel::ONLINE_PRODUCTS)
                ->setCountries(['GB'])
                // `contentLanguage` and `feedLabel` must be set.
                ->setContentLanguage('en')
                ->setFeedLabel('GB');

        // Creates the data source
        try {
            // Creates the request
            $request =
                (new CreateDataSourceRequest())
                    ->setParent($parent)
                    ->setDataSource(
                        (new DataSource())
                            ->setDisplayName($displayName)
                            ->setPrimaryProductDataSource($primaryProductDataSource)
                            ->setFileInput($fileInput)
                    );

            print('Sending Create File Fetch PrimaryProduct DataSource request' . PHP_EOL);
            // Makes the request
            $response = $dataSourcesServiceClient->createDataSource($request);
            print('Created 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());
            exit(1);
        }
    }

    public static 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 File Fetch Primary Product Data';

        // The file input data that this datasource will receive.
        $fileInput = self::getFileInput();

        self::createDataSource($merchantId, $displayName, $fileInput);
    }
}

$sample = new CreateFileFetchPrimaryProductDataSourceSample();
$sample->callSample();

Python

# -*- coding: utf-8 -*-
# Copyright 2024 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""This class demonstrates how to insert a File primary product datasource."""

from examples.authentication import configuration
from examples.authentication import generate_user_credentials
from google.shopping.merchant_datasources_v1beta import CreateDataSourceRequest
from google.shopping.merchant_datasources_v1beta import DataSource
from google.shopping.merchant_datasources_v1beta import DataSourcesServiceClient
from google.shopping.merchant_datasources_v1beta import FileInput
from google.shopping.merchant_datasources_v1beta import PrimaryProductDataSource
from google.type import timeofday_pb2

_ACCOUNT = configuration.Configuration().read_merchant_info()
_PARENT = f"accounts/{_ACCOUNT}"


def create_file_with_upload_type_primary_product_data_source():
  """Creates a `DataSource` resource."""

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

  # Creates a client.
  client = DataSourcesServiceClient(credentials=credentials)

  # Creates fetch settings for our file input
  fetch_settings = FileInput.FetchSettings()
  fetch_settings.enabled = True
  # Note that the system only respects hours for the fetch schedule.
  fetch_settings.time_of_day = timeofday_pb2.TimeOfDay(hours=22)
  fetch_settings.time_zone = "Europe/London"
  fetch_settings.frequency = FileInput.FetchSettings.Frequency.FREQUENCY_DAILY
  fetch_settings.fetch_uri = "https://example.file.com/products"

  file_input = FileInput()
  file_input.fetch_settings = fetch_settings

  # Creates a PrimaryProductDataSource.
  primary_datasource = PrimaryProductDataSource()
  primary_datasource.countries = ["GB"]
  # `content_language` and `feed_label` must be set.
  primary_datasource.content_language = "en"
  primary_datasource.feed_label = "GB"
  # Channel can be "ONLINE_PRODUCTS" or "LOCAL_PRODUCTS" or "PRODUCTS" .
  # While accepted, datasources with channel "products" representing unified
  # products currently cannot be used with the Products sub-API.
  primary_datasource.channel = PrimaryProductDataSource.Channel.ONLINE_PRODUCTS

  # Creates a DataSource and populates its attributes.
  data_source = DataSource()
  data_source.display_name = "Example Primary DataSource"
  data_source.primary_product_data_source = primary_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_with_upload_type_primary_product_data_source()