Métodos get de tipo y servicio

La recuperación de referencias a todas las diversas clases de proto requeridas para usar la API en Python puede ser detallada y requiere que tengas una comprensión intrínseca de la API o, con frecuencia, un cambio de contexto para hacer referencia a los protos o la documentación.

Los métodos get_service y get_type del cliente

Estos dos métodos get te permiten recuperar cualquier servicio o objeto de tipo en la API. El método get_service se usa para recuperar clientes de servicio. get_type se usa para cualquier otro objeto. Las clases de cliente de servicio se definen en el código en la ruta de versión google/ads/googleads/v*/services/services/, y todos los tipos se definen en las diversas categorías de objetos, google/ads/googleads/v*/common|enums|errors|resources|services/types/. Se genera todo el código que se encuentra debajo del directorio de la versión, por lo que la práctica recomendada es usar estos métodos en lugar de importar los objetos directamente, en caso de que cambie la estructura de la base de código.

A continuación, se muestra un ejemplo de cómo usar el método get_service para recuperar una instancia del cliente 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 v17 version of GoogleAdsService will
# be returned.
client = GoogleAdsClient.load_from_storage(version="v17")
googleads_service = client.get_service("GoogleAdsService")

Este es un ejemplo de cómo usar el método get_type para recuperar una instancia de Campaign.

from google.ads.googleads.client import GoogleAdsClient

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

Enumeradores

Si bien puedes usar el método get_type para recuperar enumeraciones, cada instancia de GoogleAdsClient también tiene un atributo enums que carga las enumeraciones de forma dinámica con el mismo mecanismo que el método get_type. Esta interfaz está diseñada para ser más simple y fácil de leer que usar get_type:

client = GoogleAdsClient.load_from_storage(version=v17)

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

Los campos de objetos proto que son de enumeración se representan en Python con el tipo nativo enum. Eso significa que puedes leer con facilidad el valor del miembro. Trabaja con la instancia campaign del ejemplo anterior en un repositorio de Python:

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

A veces, es útil saber el nombre del campo que corresponde al valor de enumeración, como se muestra más arriba. Puedes acceder a esta información con el atributo name:

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

La interacción con enumeraciones es diferente según si la configuración de use_proto_plus está establecida en true o false. Si deseas obtener detalles sobre las dos interfaces, consulta la documentación sobre mensajes protobuf.

Control de versiones

Se mantienen múltiples versiones de la API al mismo tiempo. Si bien v17 puede ser la versión más reciente, se podrá acceder a las versiones anteriores hasta que se descontinúen. La biblioteca incluirá clases de mensajes proto independientes que correspondan a cada versión activa de la API. Para acceder a una clase de mensaje de una versión específica, proporciona el parámetro de palabra clave version cuando inicialices un cliente para que siempre muestre la instancia de esa versión:

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

También es posible especificar la versión cuando se llama a los métodos get_service y get_type. Esto anulará la versión proporcionada cuando se inicialice el cliente:

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

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

Si no se proporciona un parámetro de palabra clave version, la biblioteca usará la versión más reciente de forma predeterminada. Puedes encontrar una lista actualizada de las versiones más recientes y otras disponibles en la sección de navegación del lado izquierdo de la documentación de Referencia de la API.