Il metodo accounts.list
consente di recuperare un elenco di
risorse Account
a cui
l'utente autenticato può accedere. Puoi utilizzare il parametro della query filter
per
restringere i risultati in base a vari criteri, ad esempio:
- Proprietà dell'account
- Relazioni con altri account (ad esempio, fornitori in una struttura di account avanzata)
- Servizi associati agli account
Questo può essere utile per gestire più account o trovare account aziendali specifici che soddisfano determinate condizioni.
Puoi utilizzare i seguenti campi per filtrare a livello di account
:
access
: filtra in base al tipo di accesso dell'utente aaccount
. Questo filtro accetta i seguenti valori:DIRECT
: restituisce solo gli account a cui l'utente ha accesso diretto.INDIRECT
: restituisce solo gli account a cui l'utente ha accesso indiretto.ALL
: restituisce tutti gli account a cui l'utente ha accesso (sia diretto che indiretto). Questo è il comportamento predefinito se il filtro non è specificato.
capabilities
: filtra in base alcapabilities
della risorsaaccount
(tieni presente che questo campo non è disponibile nella risorsa stessa). È supportata solo la funzionalitàCAN_UPLOAD_PRODUCTS
. Questo campo supporta la negazione e utilizza la sintassi della raccolta.relationship(...)
: filtra in base al tipo di relazione che l'account ha con un altro account. Puoi includere più filtrirelationship(...)
in un'unica richiesta.accountName
: filtra in base alaccountName
della risorsaaccount
.
Per informazioni più dettagliate sulla sintassi dei filtri, consulta la guida Sintassi dei filtri.
Esempi
Gli esempi riportati di seguito spiegano come formulare le query più comuni. Tutti gli
esempi seguenti utilizzano il metodo accounts.list
. Per saperne di più, consulta la documentazione di riferimento di
accounts.list
.
Trovare i subaccount di un fornitore specifico
Il metodo
accounts.listSubaccounts
fornisce un modo diretto per elencare i subaccount. Puoi anche utilizzare le funzionalità di filtro descritte nelle sezioni seguenti. Se gestisci un
account avanzato, puoi elencare tutti i relativi subaccount filtrando in base a
providerId
. Sostituisci PROVIDER_ID
con l'ID del tuo account avanzato.
Ad esempio, utilizza relationship(providerId=123)
se l'ID del fornitore è
123
.
Questo è utile per gestire la struttura dei tuoi account.
GET https://merchantapi.googleapis.com/accounts/v1/accounts?filter=relationship(providerId%20%3D%20PROVIDER_ID)
Una richiesta riuscita restituisce un codice di stato 200 e un corpo della risposta con l'elenco dei subaccount corrispondenti:
{
"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..."
}
Trovare gli account che non possono caricare prodotti
Puoi combinare più condizioni di filtro per creare ricerche più specifiche.
Il filtro accountName=*store* AND -capabilities:CAN_UPLOAD_PRODUCTS
trova tutti
gli account con "store" nel nome che non sono configurati per caricare direttamente i prodotti. Il -
prima di capabilities
funge da operatore di negazione. Può essere
utile per recuperare solo gli account avanzati.
GET https://merchantapi.googleapis.com/accounts/v1/accounts?filter=accountName%20%3D%20%22*store*%22%20AND%20-capabilities%3ACAN_UPLOAD_PRODUCTS
Una richiesta riuscita restituisce un codice di stato 200 e un corpo della risposta con l'elenco degli account corrispondenti:
{
"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..."
}
Trovare gli account in base al nome
Puoi cercare gli account il cui nome visualizzato corrisponde a un pattern specifico.
Ad esempio, accountName=*store*
troverebbe tutti gli account con "store" nel nome.
Ciò consente di individuare rapidamente account aziendali specifici.
GET https://merchantapi.googleapis.com/accounts/v1/accounts?filter=accountName%20%3D%20%22*store*%22
Una richiesta riuscita restituisce un codice di stato 200 e un corpo della risposta con l'elenco degli account corrispondenti:
{
"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..."
}
Trovare gli account collegati a un fornitore per un servizio specifico
Puoi trovare gli account che hanno una relazione di servizio specifica con un fornitore.
Ad esempio, per trovare tutti gli account aggregati nel provider PROVIDER_ID
per l'aggregazione degli account, utilizza il filtro
relationship(providerId=PROVIDER_ID) AND
service(type="ACCOUNT_AGGREGATION")
.
GET https://merchantapi.googleapis.com/accounts/v1/accounts?filter=relationship(providerId%20%3D%20PROVIDER_ID%20AND%20service(type%20%3D%20%22ACCOUNT_AGGREGATION%22))
Una richiesta riuscita restituisce un codice di stato 200 e un corpo della risposta con l'elenco degli account corrispondenti:
{
"accounts": [
{
"name": "accounts/54321",
"accountId": "54321",
"accountName": "Aggregated Account X",
"adultContent": false,
"languageCode": "en",
"timeZone": {
"id": "America/New_York"
}
}
]
}
Trovare account in base allo stato di approvazione della relazione di servizio
Puoi filtrare gli account in base allo stato del rapporto di servizio con un fornitore. Ad esempio, per trovare tutti gli account che non hanno accettato una richiesta di collegamento dell'account (handshakeState = "PENDING")
da un fornitore specifico PROVIDER_ID
.
Ad esempio, per trovare gli account in cui l'ID fornitore è 123
, il tipo di servizio
è ACCOUNT_MANAGEMENT
e lo stato è PENDING
, utilizza
relationship(service(handshakeState = "PENDING" AND type =
"ACCOUNT_MANAGEMENT") AND providerId = 123)
.
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)
Una richiesta riuscita restituisce un codice di stato 200 e un corpo della risposta con l'elenco degli account corrispondenti:
{
"accounts": [
{
"name": "accounts/98765",
"accountId": "98765",
"accountName": "Managed Account Y",
"adultContent": false,
"languageCode": "es",
"timeZone": {
"id": "Europe/Madrid"
}
}
]
}
Filtrare gli account utilizzando le librerie client
Gli esempi seguenti mostrano come utilizzare le librerie client per filtrare gli account in base a criteri combinati, come il nome dell'account e la relazione con un fornitore. Questi esempi utilizzano il metodo accounts.list
. Per saperne di più,
consulta la
documentazione di riferimento di
accounts.list
.
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>'