28

以前は、アカウントのログインとパスワードを使用して Google アナリティクス API をクエリできました。Google は現在、認証に OAuth を使用しています。これは素晴らしいことです...唯一の問題は、アクセス トークンが 1 つしか必要ないことです。他のユーザーが分析データを取得することを許可したくありません。

私は自分のデータを取得できるようにしたいだけです。アプリまたは分析アカウント専用のアクセス トークンを生成する方法はありますか?

そのようなソリューションが存在することは知っています...たとえば、Twitter は、特定のユーザーのサインインを必要としないアプリに対して、「シングル ユーザー oauth」と呼ばれるものを提供しています。

繰り返しますが、ここで達成しようとしているのは、API を介して MY OWN の分析データをフェッチすることだけです。

それを適切に行う方法はありますか?

4

5 に答える 5

40

PHP の回答を追加しています。調整したり、garb / ruby​​ コードに変換したりできる場合があります。

これで、サービス アカウントで Analytics を使用できるようになります。実際には、アクセス トークンの代わりに秘密鍵を使用する必要があります。

API コンソールでアプリを作成する
基本的には、Google API コンソールに移動してアプリを作成します。
[サービス] タブで Google アナリティクスを有効にします。
[API アクセス] タブで、新しい OAuth ID を作成し (別のクライアント ID を作成... ボタン)、サービス アカウントを選択して秘密鍵をダウンロードします (新しいキーを生成... リンク)。後でキーを Web サーバーにアップロードする必要があります。

[API アクセス] ページの [サービス アカウント] セクションで、メール アドレス (@developer.gserviceaccount.com) をコピーし、このメール アドレスを持つ新しいユーザーを Google アナリティクス プロファイルに追加します。これを行わないと、いくつかの素敵なエラーが発生します

コード
SVN から最新の Google PHP クライアントをダウンロードします (コマンド ラインからsvn checkout http://google-api-php-client.googlecode.com/svn/trunk/ google-api-php-client-read-only)。

コードで Analytics API にアクセスできるようになりました。

require_once 'Google_Client.php';              
require_once 'contrib/Google_AnalyticsService.php';

$keyfile = 'dsdfdss0sdfsdsdfsdf44923dfs9023-privatekey.p12';

// Initialise the Google Client object
$client = new Google_Client();
$client->setApplicationName('Your product name');

$client->setAssertionCredentials(
    new Google_AssertionCredentials(
        '11122233344@developer.gserviceaccount.com',
        array('https://www.googleapis.com/auth/analytics.readonly'),
        file_get_contents($keyfile)
    )
);

// Get this from the Google Console, API Access page
$client->setClientId('11122233344.apps.googleusercontent.com');
$client->setAccessType('offline_access');
$analytics = new Google_AnalyticsService($client);

// We have finished setting up the connection,
// now get some data and output the number of visits this week.

// Your analytics profile id. (Admin -> Profile Settings -> Profile ID)
$analytics_id   = 'ga:1234';
$lastWeek       = date('Y-m-d', strtotime('-1 week'));
$today          = date('Y-m-d');

try {
    $results = $analytics->data_ga->get($analytics_id,
                        $lastWeek,
                        $today,'ga:visits');
    echo '<b>Number of visits this week:</b> ';
    echo $results['totalsForAllResults']['ga:visits'];
} catch(Exception $e) {
    echo 'There was an error : - ' . $e->getMessage();
}
于 2012-10-15T09:20:34.957 に答える
7

Terry Seidlerは php についてこれにうまく答えました。Javaコードの例を追加したいと思います。

API コンソールのセットアップ

Terry が説明したように、Google API コンソールで必要な手順を実行することから始めます。

基本的に、Google API コンソールに移動してアプリを作成します。[サービス] タブで Google アナリティクスを有効にします。[API アクセス] タブで、新しい OAuth ID を作成し (別のクライアント ID を作成... ボタン)、サービス アカウントを選択して秘密鍵をダウンロードします (新しいキーを生成... リンク)。後でキーを Web サーバーにアップロードする必要があります。[API アクセス] ページの [サービス アカウント] セクションで、メール アドレス (@developer.gserviceaccount.com) をコピーし、このメール アドレスを持つ新しいユーザーを Google アナリティクス プロファイルに追加します。これを行わないと、いくつかの素敵なエラーが発生します

必要なライブラリを入手する

https://developers.google.com/api-client-library/java/apis/analytics/v3から Google アナリティクス Java クライアントをダウンロードし ます。

または、次の Maven 依存関係を追加します。

    <dependency>
        <groupId>com.google.apis</groupId>
        <artifactId>google-api-services-analytics</artifactId>
        <version>v3-rev94-1.18.0-rc</version>
    </dependency>
    <dependency>
        <groupId>com.google.http-client</groupId>
        <artifactId>google-http-client-jackson</artifactId>
        <version>1.18.0-rc</version>
    </dependency>

コードは次のとおりです。

public class HellowAnalyticsV3Api {

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

public void analyticsExample() {

    // This is the .p12 file you got from the google api console by clicking generate new key
    File analyticsKeyFile = new File(<p12FilePath>);

    // This is the service account email address that you can find in the api console
    String apiEmail = <something@developer.gserviceaccount.com>;

    GoogleCredential credential = new GoogleCredential.Builder()
        .setTransport(HTTP_TRANSPORT)
        .setJsonFactory(JSON_FACTORY)
        .setServiceAccountId(apiEmail)
        .setServiceAccountScopes(Arrays.asList(AnalyticsScopes.ANALYTICS_READONLY))
        .setServiceAccountPrivateKeyFromP12File(analyticsPrivateKeyFile).build();

    Analytics analyticsService = new Analytics.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
        .setApplicationName(<your application name>)
        .build();


    String startDate = "2014-01-03";
    String endDate = "2014-03-03";
    String mertrics = "ga:sessions,ga:timeOnPage";

    // Use the analytics object build a query
    Get get = analyticsService.data().ga().get(tableId, startDate, endDate, mertrics);
    get.setDimensions("ga:city");
    get.setFilters("ga:country==Canada");
    get.setSort("-ga:sessions");

    // Run the query
    GaData data = get.execute();

    // Do something with the data
    if (data.getRows() != null) {
        for (List<String> row : data.getRows()) {
            System.out.println(row);
        }
    }

}
于 2014-06-04T17:07:42.747 に答える
3

リフレッシュ トークンを使用できます。更新トークンをデータベースまたはセキュア構成ファイルに保存し、それを使用して統計を表示します。

OAuth 2.0 リフレッシュ トークンを使用した Google API オフライン アクセスでは、リフレッシュ トークンを取得して保存する方法について説明しています。

Web サーバー アプリケーションでの OAuth 2.0 の使用 - オフライン アクセスも参照してください。

于 2012-04-08T20:39:38.520 に答える
0

Google には「サービス アカウント」があります (エンドユーザーではなくアプリケーションに代わって Google API を呼び出します) が、アクセス トークンではなく秘密鍵を使用するため、その動作方法は少し異なります。

詳細については、https://developers.google.com/accounts/docs/OAuth2ServiceAccountをご覧ください。

于 2012-04-07T20:43:28.457 に答える