Jeśli używasz biblioteki klienta, aplikacja musi utworzyć instancję obiektu usługi Doubleclicksearch
. Interakcje z interfejsem Search Ads 360 API odbywają się za pomocą tego obiektu usługi. Jeśli nie używasz biblioteki klienta, możesz pominąć tę sekcję, ale musisz napisać kod, który będzie wysyłać żądania HTTP i analizować odpowiedzi.
Każda instancja Doubleclicksearch
musi zawierać odwołanie do obiektu z Twoimi danymi logowania i tokenem dostępu OAuth 2.0.
Doubleclicksearch
przekazuje dane uwierzytelniające i token do interfejsu Search Ads 360 API w każdym żądaniu. Ten kod pokazuje, jak utworzyć instancję obiektu usługi Doubleclicksearch
za pomocą protokołu OAuth 2.0 w przypadku zainstalowanych aplikacji.
Jeśli nie masz jeszcze danych logowania OAuth 2.0 do interfejsu Search Ads 360 API, zapoznaj się z artykułem Konfigurowanie autoryzacji.
Java
import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.client.util.store.DataStoreFactory;
import com.google.api.client.util.store.FileDataStoreFactory;
import com.google.api.services.doubleclicksearch.Doubleclicksearch;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.util.Arrays;
private static final String[] SCOPES =
new String[] {
"https://www.googleapis.com/auth/doubleclicksearch"
};
/** File for storing user credentials. */
private static final java.io.File DATA_STORE_FILE =
new File(System.getProperty("user.home"), ".credentials/doubleclicksearch.json");
/**
* Global instance of the {DataStoreFactory}. The best practice is to make it a single
* globally shared instance across your application.
*/
private static FileDataStoreFactory dataStoreFactory;
/**
* Sets up a new Doubleclicksearch service. The builder for the service
* requires a Credential object, which provides the credentials needed to
* interact with Search Ads 360.
*/
private static Doubleclicksearch getService() throws Exception {
JsonFactory jsonFactory = new JacksonFactory();
NetHttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
Credential credential = readCredentialFromCommandLine(jsonFactory, transport);
return new Doubleclicksearch.Builder(transport, jsonFactory, credential)
.setApplicationName("Sample")
.build();
}
/**
* Generates a credential by reading client id, client secret and refresh
* token from the command line. You could update this method to read the
* data from a database or other secure location.
*/
private static Credential readCredentialFromCommandLine(
JsonFactory jsonFactory,
NetHttpTransport transport) {
String clientId = System.console().readLine("Client id: ");
String clientSecret = System.console().readLine("Client secret: ");
String refreshToken = System.console().readLine("Refresh token: ");
return new GoogleCredential.Builder()
.setJsonFactory(jsonFactory)
.setTransport(transport)
.setClientSecrets(clientId, clientSecret)
.build()
.setRefreshToken(refreshToken);
}
/**
* This method is an alternative to {@link #readCredentialFromCommandLine}. It reads
* client secrets from a {@code client_secrets.json} file, interactively creates
* the necessary authorization tokens on first run, and stores the tokens in the
* {@code FileDataStore}. Subsequent runs will no longer require interactivity
* as long as the {@code .credentials/doubleclicksearch.json} file is not removed.
* You can download the {@code .credentials/doubleclicksearch.json} file from the
* Google API Console.
* Note that setting the {@link GoogleAuthorizationCodeFlow} access type
* to {@code offline} is what causes {@code GoogleAuthorizationCodeFlow} to obtain
* and store refresh tokens.
*/
private static Credential generateCredentialInteractively(
JsonFactory jsonFactory,
NetHttpTransport transport) throws Exception {
dataStoreFactory = new FileDataStoreFactory(DATA_STORE_FILE);
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(
jsonFactory, new InputStreamReader(
Doubleclicksearch.class.getResourceAsStream("/client_secrets.json")));
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
transport, jsonFactory, clientSecrets, Arrays.asList(SCOPES))
.setDataStoreFactory(dataStoreFactory)
.setAccessType("offline")
.build();
return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");
}
.NET
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Auth.OAuth2.Flows;
using api = Google.Apis.Doubleclicksearch.v2;
/// <summary>
/// Creates a Doubleclicksearch API service with static credentials.
/// </summary>
/// <param name="clientId">API project client ID.<param>
/// <param name="clientSecret">API project client secret.<param>
/// <param name="refreshToken">Refresh token generated for installed applications.<param>
private static api.DoubleclicksearchService CreateService(
String clientId,
String clientSecret,
String refreshToken)
{
var token = new Google.Apis.Auth.OAuth2.Responses.TokenResponse
{
RefreshToken = refreshToken,
};
var credentials = new UserCredential(new GoogleAuthorizationCodeFlow(
new GoogleAuthorizationCodeFlow.Initializer
{
ClientSecrets = new ClientSecrets
{
ClientId = clientId,
ClientSecret = clientSecret,
},
}), "user", token);
return new api.DoubleclicksearchService(
new Google.Apis.Services.BaseClientService.Initializer
{
HttpClientInitializer = credentials,
ApplicationName = "Sample DS API client",
});
}
Python
import argparse
import httplib2
from apiclient.discovery import build
from oauth2client import GOOGLE_TOKEN_URI
from oauth2client.client import OAuth2Credentials, HttpAccessTokenRefreshError
def create_credentials(client_id, client_secret, refresh_token):
"""Create Google OAuth2 credentials.
Args:
client_id: Client id of a Google Cloud console project.
client_secret: Client secret of a Google Cloud console project.
refresh_token: A refresh token authorizing the Google Cloud console project
to access the DS data of some Google user.
Returns:
OAuth2Credentials
"""
return OAuth2Credentials(access_token=None,
client_id=client_id,
client_secret=client_secret,
refresh_token=refresh_token,
token_expiry=None,
token_uri=GOOGLE_TOKEN_URI,
user_agent=None)
def get_service(credentials):
"""Set up a new Doubleclicksearch service.
Args:
credentials: An OAuth2Credentials generated with create_credentials, or
flows in the oatuh2client.client package.
Returns:
An authorized Doubleclicksearch serivce.
"""
# Use the authorize() function of OAuth2Credentials to apply necessary credential
# headers to all requests.
http = credentials.authorize(http = httplib2.Http())
# Construct the service object for the interacting with the Search Ads 360 API.
service = build('doubleclicksearch', 'v2', http=http)
return service
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Sample DS API code.')
parser.add_argument('--client_id', dest='c_id', action='store',
help=('Specifies the DS API client_id. Looks like: '
'1234567890.apps.googleusercontent.com'),
required=True)
parser.add_argument('--client_secret', dest='secret', action='store',
help=('Specifies the DS API client_secret. Looks like: '
'1ab2CDEfghigKlM3OPzyx2Q'),
required=True)
parser.add_argument('--refresh_token', dest='token', action='store',
help=('Specifies the DS API refresh_token. Looks like: '
'4/abC1ddW3WJURhF7DUj-6FHq8kkE'),
required=True)
args = parser.parse_args()
creds = create_credentials(args.c_id, args.secret, args.token)
try:
service = get_service(creds)
print 'Successfully loaded credentials.'
except HttpAccessTokenRefreshError:
print ('Error: Unable to get credentials. Please ensure that the '
'credentials are correct. '
'https://developers.google.com/search-ads/v2/authorizing'
)