带有 Google Analytics API v3 的 OAuth 2.0
Posted
技术标签:
【中文标题】带有 Google Analytics API v3 的 OAuth 2.0【英文标题】:OAuth 2.0 with Google Analytics API v3 【发布时间】:2012-04-20 22:10:41 【问题描述】:我以前可以使用我的帐户登录名和密码查询 Google Analytics API。 谷歌现在正在使用 OAuth 进行身份验证,这很棒...... 唯一的问题是我只需要一个访问令牌。 我不想让其他用户获取他们的分析数据。
我只想获取我的数据。 有没有一种方法可以仅为我的应用或我的分析帐户生成访问令牌?
我知道存在这样的解决方案...例如,Twitter 为不需要特定用户登录的应用程序提供他们所谓的“单用户 oauth”。
再一次,我在这里想要完成的只是通过 API 获取 MY OWN 分析数据。
有没有办法正确地做到这一点?
【问题讨论】:
【参考方案1】:您好,我找到了一个解决方案,它对我有用
你必须改变这个
immediate: true
到
immediate: false
看起来像
function checkAuth()
gapi.auth.authorize(
client_id: clientId, scope: scopes, immediate: false, handleAuthResult);
【讨论】:
【参考方案2】:Terry Seidler 为 php 很好地回答了这个问题。我想添加一个 java 代码示例。
API 控制台设置
按照 Terry 的解释,首先在 google api 控制台中执行所需的步骤:
基本上,您转到 Google API 控制台并创建一个应用程序。使能够 服务标签中的谷歌分析。在 API 访问选项卡中,创建一个 新的 OAuth ID(创建另一个客户端 ID... 按钮),选择服务 帐户并下载您的私钥(生成新密钥...链接)。 稍后您必须将密钥上传到您的网络服务器。 在 API 访问页面的服务帐户部分,复制电子邮件 地址 (@developer.gserviceaccount.com) 并添加一个新用户 电子邮件地址到您的 Google Analytics 个人资料。如果你不这样做, 你会得到一些不错的错误
获取必要的库
从以下位置下载 Google Analytics Java 客户端: https://developers.google.com/api-client-library/java/apis/analytics/v3
或者添加以下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);
【讨论】:
【参考方案3】:我正在添加一个 PHP 答案 - 您可以调整或将其转换为 garb / ruby 代码。
您现在应该可以通过服务帐号使用 Google Analytics(分析)了。您确实必须使用私钥而不是访问令牌。
在 API 控制台中创建应用 基本上,您转到 Google API 控制台并创建一个应用程序。 在服务标签中启用 Google Analytics。 在 API 访问选项卡中,创建一个新的 OAuth ID(创建另一个客户端 ID... 按钮),选择 服务帐户 并下载您的私钥(生成新密钥... 链接)。稍后您必须将密钥上传到您的网络服务器。
在 API 访问页面的服务帐户部分,复制电子邮件地址 (@developer.gserviceaccount.com) 并将具有此电子邮件地址的新用户添加到您的 Google Analytics 个人资料中。 如果你不这样做,你会得到一些不错的错误
代码
从 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();
【讨论】:
很好的答案!我知道必须有办法做到这一点,但在 API 文档中找不到正确的详细信息。谢谢! 我已经尝试过了,但没有成功。这是我的问题的链接:***.com/questions/13465689/… 非常感谢您的回答。尝试验证服务应用程序时,我已经拔掉了一半的头发,但这个答案挽救了另一半。 嗯.. 我跟着这个到了 T,我得到了There was an error : - Error refreshing the OAuth2 token, message: ' "error" : "invalid_grant" '
。
奇怪...我删除了我的项目并重新创建了一个新项目...服务电子邮件和客户端 ID 看起来完全不同...现在可以正常工作...多么奇怪... . 但是哦,好吧,它现在可以工作了!!【参考方案4】:
您可以使用刷新令牌。将刷新令牌存储在数据库或安全配置文件中,然后使用它来显示统计信息。
Google API Offline Access Using OAuth 2.0 Refresh Token 将让您了解如何捕获然后存储您的刷新令牌。
另见Using OAuth 2.0 for Web Server Applications - Offline Access
【讨论】:
【参考方案5】:Google 有“服务帐户”(代表您的应用程序而不是最终用户调用 Google API),但它的工作方式有点不同,因为它不会使用访问令牌而是使用私钥。
您可以在https://developers.google.com/accounts/docs/OAuth2ServiceAccount找到更多详细信息
【讨论】:
这行不通。服务帐户目前无法访问似乎适用于分析的“用户数据”数据。使用 oauth2 方法。以上是关于带有 Google Analytics API v3 的 OAuth 2.0的主要内容,如果未能解决你的问题,请参考以下文章
带有 Google Tag Manager 并手动添加 Google Analytics 的页面
每天可以对 Google AdWords 和 Analytics 进行多少 API 调用?