Пользовательский отчет Yahoo Gemini возвращает 0 строк - PullRequest
0 голосов
/ 14 июня 2019

Я использую 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

...