إنشاء مصدر بيانات المنتجات الأساسي لاسترداد الملفات

نموذج رمز Merchant API لإنشاء مصدر بيانات المنتجات الأساسي الذي يستخدِم ميزة "الحصول على الملفات"

JavaPHPPython
// 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 bundle.
            .setChannel(PrimaryProductDataSource.Channel.ONLINE_PRODUCTS)
            .addCountries("GB")
            // Wildcard feeds are not possible for file feeds, so `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
/**
 * 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 bundle.
                ->setChannel(PrimaryProductDataSource\Channel::ONLINE_PRODUCTS)
                ->setCountries(['GB'])
                // Wildcard feeds are not possible for file feeds, so `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();
# -*- 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"]
  # Wildcard feeds are not possible for file feeds, so `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 bundle.
  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()