Вот как использовать клиентскую библиотеку .NET:
// Initialize a GoogleAdsConfig instance.
GoogleAdsConfig config = new GoogleAdsConfig()
{
OAuth2Mode = OAuth2Flow.SERVICE_ACCOUNT,
OAuth2SecretsJsonPath = "PATH_TO_CREDENTIALS_JSON",
LoginCustomerId = "INSERT_LOGIN_CUSTOMER_ID_HERE"
};
// Initialize a GoogleAdsClient instance.
GoogleAdsClient client = new GoogleAdsClient(config);
// Create the required service.
CampaignServiceClient campaignService =
client.GetService(Services.V26.CampaignService);
// Make calls to the service client.
Инициализация клиента и сервисов
Чтобы взаимодействовать с Google Ads API, сначала настройте и создайте экземпляр GoogleAdsClient, а затем используйте его для создания нужных вам клиентов сервиса API.
Создание экземпляра GoogleAdsClient
Самый важный класс в библиотеке .NET Google Ads API – это GoogleAdsClient. Он позволяет создать предварительно настроенный клиент сервиса, который можно использовать для вызовов API. Чтобы настроить объект GoogleAdsClient, создайте объект GoogleAdsConfig и задайте необходимые свойства. Подробнее о настройке…
// Initialize a GoogleAdsConfig instance.
GoogleAdsConfig config = new GoogleAdsConfig()
{
OAuth2Mode = OAuth2Flow.SERVICE_ACCOUNT,
OAuth2SecretsJsonPath = "PATH_TO_CREDENTIALS_JSON",
LoginCustomerId = "INSERT_LOGIN_CUSTOMER_ID_HERE"
};
// Initialize a GoogleAdsClient instance.
GoogleAdsClient client = new GoogleAdsClient(config);
// Modify the GoogleAdsClient configuration afterwards if needed.
client.Config.LoginCustomerId = "INSERT_UPDATED_LOGIN_CUSTOMER_ID_HERE";
Создание сервиса
GoogleAdsClient предоставляет метод GetService, который можно использовать для создания клиента сервиса API.
CampaignServiceClient campaignService = client.GetService(
Services.V26.CampaignService);
// Now make calls to CampaignService.
Библиотека предоставляет класс Services, который перечисляет все поддерживаемые версии API (где второстепенные выпуски, такие как v25.1, используют перечисление основной версии, Services.V25) и сервисы. Метод GetService принимает эти объекты перечисления в качестве аргумента при создании сервиса. Например, чтобы создать экземпляр CampaignServiceClient для версии V26 Google Ads API, вызовите метод GoogleAdsClient.GetService с аргументом Services.V26.CampaignService, как показано в примере выше.
Обработка ошибок
Не все вызовы API выполняются успешно. Если вызовы API не удаются, сервер может возвращать ошибки. Важно отслеживать ошибки API и правильно их обрабатывать.
При возникновении ошибки API создается экземпляр GoogleAdsException. В нем содержится информация, которая поможет вам понять, что пошло не так:
public void Run(GoogleAdsClient client, long customerId) { // Get the GoogleAdsService. GoogleAdsServiceClient googleAdsService = client.GetService( Services.V26.GoogleAdsService); // Create a query that will retrieve all campaigns. string query = @"SELECT campaign.id, campaign.name, campaign.network_settings.target_content_network FROM campaign ORDER BY campaign.id"; try { // Issue a search request. googleAdsService.SearchStream(customerId.ToString(), query, delegate (SearchGoogleAdsStreamResponse resp) { foreach (GoogleAdsRow googleAdsRow in resp.Results) { Console.WriteLine("Campaign with ID {0} and name '{1}' was found.", googleAdsRow.Campaign.Id, googleAdsRow.Campaign.Name); } } ); } catch (GoogleAdsException e) { Console.WriteLine("Failure:"); Console.WriteLine($"Message: {e.Message}"); Console.WriteLine($"Failure: {e.Failure}"); Console.WriteLine($"Request ID: {e.RequestId}"); throw; } }
Потокобезопасность
Изменение состояния конфигурации общего экземпляра GoogleAdsClient в нескольких потоках не является потокобезопасным, поскольку изменения конфигурации, внесенные в экземпляр в одном потоке, могут повлиять на сервисы, созданные в других потоках.
Однако операции только для чтения, например получение новых экземпляров сервисов из неизменяемого экземпляра GoogleAdsClient и параллельные вызовы нескольких сервисов, являются потокобезопасными.
Чтобы изолировать изменения конфигурации для каждого потока, создайте отдельный экземпляр GoogleAdsClient для каждой рабочей задачи или потока:
GoogleAdsClient client1 = new GoogleAdsClient();
GoogleAdsClient client2 = new GoogleAdsClient();
Task task1 = Task.Run(() => AddAdGroups(client1));
Task task2 = Task.Run(() => AddAdGroups(client2));
await Task.WhenAll(task1, task2);
public void AddAdGroups(GoogleAdsClient client)
{
// Perform operations with client.
}
Обеспечьте быструю работу приложения
Вызовы методов Google Ads API могут занимать некоторое время в зависимости от размера запросов. Чтобы приложение не зависало, выполните следующие действия:
Используйте библиотеку Grpc.Core для устаревших фреймворков пользовательского интерфейса
Если вы разрабатываете приложение, предназначенное для .NET Framework и использующее устаревшую технологию пользовательского интерфейса, например ASP.NET Web Forms или WinForms, вы можете включить устаревшую библиотеку транспорта Grpc.Core следующим образом:
GoogleAdsConfig config = new GoogleAdsConfig();
config.UseGrpcCore = true;
GoogleAdsClient client = new GoogleAdsClient(config);
Используйте асинхронные методы
Чтобы приложение не зависало, используйте асинхронные методы. Вот несколько примеров.
Получите список кампаний и заполните ListView.
private async void OnRetrieveCampaignsButtonClick(object sender, EventArgs e)
{
try
{
// Get the GoogleAdsService.
GoogleAdsServiceClient googleAdsService = client.GetService(
Services.V26.GoogleAdsService);
// Create a query that will retrieve all campaigns.
string query = @"SELECT
campaign.id,
campaign.name,
campaign.network_settings.target_content_network
FROM campaign
ORDER BY campaign.id";
List<ListViewItem> items = new List<ListViewItem>();
await googleAdsService.SearchStreamAsync(
customerId.ToString(),
query,
(SearchGoogleAdsStreamResponse resp) =>
{
foreach (GoogleAdsRow googleAdsRow in resp.Results)
{
ListViewItem item = new ListViewItem();
item.Text = googleAdsRow.Campaign.Id.ToString();
item.SubItems.Add(googleAdsRow.Campaign.Name);
items.Add(item);
}
}
);
listView1.Items.AddRange(items.ToArray());
}
catch (GoogleAdsException ex)
{
MessageBox.Show($"API Error: {ex.Message}");
}
}
Как обновить бюджет кампании и показать окно с предупреждением
private async void OnUpdateBudgetButtonClick(object sender, EventArgs e)
{
try
{
// Get the CampaignBudgetService.
CampaignBudgetServiceClient budgetService = client.GetService(
Services.V26.CampaignBudgetService);
// Create the campaign budget.
CampaignBudget budget = new CampaignBudget()
{
Name = "Interplanetary Cruise Budget #" +
ExampleUtilities.GetRandomString(),
DeliveryMethod = BudgetDeliveryMethod.Standard,
AmountMicros = 500000
};
// Create the operation.
CampaignBudgetOperation budgetOperation = new CampaignBudgetOperation()
{
Create = budget
};
// Create the campaign budget asynchronously.
MutateCampaignBudgetsResponse response =
await budgetService.MutateCampaignBudgetsAsync(
customerId.ToString(),
new CampaignBudgetOperation[] { budgetOperation });
MessageBox.Show(response.Results[0].ResourceName);
}
catch (GoogleAdsException ex)
{
MessageBox.Show($"API Error: {ex.Message}");
}
}