Erişebileceğiniz hesapları filtreleyin

accounts.list yöntemi, kimliği doğrulanmış kullanıcının erişebileceği Account kaynaklarının listesini almanıza olanak tanır. Sonuçları çeşitli ölçütlere göre daraltmak için filter sorgu parametresini kullanabilirsiniz. Örneğin:

  • Hesap özellikleri
  • Diğer hesaplarla ilişkiler (ör. gelişmiş hesap yapısındaki sağlayıcılar)
  • Hesaplarla ilişkili hizmetler

Bu özellik, birden fazla hesabı yönetirken veya belirli koşulları karşılayan işletme hesaplarını bulurken faydalı olabilir.

account düzeyinde filtrelemek için aşağıdaki alanları kullanabilirsiniz:

  • access: Kullanıcının account erişim türüne göre filtreler. Bu filtre aşağıdaki değerleri kabul eder:
    • DIRECT: Yalnızca kullanıcının doğrudan erişimi olan hesapları döndürür.
    • INDIRECT: Yalnızca kullanıcının dolaylı erişimi olan hesapları döndürür.
    • ALL: Kullanıcının erişebildiği tüm hesapları (hem doğrudan hem de dolaylı) döndürür. Filtre belirtilmezse varsayılan davranış budur.
  • capabilities: account kaynağının capabilities göre filtreler (bu alanın kaynağın kendisinde kullanılamadığını unutmayın). Yalnızca CAN_UPLOAD_PRODUCTS özelliği desteklenir. Bu alan olumsuzlamayı destekler ve koleksiyon söz dizimini kullanır.
  • relationship(...): Hesabın başka bir hesapla olan ilişki türüne göre filtreler. Bir isteğe birden fazla relationship(...) filtre ekleyebilirsiniz.
  • accountName: account kaynağının accountName göre filtreleme yapar.

Filtre söz dizimi hakkında daha ayrıntılı bilgi için Filtre söz dizimi kılavuzuna bakın.

Örnekler

Aşağıdaki örneklerde en tipik sorguların nasıl oluşturulacağı açıklanmaktadır. Aşağıdaki örneklerin tümünde accounts.list yöntemi kullanılmaktadır. Daha fazla bilgi için accounts.list referans belgelerine bakın.

Belirli bir sağlayıcının alt hesaplarını bulma

accounts.listSubaccounts yöntemi, alt hesapları listelemek için doğrudan bir yol sağlar. Ayrıca, aşağıdaki bölümlerde açıklandığı gibi filtreleme özelliklerini de kullanabilirsiniz. Gelişmiş bir hesabı yönetiyorsanız providerId simgesine göre filtreleyerek tüm alt hesaplarını listeleyebilirsiniz. PROVIDER_ID kısmını gelişmiş hesabınızın kimliğiyle değiştirin.

Örneğin, sağlayıcının kimliği 123 ise relationship(providerId=123) kullanın.

Bu, hesaplarınızın yapısını yönetmek için kullanışlıdır.

GET https://merchantapi.googleapis.com/accounts/v1/accounts?filter=relationship(providerId%20%3D%20PROVIDER_ID)

Başarılı bir istek, 200 durum kodu ve eşleşen alt hesapların listesini içeren bir yanıt gövdesi döndürür:

{
  "accounts": [
    {
      "name": "accounts/77777",
      "accountId": "77777",
      "accountName": "SubAccount A of Provider",
      "adultContent": false,
      "languageCode": "fr",
      "timeZone": {
        "id": "Europe/Paris"
      }
    },
    {
      "name": "accounts/88888",
      "accountId": "88888",
      "accountName": "SubAccount B of Provider",
      "adultContent": false,
      "languageCode": "de",
      "timeZone": {
        "id": "Europe/Berlin"
      }
    }
  ],
  "nextPageToken": "XYZ123abcDEF..."
}

Ürün yükleyemeyen hesapları bulma

Daha spesifik aramalar oluşturmak için birden fazla filtre koşulunu birleştirebilirsiniz.

accountName=*store* AND -capabilities:CAN_UPLOAD_PRODUCTS filtresi, adında "mağaza" geçen ve ürünleri doğrudan yükleyecek şekilde yapılandırılmamış tüm hesapları bulur. capabilities öncesindeki -, olumsuzlama operatörü olarak işlev görür. Bu, yalnızca gelişmiş hesapları almak için yararlı olabilir.

GET https://merchantapi.googleapis.com/accounts/v1/accounts?filter=accountName%20%3D%20%22*store*%22%20AND%20-capabilities%3ACAN_UPLOAD_PRODUCTS

Başarılı bir istek, 200 durum kodu ve eşleşen hesapların listesini içeren bir yanıt gövdesi döndürür:

{
  "accounts": [
    {
      "name": "accounts/54321",
      "accountId": "54321",
      "accountName": "Partner Store - US",
      "adultContent": false,
      "languageCode": "en",
      "timeZone": {
        "id": "America/New_York"
      }
    },
    {
      "name": "accounts/98765",
      "accountId": "98765",
      "accountName": "Auxiliary Brand Store",
      "adultContent": false,
      "languageCode": "fr",
      "timeZone": {
        "id": "Europe/Paris"
      }
    }
  ],
  "nextPageToken": "CDEfghIJKlmnOPQ..."
}

Hesapları ada göre bulma

Görünen adı belirli bir kalıba uyan hesapları arayabilirsiniz.

Örneğin, accountName=*store* sorgusu, adında "mağaza" geçen tüm hesapları bulur.

Bu sayede belirli işletme hesaplarını hızlıca bulabilirsiniz.

GET https://merchantapi.googleapis.com/accounts/v1/accounts?filter=accountName%20%3D%20%22*store*%22

Başarılı bir istek, 200 durum kodu ve eşleşen hesapların listesini içeren bir yanıt gövdesi döndürür:

{
  "accounts": [
    {
      "name": "accounts/12345",
      "accountId": "12345",
      "accountName": "My Awesome Store",
      "adultContent": false,
      "languageCode": "en",
      "timeZone": {
        "id": "America/Los_Angeles"
      }
    },
    {
      "name": "accounts/67890",
      "accountId": "67890",
      "accountName": "Another Store Online",
      "adultContent": false,
      "languageCode": "en",
      "timeZone": {
        "id": "Europe/London"
      }
    }
  ],
  "nextPageToken": "ABSdefGHIjklMNO..."
}

Belirli bir hizmet için sağlayıcıya bağlı hesapları bulma

Bir sağlayıcıyla belirli bir hizmet ilişkisi olan hesapları bulabilirsiniz. Örneğin, hesap toplama için PROVIDER_ID sağlayıcısı altında toplanan tüm hesapları bulmak istiyorsanız relationship(providerId=PROVIDER_ID) AND service(type="ACCOUNT_AGGREGATION") filtresini kullanın.

GET https://merchantapi.googleapis.com/accounts/v1/accounts?filter=relationship(providerId%20%3D%20PROVIDER_ID%20AND%20service(type%20%3D%20%22ACCOUNT_AGGREGATION%22))

Başarılı bir istek, 200 durum kodu ve eşleşen hesapların listesini içeren bir yanıt gövdesi döndürür:

{
  "accounts": [
    {
      "name": "accounts/54321",
      "accountId": "54321",
      "accountName": "Aggregated Account X",
      "adultContent": false,
      "languageCode": "en",
      "timeZone": {
        "id": "America/New_York"
      }
    }
  ]
}

Hizmet ilişkisi onay durumuna göre hesapları bulma

Hesapları, bir sağlayıcıyla olan hizmet ilişkilerinin durumuna göre filtreleyebilirsiniz. Örneğin, belirli bir sağlayıcıdan PROVIDER_ID gelen hesap bağlantısı isteğini (handshakeState = "PENDING") kabul etmeyen tüm hesapları bulmak için.

Örneğin, sağlayıcı kimliğinin 123, hizmet türünün ACCOUNT_MANAGEMENT ve durumun PENDING olduğu hesapları bulmak için relationship(service(handshakeState = "PENDING" AND type = "ACCOUNT_MANAGEMENT") AND providerId = 123) ifadesini kullanın.

GET https://merchantapi.googleapis.com/accounts/v1/accounts?filter=relationship(service(handshakeState%20%3D%20%22PENDING%22%20AND%20type%20%3D%20%22ACCOUNT_MANAGEMENT%22)%20AND%20providerId%20%3D%20PROVIDER_ID)

Başarılı bir istek, 200 durum kodu ve eşleşen hesapların listesini içeren bir yanıt gövdesi döndürür:

{
  "accounts": [
    {
      "name": "accounts/98765",
      "accountId": "98765",
      "accountName": "Managed Account Y",
      "adultContent": false,
      "languageCode": "es",
      "timeZone": {
        "id": "Europe/Madrid"
      }
    }
  ]
}

İstemci kitaplıklarını kullanarak hesapları filtreleme

Aşağıdaki örneklerde, hesapları hesap adı ve sağlayıcıyla ilişki gibi birleştirilmiş ölçütlere göre filtrelemek için istemci kitaplıklarının nasıl kullanılacağı gösterilmektedir. Bu örneklerde accounts.list yöntemi kullanılmaktadır. Daha fazla bilgi için accounts.list referans belgelerine bakın.

Java

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.accounts.v1.Account;
import com.google.shopping.merchant.accounts.v1.AccountsServiceClient;
import com.google.shopping.merchant.accounts.v1.AccountsServiceClient.ListAccountsPagedResponse;
import com.google.shopping.merchant.accounts.v1.AccountsServiceSettings;
import com.google.shopping.merchant.accounts.v1.ListAccountsRequest;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to filter the accounts the user making the request has access to. */
public class FilterAccountsSample {

  public static void filterAccounts(Config config) throws Exception {

    // Obtains OAuth token based on the user's configuration.
    GoogleCredentials credential = new Authenticator().authenticate();

    // Creates service settings using the credentials retrieved above.
    AccountsServiceSettings accountsServiceSettings =
        AccountsServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    // Calls the API and catches and prints any network failures/errors.
    try (AccountsServiceClient accountsServiceClient =
        AccountsServiceClient.create(accountsServiceSettings)) {

      // Filter for accounts with display names containing "store" and a provider with the ID "123":
      String filter = "accountName = \"*store*\" AND relationship(providerId = 123)";

      // Filter for all subaccounts of account "123":
      // String filter2 = "relationship(providerId = 123 AND service(type =
      // \"ACCOUNT_AGGREGATION\"))";

      // String filter3 = "relationship(service(handshakeState = \"APPROVED\" AND type =
      // \"ACCOUNT_MANAGEMENT\") AND providerId = 123)";

      ListAccountsRequest request = ListAccountsRequest.newBuilder().setFilter(filter).build();

      System.out.println("Sending list accounts request with filter:");
      ListAccountsPagedResponse response = accountsServiceClient.listAccounts(request);

      int count = 0;

      // Iterates over all rows in all pages and prints the sub-account
      // in each row.
      // `response.iterateAll()` automatically uses the `nextPageToken` and recalls the
      // request to fetch all pages of data.
      for (Account account : response.iterateAll()) {
        System.out.println(account);
        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();

    filterAccounts(config);
  }
}

PHP

use Google\ApiCore\ApiException;
use Google\Shopping\Merchant\Accounts\V1\Client\AccountsServiceClient;
use Google\Shopping\Merchant\Accounts\V1\ListAccountsRequest;

/**
 * This class demonstrates how to filter the accounts the user making the request has access to.
 */
class FilterAccounts
{
    public static function filterAccounts(array $config): 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.
        $accountsServiceClient = new AccountsServiceClient($options);

        // Calls the API and catches and prints any network failures/errors.
        try {

            // Filter for accounts with display names containing "store" and a provider with the ID "123":
            $filter = "accountName = \"*store*\" AND relationship(providerId = 123)";

            // Filter for all subaccounts of account "123":
            // $filter = "relationship(providerId = 123 AND service(type = \"ACCOUNT_AGGREGATION\"))";

            // $filter = "relationship(service(handshakeState = \"APPROVED\" AND type =
            // \"ACCOUNT_MANAGEMENT\") AND providerId = 123)";

            $request = new ListAccountsRequest(['filter' => $filter]);

            print "Sending list accounts request with filter:\n";
            $response = $accountsServiceClient->listAccounts($request);

            $count = 0;

            // Iterates over all rows in all pages and prints the sub-account
            // in each row.
            // `response.iterateAll()` automatically uses the `nextPageToken` and recalls the
            // request to fetch all pages of data.
            foreach ($response->iterateAllElements() as $account) {
                print_r($account); 
                $count++;
            }
            print "The following count of elements were returned: ";
            print $count . PHP_EOL;
        } catch (ApiException $e) {
            print $e->getMessage();
        }
    }

    public function callSample(): void
    {
        $config = Config::generateConfig();
        self::filterAccounts($config);
    }
}

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

Python

from examples.authentication import generate_user_credentials
from google.shopping.merchant_accounts_v1 import AccountsServiceClient
from google.shopping.merchant_accounts_v1 import ListAccountsRequest


def filter_accounts():
  """Filters the accounts the user making the request has access to."""

  # Get OAuth credentials.
  credentials = generate_user_credentials.main()

  # Create a client.
  client = AccountsServiceClient(credentials=credentials)

  # Create the filter string.
  filter_string = 'accountName = "*store*" AND relationship(providerId = 123)'

  # Create the request.
  request = ListAccountsRequest(filter=filter_string)

  # Make the request and print the response.
  try:
    print("Sending list accounts request with filter:")
    response = client.list_accounts(request=request)

    count = 0
    for account in response:
      print(account)
      count += 1

    print(f"The following count of elements were returned: {count}")

  except RuntimeError as e:
    print(e)


if __name__ == "__main__":
  filter_accounts()

AppsScript


/**
 * Filters and lists accounts for which the logged-in user has access to
 */
function filterAccounts() {
  // IMPORTANT:
  // Enable the Merchant API Accounts sub-API Advanced Service and call it
  // "MerchantApiAccounts"

  // Create the filter string.
  // Documentation can be found at
  // https://developers.google.com/merchant/api/guides/accounts/filter-syntax
  const filter = 'accountName = "*store*" AND relationship(providerId = 123)';
  try {
    console.log('Sending filter Accounts request');
    let pageToken;
    let pageSize = 500;
    // Call the Accounts.list API method with a filter. Use the pageToken to iterate through
    // all pages of results.
    do {
      response =
          MerchantApiAccounts.Accounts.list({pageSize, pageToken, filter});
      for (const account of response.accounts) {
        console.log(account);
      }
      pageToken = response.nextPageToken;
    } while (pageToken);  // Exits when there is no next page token.

  } catch (e) {
    console.log('ERROR!');
    console.log(e);
  }
}

cURL

curl --location 'https://merchantapi.googleapis.com/accounts/v1/accounts?filter=accountName%20%3D%20%22*store*%22%20AND%20relationship(providerId%20%3D%20PROVIDER_ID)' \
--header 'Authorization: Bearer <API_TOKEN>'