2016-10-13 16 views
1

Pythonを使用してYouTubeアナリティクスAPIに接続しようとしています。 [資格情報]タブでGoogleのデベロッパーコンソールにアクセスしたら、Create credentialsのプルダウンメニューをクリックし、Help me chooseを選択します。私は使用したいAPI(YouTube Analytics API)をクリックします。そこから(Other non-UI (e.g. cron job, daemon))、アクセスするデータ(Application Data)、次にGoogle App Engine(no)を使用していますか。ボタンをクリックすると、必要な資格情報が表示され、You alread have credentials that are suitable for this purposeと伝えます。Google API認証(サービスアカウント)エラー:HttpAccessTokenRefreshError:unauthorized_client:リクエストの不正なクライアントまたはスコープ

Google Search Console APIに接続して自分の所有する複数のサイトのデータにアクセスするために使用するService accountがあります。複数のサイトがあるため、私は電子メールアドレスに基づいて委任された資格情報を使用します。私はYouTubeアナリティクスのAPIと同様のアプローチを使用しようとしているが、私はこのエラーを取得しています、今

from httplib2 import Http 
from oauth2client.service_account import ServiceAccountCredentials 
from apiclient.discovery import build 

scopes = ['https://www.googleapis.com/auth/webmasters.readonly'] 
credentials = ServiceAccountCredentials.from_json_keyfile_name('keyfile.json', scopes=scopes) 

delegated_credentials = credentials.create_delegated('<my-email>') 
http_auth = delegated_credentials.authorize(Http()) 

webmasters_service = build('webmasters', 'v3', http=http_auth) 

HttpAccessTokenRefreshError: unauthorized_client: Unauthorized client or scope in request.をこれは私が検索コンソールのAPIへの認証に使用するコードです。

from httplib2 import Http 
from oauth2client.service_account import ServiceAccountCredentials 
from apiclient.discovery import build 

START_DATE = "2016-09-01" 
END_DATE = "2016-09-30" 

scopes = ['https://www.googleapis.com/auth/yt-analytics.readonly'] 
credentials = ServiceAccountCredentials.from_json_keyfile_name('keyfile.json', scopes=scopes) 

delegated_credentials = credentials.create_delegated('<my-email>') 
http_auth = delegated_credentials.authorize(Http()) 

youtube_service = build('youtubeAnalytics', 'v1', http=http_auth) 

analytics_query_response = youtube_service.reports().query(
    ids="channel==<my-youtube-channel-id>", 
    metrics="views", 
    start_date=START_DATE, 
    end_date=END_DATE 
).execute() 

keyfile.jsonは、(サービスアカウントの資格情報を含む)と同じファイルである私は検索コンソールのAPIに接続するために使用します。ここに私のコードです。私も新しいサービスアカウントを作成し、それらの資格情報を使用しようとしましたが、私は運がありませんでした。そして、はい、デベロッパーコンソールですべてのYouTube APIを有効にしました。

なぜHttpAccessTokenRefreshError: unauthorized_client: ...エラーが発生しているのですか?

編集:以前は、サービスアカウントではなくOAuth IDを使用しました。スクリプトを実行したときにブラウザタブが表示され、アカウントを選択する必要がありました。私は2つのオプションを提示されました:1つは私の電子メールでした、もう1つは私がマネージャーとして追加されたYouTubeアカウントでした。メールアドレスを使用して(YouTubeアカウントではなく)資格情報を生成しているため、このエラーが発生していると思いますか?

edit2:YouTubeアカウントは、Google Appsドメインの傘下にはないようです。だから、私は自分のメールアドレスを使ってそのYouTubeアカウントのマネージャーになっていても、自分のメールアドレスの使用を許可できないのかもしれません。

+0

あなたのIPアドレス – MatejMecka

+0

@UnknownDeveloperからコンソールからのアクセスを有効にしたことはありますかどうか正確ではありませんが、Google Search Console APIにも同じエラーが表示されますか? YouTube Analytics APIだけであるSearch Console APIに問題はありません。 FYI私はOAuthのアプローチを使用したときに何が起こったのかを説明するいくつかの情報を私の質問に追加しました。 – Abundnce10

答えて

2

これは、documentationで、YouTubeアナリティクスAPIでサービスアカウントを使用できないことがわかりました。

ことここに記載されている:私はまた、Google社員で答え、このthreadでそれを見つけた

The service account flow supports server-to-server interactions that do not access user information. However, the YouTube Analytics API does not support this flow. Since there is no way to link a Service Account to a YouTube account, attempts to authorize requests with this flow will generate an error.

詳細については、SO questionを確認してください。

+0

ニースが見つかりました、KENdi!私は、認可文書のService Accountsセクションを読んでいる間に気付かなかった。では、OAuthを使用して認証する必要がありますか? cronジョブを実行しているサーバーから可能ですか? – Abundnce10

関連する問題