2012-01-31 6 views
7

私は、プログラムでログインしてAnalyticsにログインし、データを取得する最も簡単な方法を探しています。 Googleのドキュメントでは、Oauth 2.0の例を書いて、ユーザーに手動でログインし、許可を得て自分のサイトにリダイレクトされる例を挙げています。しかし、これは私が達成したいものではありません。ユーザー/パスやその他の認証キーをハードコードする必要がある自動ツールを構築しています。ユーザーの関与なしでログインしてください(これは定期的なレポートツールです) 。Google AnalyticsのJavaでの承認

私は既にAPI KEYについて何か知っていますが、それを行う方法やGoogleのJavaライブラリを使ってその方法を見つけることができません。

私は正しい方向に私を向けることに非常に感謝します。また、これは他の人にとって最も簡単なやり方をするための貴重な手掛かりになるかもしれません。

答えて

2

最終的にCore Reportingの2.4バージョンで解決しました。あなたのGmailユーザー/パスに自動化があります。なぜなら、新しい3.0バージョンでこれを行う方法がないのはなぜかと思います。 2.4を報告

コア:http://code.google.com/intl/pl-PL/apis/analytics/docs/gdata/v2/gdataJava.html

+0

あなたの投稿は本当に私を助けます。 3.0バージョンのドキュメントはとても混乱して無駄です。これは、client_secrets.jsonをコンパイルする方法などの重要なステップを多く逃し、そのような 'what !!'を指摘しています。リンク。再度、ありがとうございます。 –

+0

そのページがGoogleによって削除されました。私は過去20日間この問題に直面しています.Googleアナリティクスデータにアクセスするために正確に何が使用されているかコードを共有できますか。 –

11

私は同じ問題を抱えていたと私はv3のドキュメントでこれを見つけるために、1時間程度かかった:

サービスは

自動/オフライン/ための有用な

アカウント自分のアカウントのGoogleアナリティクスデータへの定期的なアクセス。たとえば、自分のGoogleアナリティクスデータのライブダッシュボードを作成し、他のユーザーと共有することができます。

あなたは、Googleアナリティクスで動作するようにサービスアカウントを設定するには従う必要があるいくつかのステップがあります。

  1. APIコンソールでプロジェクトを登録します。
  2. Google APIコンソールの[APIアクセス]ペインで、[アプリケーションタイプ]を[サービスアカウント]に設定してクライアントIDを作成します。
  3. Googleアナリティクスにログインし、[管理]セクションに移動します。
  4. アプリケーションにアクセスさせるアカウントを選択します。
  5. ステップ2のAPIコンソールで作成したクライアントIDから、選択したGoogleアナリティクスアカウントのユーザーとしてメールアドレスを追加します。
  6. サービスアカウントの手順に従って、Googleアナリティクスのデータにアクセスします。

ここで続きを読む: https://developers.google.com/analytics/devguides/reporting/core/v3/gdataAuthorization

PUH、私は)= APIは、Googleがそれを簡単に文書化問題を抱えているので、大きいと思い

は、その後、私は、コードを見て plus-serviceaccount-cmdline-sampleおよび analytics-cmdline-sampleです。このことができます

private static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport(); 
private static final JsonFactory JSON_FACTORY = new JacksonFactory(); 

public static Result index() { 
    GoogleCredential credential = null; 
    try { 
     credential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT) 
       .setJsonFactory(JSON_FACTORY) 
       .setServiceAccountId("[email protected]") 
       .setServiceAccountScopes(Arrays.asList(AnalyticsScopes.ANALYTICS_READONLY)) 
       .setServiceAccountPrivateKeyFromP12File(new File("/your/path/to/privatekey/privatekey.p12"))       
       .build(); 
    } catch (GeneralSecurityException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    // Set up and return Google Analytics API client. 
    Analytics analytics = new Analytics.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).setApplicationName(
      "Google-Analytics-Hello-Analytics-API-Sample").build(); 

    String profileId = ""; 
    try { 
     profileId = getFirstProfileId(analytics); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    GaData gaData = null; 
    try { 
     gaData = executeDataQuery(analytics, profileId); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    printGaData(gaData); 

    return ok(index.render("Your new application is ready.")); 
} 

private static String getFirstProfileId(Analytics analytics) throws IOException { 
    String profileId = null; 

    // Query accounts collection. 
    Accounts accounts = analytics.management().accounts().list().execute(); 

    if (accounts.getItems().isEmpty()) { 
     System.err.println("No accounts found"); 
    } else { 
     String firstAccountId = accounts.getItems().get(0).getId(); 

     // Query webproperties collection. 
     Webproperties webproperties = 
       analytics.management().webproperties().list(firstAccountId).execute(); 

     if (webproperties.getItems().isEmpty()) { 
      System.err.println("No Webproperties found"); 
     } else { 
      String firstWebpropertyId = webproperties.getItems().get(0).getId(); 

      // Query profiles collection. 
      Profiles profiles = 
        analytics.management().profiles().list(firstAccountId, firstWebpropertyId).execute(); 

      if (profiles.getItems().isEmpty()) { 
       System.err.println("No profiles found"); 
      } else { 
       profileId = profiles.getItems().get(0).getId(); 
      } 
     } 
    } 
    return profileId; 
} 

/** 
* Returns the top 25 organic search keywords and traffic source by visits. The Core Reporting API 
* is used to retrieve this data. 
* 
* @param analytics the analytics service object used to access the API. 
* @param profileId the profile ID from which to retrieve data. 
* @return the response from the API. 
* @throws IOException tf an API error occured. 
*/ 
private static GaData executeDataQuery(Analytics analytics, String profileId) throws IOException { 
    return analytics.data().ga().get("ga:" + profileId, // Table Id. ga: + profile id. 
      "2012-01-01", // Start date. 
      "2012-01-14", // End date. 
      "ga:visits") // Metrics. 
      .setDimensions("ga:source,ga:keyword") 
      .setSort("-ga:visits,ga:source") 
      .setFilters("ga:medium==organic") 
      .setMaxResults(25) 
      .execute(); 
} 

/** 
* Prints the output from the Core Reporting API. The profile name is printed along with each 
* column name and all the data in the rows. 
* 
* @param results data returned from the Core Reporting API. 
*/ 
private static void printGaData(GaData results) { 
    System.out.println("printing results for profile: " + results.getProfileInfo().getProfileName()); 

    if (results.getRows() == null || results.getRows().isEmpty()) { 
     System.out.println("No results Found."); 
    } else { 

     // Print column headers. 
     for (GaData.ColumnHeaders header : results.getColumnHeaders()) { 
      System.out.printf("%30s", header.getName()); 
     } 
     System.out.println(); 

     // Print actual data. 
     for (List<String> row : results.getRows()) { 
      for (String column : row) { 
       System.out.printf("%30s", column); 
      } 
      System.out.println(); 
     } 

     System.out.println(); 
    } 
} 

希望:これは上記の例のように、System.outに 印刷物ことPlayframework2のJavaアプリに実装され、非常に基本的なバージョンです!

+0

これは実際には機能しますか?特に、P12ファイル:作成するのか、それともダウンロードしたのか。また、このコードを実行する各マシンに新しいAPIキーが必要ですか? – Jeff

+0

サービスアカウントを作成するときは、(Googleによる)JSONを選択せず​​、P12を選択します。私はJSONファイルから 'PrivateKey'を作る方法を探していましたが、妥当な時間内に何も見つけられませんでした。 –

0

提供されている例に従うように試みましたが、コンパイルされません。私はこれが3.0対2.4かどうかわかりませんが、そうであれば、サンプルコードをうまく動作させる方法があります。

この例の1つの問題は、setServiceAccountScopesの引数が文字列ではなくCollections.singleton(AnalyticsScopes.Analytics.READ_ONLY)であることです。

この例を使用することに重要なことは、サービスアカウントの適切な構成です。