このページのGoogleアナリティクスのステップバイステップガイドに基づいて、スクリプトを作成しています。
https://developers.google.com/analytics/resources/tutorials/hello-analytics-api
データへのアクセスを試行するまで、認証は問題なく行われます。戻りコードは403で、エラーメッセージは次のとおりです。
ユーザーにはGoogle Analyticsアカウントがありません
このメッセージには意味がありません。私のアカウントには複数のWebサイトを追跡するGoogle分析データがあり、Webブラウザーから問題なくアクセスできます。 Google APIコンソールからAnalytics APIを許可しました。APIアクセスにより適切なデータが提供されます。
私もこの問題を抱えていました。サービスアカウントのメールアドレスを、アクセスしたいGoogleアナリティクスプロファイルに追加して修正しました。
Google APIコンソールの[APIアクセス]タブを見て、サービスアカウントのメールアドレス([email protected]など)を取得しました。
次に、 Googleのアナリティクスプロファイルにメールアドレスを追加する手順 に従いました。これで、すべてが期待どおりに機能します。
幸運を!
私は同じ問題に直面していました。サービスアカウントユーザー(your [email protected])のメールIDをアナリティクスアカウントのユーザーに追加することで解決しました。
分析-ホームページ->管理者(左ペイン)->ユーザー管理->追加(メニューの右側にあるプラス記号をクリック)->新規ユーザーの追加->電子メールアドレスの入力に電子メールIDを追加します。
これで問題は解決します。
また、認証しようとしているGoogleアカウントでログインしたことがない場合にも、このエラーが発生します。
メールアカウントのアクセス許可をGoogleアナリティクスの内部から「読み取りと分析」から別のものに変更し、保存してからアクセス許可を「読み取りと分析」に戻すまで、403エラーが発生していました。
403エラーが発生していました。これらの手順は、私を回避しました。明確にするために、Googleのサンプル「HelloAnalytics.php」をOAuth(cronジョブなどに適したユーザーとの対話なし)で動作させようとしていました。
Analytics APIを有効にした後、APIとAuth/Credentialsの下に新しい「サービスアカウント」を作成しました。 .p12キーペアを保存しました。次に、Analyticsユーザー管理コンソールにアクセスし、そのサービスユーザーのメールアドレスを追加しました。
許可リストでonly "Read&Analyze" onlyをオフにすると、PHP APIを使用した.p12認証が機能します。 「ユーザーの管理」および/または「編集」を追加すると、403が表示されます。これが役立つことを願っています。
私もこの問題を抱えていましたが、問題は、あまりにも多くの許可を要求したことであることがわかりました。開発者コンソールは、http://www.googleapis.com/auth/analytics
およびhttp://www.googleapis.com/auth/analytics.readonly
の両方の許可を要求するように指示します。 sub
クレームも使用していた場合、これは機能しませんでした。 sub
クレームは、他のユーザーに代わって —私の場合、サービスアカウントを所有するGoogleアカウントで動作するアクセストークンを発行するようGoogleに指示します。私はanalytics
パーミッションを削除し、サブクレームでanalytics.readonly
に固執しました:
{
"iss":"123123123123123-xxxxxxxxxxxxxxxxxxxxxxxx@developer.gserviceaccount.com",
"sub":"[email protected]"
"scope":"http://www.googleapis.com/auth/analytics",
...
}
発行されたBearerトークンにより、まったく異なるGoogleアカウントが所有しているが、Gmailユーザー([email protected])と共有(読み取り専用)されているプロファイルに対して(少なくともいくつかの)Google Analyticsクエリを実行できます。 。
Google Analyticsにサインインしなかったため、同じエラーが発生しました。そのため、分析アカウントにサインインして解決しました。
APIを使用しようとしているユーザーは、GAサービスを有効にしていません。
単にGoogleアカウントを持っているだけでは不十分です 。
...ただし、Googleアカウントを持っているだけでは、アナリティクスへのアクセスが自動的に許可されるわけではありません。まず、Google Analyticsに登録する必要があります。これは1回限りの簡単なプロセスです...
私はそれを確認することでこれを修正することができました
client = Google :: APIClient.new(:application_name => 'X'、:application_version => '1')
上記のアプリケーション名変数 'Xは、GAダッシュボード上のアカウント名であり、プロパティ名ではなく、私の場合はアクセスしたいサイトの実際のURLです。
混乱しますが、ありがたいことに修正しました(Googleに感謝しません!)
この問題は、「サブ」引数を提供しないために発生します。これを提供しない限り、呼び出しはその長いサービスアカウントのメールに代わって行われます。
したがって、サブ引数を指定するだけで、レポートで既にアクセス権を付与している電子メールで、うまくいくはずです!
サービスアカウントを使用する代わりに、OAuth client ID
資格情報を使用して、(このスレッドの上位の回答に従って)新しいユーザーアクセス許可を追加する必要を回避できます。
APIクレデンシャルダッシュボード に移動し、[クレデンシャルの作成]-> [OAuthクライアントID]をクリックします。その後、APIの認証に必要なクライアントIDとクライアントシークレットを取得する必要があります。
OAuth2WebServerFlow
を使用して、使用ごとに認証できるようになりました。 python3の例を次に示します。
from apiclient.discovery import build
from oauth2client.client import OAuth2WebServerFlow
# TODO: Fill these in...
CLIENT_ID = ''
CLIENT_SECRET = ''
VIEW_ID = ''
flow = OAuth2WebServerFlow(
CLIENT_ID, CLIENT_SECRET,
'https://www.googleapis.com/auth/analytics.readonly',
redirect_uri='urn:ietf:wg:oauth:2.0:oob'
)
authorize_url = flow.step1_get_authorize_url()
print('Receive code from:\n%s\n' % authorize_url)
code = input('Enter code here:').strip()
credentials = flow.step2_exchange(code)
api = build('analyticsreporting', 'v4', credentials=credentials)
body={
'reportRequests': [{
'viewId': VIEW_ID,
'dateRanges': [{'startDate': '7daysAgo', 'endDate': 'today'}],
'metrics': [{'expression': 'ga:sessions'}],
'dimensions': [{'name': 'ga:country'}]
}]
}
data = api.reports().batchGet(body=body).execute()