Merchant API を使用して商品を確認する

商品レビューは、お客様のショッピング体験の重要な要素です 。こうした評価やレビューは、お客様が商品の情報を収集したり、購入を決定したりする際に役立ちます。商品レビューが好意的なものであれば、購入する可能性の高いお客様を販売者の商品ページに誘導できます。情報源には、販売者、レビュー情報集約システム、レビューサイト、Google ユーザーなどが含まれます。

このページでは、Merchant API を使用して商品レビューを管理する方法について説明します。

前提条件

Google では、お客様に特定の情報を提供していただく必要があります。次のものが必要です。

データソースを作成する

datasource.create メソッドを使用して、商品レビュー フィードを作成します。既存の販売者または商品レビュー フィードがある場合は、 を使用して accounts.dataSources.list accounts.dataSources.nameを取得します。作成または取得したデータソース名を、レビューごとにローカル データベースに保存します。リクエストの形式は次のとおりです。

POST https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources

この例は、一般的なリクエストとレスポンスを示しています。

リクエスト

POST https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources
{
  "displayName": "My API Data Source",
  "primaryProductDataSource": {}
}

レスポンス

{
  "name": "accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}",
  "dataSourceId": "{DATASOURCE_ID}",
  "displayName": "My API Data Source",
  "primaryProductDataSource": {},
  "input": "API"
}

詳しくは、 商品レビュー データソースを作成するをご覧ください。

商品レビューを作成する

accounts.productreviews.insert メソッドを使用して、商品レビューを作成または更新できます。accounts.productreviews.insert メソッドは、 productreview リソースとデータソース名を入力として受け取ります。成功した場合は、新規または更新された productreview を返します。商品レビューを作成するには、 次のものが必要です datasource.name

リクエストの形式:

POST https://merchantapi.googleapis.com/reviews/v1alpha/{parent=accounts/{ACCOUNT_ID}/}productReviews:insert

次のリクエストのサンプルは、商品レビューを作成する方法を示しています。

POST https://merchantapi.googleapis.com/reviews/v1alpha/accounts/{ACCOUNT_ID}/productReviews:insert?dataSource=accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}

  productReviewId = 'my_product_review'
  productReviewAttributes {
    aggregatorName = 'aggregator_name'
    subclientName = 'subclient_name'
    publisherName = 'publisher_name'
    publisherFavicon = 'https://www.google.com/favicon.ico'
    reviewerId = 'reviewer_id'
    reviewerIsAnonymous = false
    reviewerUsername = 'reviewer_username'
    reviewLanguage = 'en'
    reviewCountry = 'US'
    reviewTime = '2024-04-01T00:00:00Z'
    title = 'Incredible product'
    content = 'This is an incredible product.'
    pros = ['pro1', 'pro2']
    cons = ['con1', 'con2']
    reviewLink = {
      type = 'SINGLETON'
      link = 'https://www.google.com'
    }
    reviewerImageLinks = ['https://www.google.com/reviewer.png']
    minRating = 1
    maxRating = 10
    rating = 8.5
    productNames = ['product_name']
    productLinks = ['https://www.google.com/product']
    asins = ['asin1', 'asin2']
    gtins = ['gtin1', 'gtin2']
    mpns = ['mpn1', 'mpn2']
    skus = ['sku1', 'sku2']
    brands = ['brand1', 'brand2']
    isSpam = false
    collectionMethod = 'POST_FULFILLMENT'
    transactionId = 'transaction_id'
  }

商品レビューの作成後、レビューが反映されるまでに数分かかることがあります。

複数の商品レビューを非同期で挿入するために使用できるサンプルを次に示します。

Java

import com.google.api.core.ApiFuture;
import com.google.api.core.ApiFutureCallback;
import com.google.api.core.ApiFutures;
import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.common.util.concurrent.MoreExecutors;
import com.google.protobuf.Timestamp;
import com.google.shopping.merchant.reviews.v1alpha.InsertProductReviewRequest;
import com.google.shopping.merchant.reviews.v1alpha.ProductReview;
import com.google.shopping.merchant.reviews.v1alpha.ProductReviewAttributes;
import com.google.shopping.merchant.reviews.v1alpha.ProductReviewAttributes.ReviewLink;
import com.google.shopping.merchant.reviews.v1alpha.ProductReviewAttributes.ReviewLink.Type;
import com.google.shopping.merchant.reviews.v1alpha.ProductReviewsServiceClient;
import com.google.shopping.merchant.reviews.v1alpha.ProductReviewsServiceSettings;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to insert multiple product reviews asynchronously. */
public class InsertProductReviewsAsyncSample {

  private static String generateRandomString() {
    String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    Random random = new Random();
    StringBuilder sb = new StringBuilder(8);
    for (int i = 0; i < 8; i++) {
      sb.append(characters.charAt(random.nextInt(characters.length())));
    }
    return sb.toString();
  }

  // Returns a product review with a random ID.
  private static ProductReview createProductReview(String accountId) {
    // MAKE SURE YOU PASS AN ACTUAL PRODUCT REVIEW ID HERE.
    String productReviewId = generateRandomString();

    ProductReviewAttributes attributes =
        ProductReviewAttributes.newBuilder()
            .setTitle("Would not recommend!")
            .setContent("Not fantastic.")
            .setMinRating(1)
            .setMaxRating(5)
            .setRating(2)
            .setReviewTime(Timestamp.newBuilder().setSeconds(123456789).build())
            .addProductLinks("exampleproducturl.com")
            .setReviewLink(
                ReviewLink.newBuilder()
                    .setLink("examplereviewurl.com")
                    // The review page contains only this single review.
                    .setType(Type.SINGLETON)
                    .build())
            .addGtins("9780007350896")
            .addGtins("9780007350897")
            .build();

    return ProductReview.newBuilder()
        .setProductReviewId(productReviewId)
        .setProductReviewAttributes(attributes)
        .build();
  }

  public static void asyncInsertProductReviews(String accountId, String dataSourceId)
      throws Exception {
    GoogleCredentials credential = new Authenticator().authenticate();

    ProductReviewsServiceSettings productReviewsServiceSettings =
        ProductReviewsServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    try (ProductReviewsServiceClient productReviewsServiceClient =
        ProductReviewsServiceClient.create(productReviewsServiceSettings)) {

      // Arbitrarily creates five product reviews with random IDs.
      List<InsertProductReviewRequest> requests = new ArrayList<>();
      for (int i = 0; i < 5; i++) {
        InsertProductReviewRequest request =
            InsertProductReviewRequest.newBuilder()
                .setParent(String.format("accounts/%s", accountId))
                .setProductReview(createProductReview(accountId))
                // Must be a product reviews data source. In other words, a data source whose "type"
                // is ProductReviewDataSource.
                .setDataSource(String.format("accounts/%s/dataSources/%s", accountId, dataSourceId))
                .build();
        requests.add(request);
      }

      // Inserts the product reviews.
      List<ApiFuture<ProductReview>> futures =
          requests.stream()
              .map(
                  request ->
                      productReviewsServiceClient.insertProductReviewCallable().futureCall(request))
              .collect(Collectors.toList());

      // Creates callback to handle the responses when all are ready.
      ApiFuture<List<ProductReview>> responses = ApiFutures.allAsList(futures);
      ApiFutures.addCallback(
          responses,
          new ApiFutureCallback<List<ProductReview>>() {
            @Override
            public void onSuccess(List<ProductReview> results) {
              System.out.println("Inserted product reviews below:");
              System.out.println(results);
            }

            @Override
            public void onFailure(Throwable throwable) {
              System.out.println(throwable);
            }
          },
          MoreExecutors.directExecutor());
    } catch (Exception e) {
      System.out.println(e);
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    asyncInsertProductReviews(config.getAccountId().toString(), "YOUR_DATA_SOURCE_ID");
  }
}

商品レビューを取得する

商品レビューを表示するには、accounts.productreviews.get を使用します。これは読み取り専用です。 名前フィールドの一部として accountId と商品レビューの ID が必要です。GET メソッドは、対応する商品レビュー リソースを返します。

GET https://merchantapi.googleapis.com/reviews/v1alpha/{name=accounts/{ACCOUNT_ID}/productReviews/*}

商品レビューを取得するために使用できるサンプルを次に示します。

Java

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.reviews.v1alpha.GetProductReviewRequest;
import com.google.shopping.merchant.reviews.v1alpha.ProductReview;
import com.google.shopping.merchant.reviews.v1alpha.ProductReviewsServiceClient;
import com.google.shopping.merchant.reviews.v1alpha.ProductReviewsServiceSettings;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to get a product review. */
public class GetProductReviewSample {

  public static void getProductReview(String accountId, String productReviewId) throws Exception {
    GoogleCredentials credential = new Authenticator().authenticate();

    ProductReviewsServiceSettings productReviewsServiceSettings =
        ProductReviewsServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    try (ProductReviewsServiceClient productReviewsServiceClient =
        ProductReviewsServiceClient.create(productReviewsServiceSettings)) {

      GetProductReviewRequest request =
          GetProductReviewRequest.newBuilder()
              .setName(String.format("accounts/%s/productReviews/%s", accountId, productReviewId))
              .build();

      System.out.println("Sending get product review request:");
      ProductReview response = productReviewsServiceClient.getProductReview(request);
      System.out.println("Product review retrieved successfully:");
      System.out.println(response.getName());
    } catch (Exception e) {
      System.out.println(e);
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    String productReviewId = "YOUR_PRODUCT_REVIEW_ID";
    getProductReview(config.getAccountId().toString(), productReviewId);
  }
}

商品レビューを一覧表示する

productreviews.list メソッドを使用して、作成したすべての商品レビューを表示できます。

GET https://merchantapi.googleapis.com/reviews/v1alpha/{parent=accounts/{ACCOUNT_ID}}/productReviews

商品のすべてのレビューを一覧表示するために使用できるサンプルを次に示します。

Java

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.reviews.v1alpha.ListProductReviewsRequest;
import com.google.shopping.merchant.reviews.v1alpha.ProductReview;
import com.google.shopping.merchant.reviews.v1alpha.ProductReviewsServiceClient;
import com.google.shopping.merchant.reviews.v1alpha.ProductReviewsServiceClient.ListProductReviewsPagedResponse;
import com.google.shopping.merchant.reviews.v1alpha.ProductReviewsServiceSettings;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to list all the product reviews in a given account. */
public class ListProductReviewsSample {

  public static void listProductReviews(String accountId) throws Exception {
    GoogleCredentials credential = new Authenticator().authenticate();

    ProductReviewsServiceSettings productReviewsServiceSettings =
        ProductReviewsServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    try (ProductReviewsServiceClient productReviewsServiceClient =
        ProductReviewsServiceClient.create(productReviewsServiceSettings)) {

      ListProductReviewsRequest request =
          ListProductReviewsRequest.newBuilder()
              .setParent(String.format("accounts/%s", accountId))
              .build();

      System.out.println("Sending list product reviews request:");
      ListProductReviewsPagedResponse response =
          productReviewsServiceClient.listProductReviews(request);

      int count = 0;

      // Iterates over all rows in all pages and prints all product reviews.
      for (ProductReview 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);
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    listProductReviews(config.getAccountId().toString());
  }
}

商品レビューを削除する

商品レビューを削除するには、accounts.productreviews.delete を使用します。GET メソッドと同様に、このメソッドでは、作成時に返された商品レビューの名前フィールドが必要です。

DELETE https://merchantapi.googleapis.com/reviews/v1alpha/{name=accounts/{ACCOUNT_ID}/productReviews/*}

商品レビューを削除するために使用できるサンプルを次に示します。

Java

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.reviews.v1alpha.DeleteProductReviewRequest;
import com.google.shopping.merchant.reviews.v1alpha.ProductReviewsServiceClient;
import com.google.shopping.merchant.reviews.v1alpha.ProductReviewsServiceSettings;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to delete a product review. */
public class DeleteProductReviewSample {

  public static void deleteProductReview(String accountId, String productReviewId)
      throws Exception {
    GoogleCredentials credential = new Authenticator().authenticate();

    ProductReviewsServiceSettings productReviewsServiceSettings =
        ProductReviewsServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    try (ProductReviewsServiceClient productReviewsServiceClient =
        ProductReviewsServiceClient.create(productReviewsServiceSettings)) {

      DeleteProductReviewRequest request =
          DeleteProductReviewRequest.newBuilder()
              .setName(String.format("accounts/%s/productReviews/%s", accountId, productReviewId))
              .build();

      System.out.println("Sending delete product review request:");
      productReviewsServiceClient.deleteProductReview(request);
      System.out.println("Product review deleted successfully");
    } catch (Exception e) {
      System.out.println(e);
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    String productReviewId = "YOUR_PRODUCT_REVIEW_ID";
    deleteProductReview(config.getAccountId().toString(), productReviewId);
  }
}

商品レビューのステータス

商品レビュー リソースには、他の API と同様のステータスが含まれています。これはリソースの不可欠な部分であり、同じ問題と送信先の構造に従います。