Я использую python, чтобы получить пользовательский отчет из API Yahoo Gemini.Используя oauth, я могу получить отчет и вспомогательную информацию из API.Однако в моем отчете, который содержит поля, которые я запросил, нет никакой информации.Отчет содержит 0 строк, когда он должен возвращать информацию для столбцов, выбранных из выбранных мной дат (со вчерашнего дня до одной недели со вчерашнего дня).Кроме того, отчет возвращает поля дважды, и я тоже не знаю, почему это так.Может ли кто-нибудь дать мне некоторое представление о том, что я делаю неправильно, и что я могу исправить, чтобы мой отчет возвращал актуальную информацию?Спасибо
Я пробовал несколько форм получения отчета JSON, который возвращается из моего вызова get в OAUTH.
import time
import urllib.request
import json
import requests
from datetime import datetime as dt, timedelta as td
from yahoo_oauth import OAuth2
#set dates (end date is yesterday, start date is one week before yesterday)
yesterday = (dt.today()-td(1)).strftime('%Y-%m-%d')
start_date = (dt.today()-td(7)).strftime('%Y-%m-%d')
oauth = OAuth2(None, None, from_file='yahoo_credentials/yahooads.json')
if not oauth.token_is_valid():
oauth.refresh_access_token()
response = oauth.session.get("https://api.gemini.yahoo.com/v3/rest/advertiser/")
data = response.content.decode("utf-8")
jdata = json.loads(data)
for j in jdata['response']:
print("Account name: ", j['advertiserName'])
print("Advertiser id: ", j['id'])
print('\n' * 2)
advertiser_id = j['id']
#define payload with chosen fields to return
payload = { "cube": "keyword_stats",
"fields": [
{ "field": "Advertiser ID" },
{ "field": "Day" },
{ "field": "Clicks" },
{ "field": "Device Type" },
{ "field": "Conversions" }
],
"filters": [
{ "field": "Advertiser ID", "operator": "=", "value": advertiser_id},
{ "field": "Day", "operator": "between", "from": start_date, "to": yesterday}
]
}
response = oauth.session.post("https://api.gemini.yahoo.com/v2/rest/reports/custom?reportFormat=json", json=payload)
print(response.content)
print('\n' * 2)
jdata = json.loads(response.content)
job_id = jdata['response']['jobId']
#wait for the report to generate
time.sleep(30)
url = "https://api.gemini.yahoo.com/v2/rest/reports/custom/{}?advertiserId={}".format(job_id, advertiser_id)
response = oauth.session.get(url)
print(response.content)
print('\n' * 2)
rdata = json.loads(response.content)
if 'status' in rdata['response'] and rdata['response']['status'] == 'completed':
report = requests.get(rdata['response']['jobResponse'])
jreport = report.json()
print(jreport)
print('\n' *2)
из print (jreport) это ответ, который я получаю:
{'header':
{'cube': 'keyword_stats',
'fields': [
{'fieldName': 'Advertiser ID', 'fieldType': 'DIM'},
{'fieldName': 'Day', 'fieldType': 'DIM'},
{'fieldName': 'Clicks', 'fieldType': 'FACT'},
{'fieldName': 'Device Type', 'fieldType': 'FACT'},
{'fieldName': 'Conversions', 'fieldType': 'FACT'}]},
'fields': [
{'fieldName': 'Advertiser ID', 'fieldType': 'DIM'},
{'fieldName': 'Day', 'fieldType': 'DIM'},
{'fieldName': 'Clicks', 'fieldType': 'FACT'},
{'fieldName': 'Device Type', 'fieldType': 'FACT'},
{'fieldName': 'Conversions', 'fieldType': 'FACT'}
],
'rows': [],
'rowCount': 0
}
проблема возникает из-за того, что говорится:
'rows': [],
'rowCount': 0
она должна возвращать фактическую информацию в пределах [], а количество строк не должно быть 0