私は以前、アカウントのログインとパスワードを使用してGoogle Analytics APIにクエリを実行できました。 Googleは現在、認証にOAuthを使用しています。これはすばらしいことです...唯一の問題は、アクセストークンが1つだけ必要なことです。他のユーザーがその分析データを取得することを許可したくないのです。
MYデータをフェッチできるようにしたいだけです。アプリまたはアナリティクスアカウントに対してのみアクセストークンを生成する方法はありますか?
私はそのようなソリューションが存在することを知っています...たとえば、Twitterは、特定のユーザーのサインインを必要としないアプリに対して、「シングルユーザーoauth」と呼ばれるものを提供します。
もう一度言いますが、私がここで達成しようとしているのは、APIを介してMY OWN分析データをフェッチすることです。
それを適切に行う方法はありますか?
PHP回答を追加します-ガーブ/ Rubyコードに変換または変換できる場合があります。
これで、アナリティクスをサービスアカウントで使用できるようになります。実際、アクセストークンの代わりに秘密鍵を使用する必要があります。
APIコンソールでアプリを作成
基本的に、Google API Consoleに移動してアプリを作成します。
[サービス]タブでGoogleアナリティクスを有効にします。
APIアクセスタブで、新しいOAuth ID(別のクライアントIDを作成...ボタン)を作成し、サービスアカウントを選択して、プライベートをダウンロードしますキー(新しいキーを生成...リンク)後でキーをWebサーバーにアップロードする必要があります。
APIアクセスページの[サービスアカウント]セクションで、メールアドレス(@ developer.gserviceaccount.com)をコピーし、このメールアドレスを持つ新しいユーザーをGoogleアナリティクスプロファイルに追加します。 これを行わないと、いくつかの素敵なエラーが発生します
コード
最新のGoogleをダウンロードPHP SVNを使用しないクライアント(コマンドラインから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(
'[email protected]',
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();
}
Terry Seidler これはphpに対してうまく答えました。 Javaコード例を追加したいと思います。
Terryが説明したように、Google APIコンソールで必要な手順を実行することから始めます。
基本的に、Google API Consoleに移動してアプリを作成します。 [サービス]タブでGoogleアナリティクスを有効にします。 [API Access]タブで、新しいOAuth ID(Create another client ID ...ボタン))を作成し、サービスアカウントを選択して秘密鍵をダウンロードします([Generate new key ...]リンク)。キーは後でウェブサーバーにアップロードする必要があります。APIアクセスページの[サービスアカウント]セクションで、メールアドレス(@ developer.gserviceaccount.com)をコピーし、このメールアドレスを持つ新しいユーザーをGoogleアナリティクスに追加しますプロファイルを作成しないと、いくつかの素敵なエラーが表示されます
GoogleアナリティクスをダウンロードJavaクライアントから: https://developers.google.com/api-client-library/Java/apis/analytics/v
または、次の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 = <[email protected]>;
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);
}
}
}
更新トークンを使用できます。更新トークンをdbまたは安全な構成ファイルに保存し、それを使用して統計を表示します。
OAuth 2.0リフレッシュトークン を使用したGoogle APIオフラインアクセスは、リフレッシュトークンをキャプチャして保存する方法を示します。
関連項目 sing OAuth 2.0 for Web Server Applications-Offline Access の使用
こんにちは私は解決策を見つけました、それは私のために働きます
あなたはこれを変える必要があります
immediate: true
に
immediate: false
そしてそれは
function checkAuth() {
gapi.auth.authorize({
client_id: clientId, scope: scopes, immediate: false}, handleAuthResult);
}
Googleには「サービスアカウント」があります(エンドユーザーの代わりにアプリケーションに代わってGoogle APIを呼び出します)が、アクセストークンを使用せずに秘密鍵を使用するため、その動作は少し異なります。
詳細は https://developers.google.com/accounts/docs/OAuth2ServiceAccount にあります。