как автоматизировать и извлекать отчеты из dv360 api с помощью dbm api и учетной записи службы google oauth python?
Я пытаюсь автоматизировать запланированный отчет, используя python из DV360.
Насколько я понимаю, вам нужно использовать API DBM для этого.
Для начала он говорит:
- включить API DBM в консоли Google - готово.
- После того, как вы включили свой API DBMI, он автоматически перенаправит вас в раздел учетных данных DBM и сообщит, какие существующие учетные данные в вашем проекте совместимы с API.
• У меня есть текущая учетная запись службы, совместимая с API.• Я скопировал адрес электронной почты учетной записи службы и настроил профиль пользователя для электронной почты в DV360 с правами администратора.
Мой код ниже выглядит следующим образом:
# читать в модулях очистки Python
import pandas as pd
from pandas.io import gbq
import numpy as np
import datetime
#read in service account oauth
from google.oauth2 import service_account
#read in other google modules needed
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
SCOPES = ["https://www.googleapis.com/auth/spreadsheets",
"https://www.googleapis.com/auth/bigquery",
"https://www.googleapis.com/doubleclickbidmanager"]
SERVICE_ACCOUNT_FILE = 'pathtoserviceaccountcreds.json'
creds = None
creds = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES)
dbm = build('doubleclickbidmanager', 'v1.1', credentials = creds)
body={
'params': {
'type': 'TYPE_GENERAL',
'metrics': [
'METRIC_IMPRESSIONS', 'METRIC_CLICKS',
'METRIC_REVENUE_ADVERTISER'
],
'groupBys': [
'ADVERTISER', 'ADVERTISER_ID', 'INSERTION_ORDER','INSERTION_ORDER_ID',
'ADVERTISER_CURRENCY'
],
'filters': [{
'type': 'FILTER_ADVERTISER',
'value': 'XXXXXXXXX'
}],
},
'metadata': {
'title': 'DV360 Automation API-generated report',
'dataRange': 'LAST_90_DAYS',
'format': 'csv'
},
'schedule': {
'frequency': 'ONE_TIME'
}
}
Когда я запускаю код до dbm, который использует метод сборки для настройки клиента google apis, кажется, что он правильно настроен
вывод, он возвращает, это googleapiclient.discovery.Resource at 0x1200e8d90
Однако, когда я пытаюсь запустить приведенный ниже код, чтобы попытаться создать запрос, я получаю следующую ошибку
dbm.queries().createquery(body=report_definition).execute()
RefreshError: ('Нет токена доступа в ответе.', {'Id_token': 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjI3YzcyNjE5ZDA5MzVhMjkwYzQxYzNmMDEwMTY3MTMLCiJQxYzNmMDEwMTY3MTMLCiFlJG1ZiTMiCiCiQiQiQiQiQiQiQiQiQiQiQiQiQiQiQifBoy73zflwNMpgfzNErJZz7vhb4xmUJwJp9teHdemgkSDVPb5IwXiZA2JL9MSyL7glB6eaWHQRni8uJTWp_nxQlUzfH6G7uBf49F9eMxCMTgu_VbvHh0RENlxmbW9w2jJ-ezSNHHK4qlgr0Rb6dqNEKJV8GiIasxO5jhb3CM5-nwDN055dSKyWEyk98u9_DarnE1suv-e_RwcqhpsVCR0sl45Z-dp0k52uSSbF14iv0VbVyQfSfN7II2b0miNiCbDlmN4Ak-h3pP3w5b0LrUYhX0Jvq_83gz35BV2LkwQ9fDx6r8_tymrGjmrhC-QzHD8a4a1whUcpW4Ygd5sXkoFA'})
Есть 2 потока из всех потоков DBM / dv360, существующих в стеке, которые наиболее точно соответствуют моему вопросу, но ни один из них не является окончательным, и всем им больше года
вы можете найти кейсы:
API-интерфейс диспетчера Doubleclickbid с использованием служебного аккаунта
Как использовать API диспетчера ставок по двойному щелчку (DBM) в Python
Для справки я также использовал суперадминистратора в консоли Google, чтобы предоставить доступ на уровне домена к учетной записи службы, которую я использую, с указанными выше областями действия в соответствии с приведенной ниже ссылкой на документацию:https://developers.google.com/identity/ протоколы / oauth2 / сервис-аккаунт
Я также попытался запустить версию, в которой я настраиваю делегированные учетные данные, в которых в примере электронной почты, который я использовал, есть как доступ администратора для доступа к DV360, так и моя учетная запись службы.
delegated_creds = creds.with_subject('example@.email.com')
снова, когда я запускаю сборку с использованием delegated_creds вместо учетных данных, похоже, что он правильно настраивает
dbm = build('doubleclickbidmanager', 'v1.1', credentials = delegated_creds)
он возвращает googleapiclient.discovery.Resource по адресу 0x11a89f5b0
• но снова код ломается, когда вы запускаете метод .execute ().
dbm.queries().listqueries().execute()
возвращает ошибку:HttpAccessTokenRefreshError: invalid_scope: https://www.googleapis.com/auth/spreadsheets не является допустимой строкой аудитории.
• ошибка повторяется, даже если я удалю другие области и просто оставлю
RefreshError: ('invalid_scope: https://www.googleapis.com/doubleclickbidmanager не является допустимой строкой аудитории.', {'Error': 'invalid_scope', 'error_description': 'https://www.googleapis.com/ doubleclickbidmanager не является допустимой строкой аудитории.'})
для записи он правильно настроит клиент dbm, если я запустил
dbm.queries().listqueries().
он возвращает googleapiclient.http.HttpRequest по адресу 0x11aab6170
Может кто-нибудь помочь?
также путь к моим учетным данным правильный, так как я могу использовать API листов Google с этим.