как использовать oauth2 для автоматизации отчетов dv360 с использованием dbm api python?
Я пытаюсь автоматизировать запланированный отчет, используя python из DV360.
Насколько я понимаю, вам нужно использовать API DBM для этого.
Для начала он говорит:
- включить API DBM в консоли Google - готово.
- После того, как вы включили свой API DBMI, он автоматически перенаправит вас в раздел учетных данных DBM и сообщит, какие существующие учетные данные в вашем проекте совместимы с API.
• У меня есть учетные данные настольного приложения oauth2, совместимые с API. • Я загрузил json для этих учетных данных.
Однако у меня возникли проблемы с пониманием того, как настроить клиента, используя инструкции, представленные в документации.
Для справки я успешно настроил поток для использования моих учетных данных в отдельном скрипте и сохранил access_token и refresh_token.
Сценарий для настройки потока приведен ниже.
# Mandatory module to authenicate desktop app flow.
from google_auth_oauthlib.flow import InstalledAppFlow
#logging script when communicating with google ads support to troubleshoot
import logging
logging_config = logging.basicConfig(level=logging.INFO, format='[%(asctime)s - %(levelname)s] %(message).5000s')
logging.getLogger('google.ads.googleads.client').setLevel(logging.INFO)
#Code begins to retrieve Credentials:
#sets scope
scopes = ['https://www.googleapis.com/auth/analytics',
'https://www.googleapis.com/auth/spreadsheets',
"https://www.googleapis.com/auth/bigquery",
'https://www.googleapis.com/auth/doubleclickbidmanager',
'https://www.googleapis.com/auth/adwords'
]
client_secrets_path = 'pathtoauth2desktopcreds.json'
flow = InstalledAppFlow.from_client_secrets_file(
client_secrets_path, scopes=scopes
)
flow.run_console()
print("Access token: %s" % flow.credentials.token)
print("Refresh token: %s" % flow.credentials.refresh_token)
Чтобы настроить клиента, похоже, вам нужно добавить информацию об учетных данных, где http
discovery.build(API_NAME, API_VERSION, http=http)
В api google-ads, если вы используете модуль python / sdk google-ads, есть возможность настроить учетные данные с помощью элемента словаря. Это в идеале то, чем я хотел бы заниматься.
Посмотрев на код в github для dv360 о том, как настроить клиента (util.py), похоже, что большая часть скрипта тратится на попытки получить учетные данные, сначала используя учетные данные по умолчанию, пытаясь использовать значение по умолчанию, если это не работает затем используйте учетные данные в сохраненном файле json. Последние две строки фактически пытаются настроить объект dbm с помощью функции сборки.
# Authorize HTTP object with the prepared credentials.
http = credentials.authorize(http=httplib2.Http())
# Construct and return a service object via the discovery service.
return discovery.build(API_NAME, API_VERSION, http=http)
https://github.com/googleads/googleads-bidmanager-examples/blob/master/python/util.py
может кто-нибудь, пожалуйста, скажите мне:
- какие элементы мне нужно иметь в секретах клиентов в качестве словаря?
В другом скрипте у меня есть следующие модули:
#read in google: big query and google ads oauth
from google.cloud import bigquery
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
import re
Я попытался создать словарь, вставив значения в мой файл json в качестве словаря и добавив в поля access_token и обновить токен
creds = {"client_id":"xxxxx",
"project_id":"xxxxxx",
"auth_uri":"xxxxx",
"token_uri":"xxxxxxxxxn",
"auth_provider_x509_cert_url":"xxxxxxxxx",
"client_secret":"xxxxxxxx",
"access_token": access_token,
"refresh_token": refresh_token,
"redirect_uris": ["urn:ietf:wg:oauth:2.0:oob","http://localhost"]}
Тогда я пытаюсь бежать
dbm = build('doubleclickbidmanager', 'v1.1', credentials = creds)
Когда я запускаю это, я получаю сообщение об ошибке, и он не настраивает AttributeError: объект 'dict' не имеет атрибута 'authorize'
- что мне нужно сделать, чтобы мои учетные данные словаря заставили его работать?
Большое спасибо!