我曾经能够使用我的帐户登录和密码来查询Google Analytics API。谷歌现在正在使用OAuth进行身份验证,这很棒……唯一的问题是我只需要一个访问令牌。我不想让其他用户获取他们的分析数据。
我只想拿到我的数据。是否有一种方法可以仅为我的应用或我的分析帐户生成访问令牌?
我知道这样的解决方案是存在的。例如,Twitter为那些不需要特定用户登录的应用程序提供了他们所说的“单用户oauth”。
再说一次,我在这里要做的就是通过API获取我自己的分析数据。
有没有办法正确地做到这一点呢?
发布于 2012-10-15 17:20:35
我添加了一个PHP答案--你可以调整它或者将它转换成garb / ruby代码。
现在,您应该能够对服务帐户使用Analytics。您确实必须使用私钥,而不是访问令牌。
在控制台中创建应用
基本上,您可以转到Google API控制台并创建一个App。
在服务选项卡中启用Google Analytics。
在API Access选项卡中,创建一个新的OAuth ID (创建另一个客户端ID...按钮),选择服务帐户并下载您的私钥(生成新密钥...链接)。您必须稍后将密钥上载到您的web服务器。
在应用编程接口访问页面的服务帐户部分,复制电子邮件地址(@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();
}发布于 2014-06-05 01:07:43
Terry Seidler为php很好地回答了这个问题。我想添加一个java代码示例。
Api控制台设置
首先,按照Terry的解释,在google api控制台中执行所需的步骤:
基本上,您转到Google API控制台并创建一个应用程序。在服务选项卡中启用Google Analytics。在API Access选项卡中,创建一个新的OAuth ID (创建另一个客户端ID...按钮),选择服务帐户并下载您的私钥(生成新密钥...链接)。您必须稍后将密钥上载到您的web服务器。在应用编程接口访问页面的服务帐户部分,复制电子邮件地址(@developer.gserviceaccount.com),并将具有此电子邮件地址的新用户添加到您的Google Analytics配置文件中。如果你不这样做,你会得到一些不错的错误
获取必要的库
从https://developers.google.com/api-client-library/java/apis/analytics/v3下载google analytics 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);
}
}
}发布于 2012-04-09 04:39:39
您可以使用刷新令牌。将刷新令牌存储在数据库或安全配置文件中,然后使用它显示统计信息。
Google API Offline Access Using OAuth 2.0 Refresh Token将让您了解如何捕获并存储刷新令牌。
另请参阅Using OAuth 2.0 for Web Server Applications - Offline Access
https://stackoverflow.com/questions/10057928
复制相似问题