60

自分のGAアカウントからGoogleAnalyticsデータを定期的に取得するサーバーアプリケーションを作成しようとしています。これは、私自身のデータにアクセスする個人的なサーバー側のアプリケーションです。つまり、このアプリケーションにアクセスするエンドユーザーは存在しません。

そのため、アプリケーションをGoogle APIコンソールサービスアプリケーションとして登録しました。これにより、クライアントID秘密鍵が提供されました。このサーバー間認証フローにはエンドユーザーがいないため、サービスアプリケーションはアプリケーションシークレットおよびリダイレクトURLを使用しないことを理解しています。実際、Google APIコンソールは私に秘密を与えず、リダイレクトURLの入力を求めませんでした。

残念ながら、 GoogleのPHPクライアントAPI内でサービスアプリケーションを認証する方法がわかりません。エンドユーザーによるWebアプリケーションの認証に関する広範なドキュメントがあります。

Googleのドキュメントによると、秘密鍵を使用してJWTリクエストに署名することで、サーバー間で認証を行うことができます。PHPクライアントAPI内での方法がわかりません(ただし、ソースを参照し、秘密鍵を使用して要求に署名するスクリプトは間違いなくあります)。

ここで何かが足りませんか?秘密鍵とGooglePHPクライアントAPIを使用してサービスアプリケーションの認証を実行するにはどうすればよいですか?

わかりやすくするために編集

4

4 に答える 4

107

2012年7月21日更新

Google Analytics API V3は、.p12署名されたJWTリクエストによって返されるOAuth2トークンをサポートするようになりました。つまり、サービスアカウント付きのAnalyticsAPIを使用できるようになりました

現在、その地獄のために、 4年間の日々の測定基準を引き出しています。

これが簡単な「n」ダーティステップバイステップです:

  1. Google APIコンソールに移動して、新しいアプリを作成します

  2. [サービス]タブで、GoogleAnalyticsスイッチを切り替えます

  3. [ APIアクセス]タブで、[ OAuth2.0クライアントIDの作成]をクリックします

    • 名前を入力し、ロゴをアップロードして、[次へ]をクリックします

    • [サービスアカウント]オプションを選択し、[クライアントIDの作成]を押します

    • 秘密鍵をダウンロードする

  4. これで、 APIアクセスページに戻ります。クライアントIDメールアドレスが記載されたサービスアカウントというセクションが表示されます

    • メールアドレスをコピーします(####@developer.gserviceaccount.comなど

    • GA管理者にアクセスし、このメールをユーザーとしてプロパティに追加します

    • これは必須です。そうしないと、不可解なエラーが発生します。

  5. Githubから最新のGooglePHPクライアントAPIを入手する

    git submodule add https://github.com/google/google-api-php-client.git google-api-php-client-read-only
    
  6. Rock'n' roll(更新されたクラス名に関するヒントをありがとうございます):

    // api dependencies
    require_once(PATH_TO_API . 'Google/Client.php');
    require_once(PATH_TO_API . 'Google/Service/Analytics.php');
    
    // create client object and set app name
    $client = new Google_Client();
    $client->setApplicationName(APP_NAME); // name of your app
    
    // set assertion credentials
    $client->setAssertionCredentials(
      new Google_Auth_AssertionCredentials(
    
        APP_EMAIL, // email you added to GA
    
        array('https://www.googleapis.com/auth/analytics.readonly'),
    
        file_get_contents(PATH_TO_PRIVATE_KEY_FILE)  // keyfile you downloaded
    
    ));
    
    // other settings
    $client->setClientId(CLIENT_ID);           // from API console
    $client->setAccessType('offline_access');  // this may be unnecessary?
    
    // create service and get data
    $service = new Google_Service_Analytics($client);
    $service->data_ga->get($ids, $startDate, $endDate, $metrics, $optParams);
    

 

以下の元の回避策


ドキュメントがあいまいであるにもかかわらず、GoogleAnalyticsを含むほとんどのGoogleAPIはまだサービスアカウントをサポートしていないようです。.p12署名付きJWTリクエストによって返されたOAuth2トークンをダイジェストすることはできません。そのため、現時点では、サービスアカウントでGoogle AnalyticsAPIV3を使用することはできません

回避策:

  1. Google APIコンソールで、クライアントアプリケーションを作成します。

  2. Google PHPクライアントAPIの例の手順に従って、、、、およびclient_auth_urlを使用してを生成しますclient_idclient_secretredirect_uri

  3. cURLを使用してGoogleにログインします。(必ずCookieファイルを使用してください!)

  4. client_auth_urlin cURLを開き、フォームに入力します。curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);を設定し curl_setopt($ch, CURLOPT_HEADER, 1); ていることを確認してください。応答authorization_codeLocation:ヘッダーに表示されます。

  5. 手順4の、、、、およびアクティベーションコードを使用してclient_idGoogleのOAuth2トークンマシンにリクエストを投稿します。投稿フィールドに必ず含めてください。client_secretredirect_urigrant_type = "authorization_code"

  6. やあ、あなたは今、refresh_token期限が切れることのないものを持っています、そして働いていaccess_tokenます!、、、を使用してGoogleのOAuth2トークンマシンにリクエストを投稿し、client_id有効期限が切れると新しいリクエストを取得します。client_secretredirect_urirefresh_tokenaccess_token

于 2012-04-10T13:26:22.680 に答える
4

Google API PHPクライアントは、トランク上のサービスアカウントをサポートするようになりました。

実装はまだリリースされていないため、最新バージョンのPHPクライアントをチェックアウトする必要があります。

サービスアカウントを使用してGooglePredictionAPIにアクセスする方法を示すサンプルアプリケーションを用意しました。例を表示するには、examples / prediction / serviceAccount.phpを確認するか、 http ://code.google.com/p/google-api-php-client/source/browse/trunk/examples/prediction/serviceAccountにアクセスしてください。 .php

于 2012-03-26T16:40:05.687 に答える
2

GoogleのPHPクライアントAPIを使用している場合は、Google APIコンソールAPI Accessに移動し、左側をクリックします。

次にCreate a Client ID。それはあなたに与えるでしょうsecretそしてそれはあなたがあなたを設定する場所ですredirect URL。リダイレクトURLは提供されません。これは、認証後にアプリがユーザーに送り返すURLです。

あなたが見ることができる他の認証方法があります。

于 2012-03-25T21:15:00.133 に答える
2

非常に便利なphpライブラリGAPI(Google Analytics API PHPインターフェイス)を使用して、OAuthなしでGoogleAnalyticsにアクセスできます。使い方は簡単です。

于 2012-09-19T21:34:54.693 に答える