0

Google Analyticsから昨日のデータを引き出すPythonスクリプトを作成しました。私はGoogle Reporting API v4でOAuth v2を使用しています。スクリプトのバックボーンは、見出しの制限を克服するための再帰を含め、結果をCSVファイルに出力することを除いて、Googleのサンプル版と本質的に同じです。 今日では403エラーを返すために始めた:Google Reporting API v4を使用して以前にPythonスクリプトを実行中403

HttpError 403 when requesting https://analyticsreporting.googleapis.com/v4/reports:batchGet?alt=json returned "The caller does not have permission" 

私は解決策を検索することによって、自分のデューデリジェンスをしましたが、私はすでにViewIDを使用していますし、それが実行しているコンピュータは、他のアカウントに署名されていません(レポートを実行するだけです)。また、新しいclient_secrets.jsonファイルを作成して、クォータ内にいることを確認しようとしましたが、問題は引き続き発生します。昨日から今日までは何も変わっていませんが、今日は走ることを拒否しています。私は、同じ接続オブジェクトを使用してい

EDIT が、それは一度だけインスタンス化されます、コードはここにGoogleのウェブサイト上とまったく同じである - >Hello Analytics Reporting API v4 - Python

def initialize_analyticsreporting(): 
    parser = argparse.ArgumentParser(
     formatter_class=argparse.RawDescriptionHelpFormatter, 
     parents=[tools.argparser]) 
    flags = parser.parse_args([]) 

    flow = client.flow_from_clientsecrets(
     CLIENT_SECRETS_PATH, scope=SCOPES, 
     message=tools.message_if_missing(CLIENT_SECRETS_PATH)) 

    storage = file.Storage('analyticsreporting.dat') 
    credentials = storage.get() 
    if credentials is None or credentials.invalid: 
    credentials = tools.run_flow(flow, storage, flags) 
    http = credentials.authorize(http=httplib2.Http()) 

    analytics = build('analytics', 'v4', http=http, discoveryServiceUrl=DISCOVERY_URI) 
    return analytics 

私はそれをbatchGetを呼び出しています私は方法と同様、再帰と一緒に指数バックオフを使用することによってこの問題を回避および/ exceptブロック試すことができたので...

response = analytics.reports().batchGet(body=loaded_request.get("request", {})).execute() 
+0

あなたがログインしているユーザーは、データを抽出しているビューに対して[読み取りと分析]権限を持っていますか? – vinoaj

+0

はい、アカウントはそうです。最初のリクエストでも、それ以降のリクエストでも同じIDが表示されていても、 – MosaicOrange

+0

が最初のリクエストで動作し、それ以降のリクエストでは機能しない場合は、後続の呼び出しで正しい資格情報を渡しません。あなたのコードを見るのに役立つだろうか。 – vinoaj

答えて

1

などの各要求のメソッドここではGoogleがお勧め - そのよう>Error Responses

try: 
    response = analytics.reports().batchGet(body=loaded_request.get("request", {})).execute() 
except HttpError as err: 
    print(err) 
    time.sleep(2**expontential_backoff) 
    expontential_backoff += 1 
    if expontential_backoff < 5: 
     get_response(analytics, request, page_token, file_name, expontential_backoff) 
    else: 
     print("expontential_backoff:", expontential_backoff, "Exceeded") 
    return 

ときのn> 1で、それは通常だけで正常に動作したときにエラーがその後、ヒットした場合。私はこの方法が大変好きではありません。理想的には正しく動作させたいと思っています。

他に解決策がない場合は、これが将来的に誰かに役立つことを願っています。

関連する問題