Геттеры сервисов и типов

Извлечение ссылок на все различные классы прототипов, необходимые для использования API в Python, может оказаться трудоемким и потребует от вас глубокого понимания API или частого переключения контекста для ссылки на прототипы или документацию.

Методы get_service и get_type клиента

Эти два метода получения позволяют вам извлекать любой объект службы или типа в API. Метод get_service используется для извлечения клиентов службы. get_type используется для любого другого объекта. Классы клиентов службы определены в коде по пути версии google/ads/googleads/v*/services/services/ , а все типы определены по различным категориям объектов, google/ads/googleads/v*/common|enums|errors|resources|services/types/ . Весь код в каталоге версий генерируется, поэтому лучше всего использовать эти методы вместо прямого импорта объектов в случае изменения структуры кодовой базы.

Вот пример использования метода get_service для получения экземпляра клиента GoogleAdsService .

from google.ads.googleads.client import GoogleAdsClient

# "load_from_storage" loads your API credentials from disk so they
# can be used for service initialization. Providing the optional `version`
# parameter means that the v20 version of GoogleAdsService will
# be returned.
client = GoogleAdsClient.load_from_storage(version="v20")
googleads_service = client.get_service("GoogleAdsService")

Вот пример использования метода get_type для получения экземпляра Campaign .

from google.ads.googleads.client import GoogleAdsClient

client = GoogleAdsClient.load_from_storage(version="v20")
campaign = client.get_type("Campaign")

Перечисления

Хотя вы можете использовать метод get_type для извлечения Enums, каждый экземпляр GoogleAdsClient также имеет атрибут enums , который динамически загружает Enums, используя тот же механизм, что и метод get_type . Этот интерфейс призван быть более простым и легким для чтения, чем использование get_type :

client = GoogleAdsClient.load_from_storage(version=v20)

campaign = client.get_type("Campaign")
campaign.status = client.enums.CampaignStatusEnum.PAUSED

Поля объектов Proto, которые являются перечислениями, представлены в Python нативным типом enum . Это означает, что вы можете легко прочитать значение члена. Работа с экземпляром campaign из предыдущего примера в Python repl:

>>> print(campaign.status)
CampaignStatus.PAUSED
>>> type(campaign.status)
<enum 'CampaignStatus'>
>>> print(campaign.status.value)
3

Иногда полезно знать имя поля, соответствующего значению enum, как показано выше. Вы можете получить доступ к этой информации, используя атрибут name :

>>> print(campaign.status.name)
'PAUSED'
>>> type(campaign.status.name)
<class 'str'>

Взаимодействие с перечислениями отличается в зависимости от того, установлена ​​ли у вас конфигурация use_proto_plus в значение true или false . Подробную информацию об этих двух интерфейсах см. в документации по сообщениям protobuf .

Версионирование

Несколько версий API поддерживаются одновременно. Хотя v20 может быть последней версией, более ранние версии по-прежнему доступны до тех пор, пока они не исчезнут. Библиотека будет включать отдельные классы proto-сообщений, соответствующие каждой активной версии API. Чтобы получить доступ к классу сообщений для определенной версии, укажите параметр ключевого слова version при инициализации клиента, чтобы он всегда возвращал экземпляр из этой заданной версии:

client = GoogleAdsService.load_from_storage(version="/google-ads/api/reference/rpc/v20/")
# The Campaign instance will be from the v20 version of the API.
campaign = client.get_type("Campaign")

Также возможно указать версию при вызове методов get_service и get_type . Это переопределит версию, указанную при инициализации клиента:

client = GoogleAdsService.load_from_storage()
# This will load the v20 version of the GoogleAdsService.
googleads_service = client.get_service(
    "GoogleAdsService", version="v20")

client = GoogleAdsService.load_from_storage(version="v20")
# This will load the v18 version of a Campaign.
campaign = client.get_type("Campaign", version="v18")

Если ключевое слово version не указано, библиотека по умолчанию будет использовать последнюю версию. Обновленный список последних и других доступных версий можно найти в разделе навигации слева в документации API Reference .