1

Google Search Console(ウェブマスターツール)からサービスアカウントを使用してデータを取得する必要があります。サービスアカウントを使用してGoogle Search Console APIを照会できない

これまでのところ、リクエストのURLに追加するサービスアカウントのaccess_tokenを取得できました。

function retrieveSearchesByQuery(token) 
    { 
     gapi.client.webmasters.searchanalytics.query(
     { 
      'access_token': token, 
      'siteUrl': 'http://www.WEBSITE.com', 
      'fields': 'responseAggregationType,rows', 
      'resource': { 
       'startDate': formatDate(cSDate), 
       'endDate': formatDate(cEDate), 
       'dimensions': [ 
        'date' 
       ] 
      } 
     }) 
     .then(function(response) { 
      console.log(response); 
     }) 
     .then(null, function(err) { 
      console.log(err); 
     }); 
    } 

を。これは、関数によって呼び出されるURLです:

https://content.googleapis.com/webmasters/v3/sites/http%3A%2F%2Fwww.WEBSITE.com/searchAnalytics/query?fields=responseAggregationType%2Crows&alt=json" 

代わりに、それはすべき問題は、私はそうする方法を見つけることができないということです、これは私が使用しているコードです。

https://content.googleapis.com/webmasters/v3/sites/http%3A%2F%2Fwww.WEBSITE.com/searchAnalytics/query?fields=responseAggregationType%2Crows&alt=json&access_token=XXX" 

gapi.client.webmasters.searchanalytics.queryは、このように、それはURLに追加していないと私は応答として401 Unauthorizedを得る理由です有効なキーとして'access_token'を認識しません。このようなものになります。

私は'key'の代わり'access_token'を使用する場合、パラメータはURLに付加されますが、私は合格したサービスアカウントのトークンが有効ではありませんので、'key'OAuth2認証に使用されます。

これには解決策があるのでしょうか?

答えて

1

アプリケーションでプライベートデータが要求されている場合、そのデータにアクセスできる認証済みユーザーが要求を承認する必要があります。 Search Console APIのthe documentationに指定されているとおり、アプリケーションではOAuth 2.0を使用してリクエストを承認する必要があります。その他の認可プロトコルはサポートされていません。

アプリケーションがcorrectly configuredの場合、Google APIを使用すると、認証されたリクエストは認証されていないリクエストとまったく同じように見えます。 the documentationに記載されているように、アプリケーションがOAuth 2.0トークンを受け取った場合、JavaScriptクライアントライブラリはそのリクエストにOAuth 2.0トークンを自動的に組み込みます。

正しく受信した場合はaccess_tokenを取得したと言われていますが、APIクライアントが自動的にこのトークンを送信します。自分で追加する必要はありません。

非常に基本的な認証ワークフローと認証済みワークフローは、次のコードのようになります。 Search Console APIでは、https://www.googleapis.com/auth/webmastershttps://www.googleapis.com/auth/webmasters.readonlyのスコープを使用できます。この時点で

var clientId = 'YOUR CLIENT ID'; 
var apiKey = 'YOUR API KEY'; 
var scopes = 'https://www.googleapis.com/auth/webmasters'; 

function auth() { 
    // Set the API key. 
    gapi.client.setApiKey(apiKey); 

    // Start the auth process using our client ID & the required scopes. 
    gapi.auth2.init({ 
     client_id: clientId, 
     scope: scopes 
    }) 
    .then(function() { 
    // We're authenticated, let's go... 
    // Load the webmasters API, then query the API 
    gapi.client.load('webmasters', 'v3') 
     .then(retrieveSearchesByQuery); 
    }); 
} 

// Load the API client and auth library 
gapi.load('client:auth2', auth); 

それは、クエリでそれを渡すためにもう引数でトークンを取得する必要がないので、あなたのretrieveSearchesByQuery機能を変更する必要があります。 JavaScriptクライアントライブラリは自動的に要求にそれを含める必要があります。

API Explorerを使用して、特定のクエリでサポートされているパラメータを確認し、関連する要求を確認することもできます。

gapi.auth.setToken(token_Object); 
+0

ありがとう:サービスアカウントの場合でなければなりません外部で生成されたアクセストークンを、使用する必要がある場合

は、あなたが必要なセットを自分のアプリケーションのためのOAuth 2.0 token objectからgapi.auth.setToken methodを使用するように!最後の解決策はうまくいきましたが、以下の構文で動作します: 'gapi.auth。私は文字列を持っている間にメソッドがtokenObjectを受け入れるので、setToken({ access_token: "YOUR_TOKEN_HERE" });今すぐログインしてデータを正しく取得できます – Signo

関連する問題