OAuth 2.0以及谷歌Analytics(分析)API第3版OAuth 2.0以及谷歌Analy

2019-05-13 11:12发布

我曾经是能够查询我的帐户的登录和密码的谷歌分析API。 谷歌目前正在使用的认证,这是伟大的OAuth ......唯一的问题是,我只需要一个访问令牌。 我不想让其他使用者去取及其分析数据。

我只是想能够获取我的数据。 有没有办法我只能产生于我的应用程序或我的Analytics帐户的访问令牌?

我知道这样的解决方案存在......举例来说,Twitter提供了他们所谓的“单用户的OAuth”对于不要求特定用户登录应用程序。

再一个,所有我想在这里实现是通过API去找我的分析数据。

有没有办法正确地做到这一点?

Answer 1:

我加入了PHP的答案 - 你可以调整或将其转换为装束/ Ruby代码。

您现在应该可以使用与服务帐户分析。 事实上,你将不得不使用私钥而不是一个访问令牌。

创建API控制台应用程序
基本上,你去谷歌API控制台,并创建一个应用程序。
在服务选项卡启用谷歌分析。
在API访问选项卡,创建一个新的OAuth ID(创建另一个客户端ID ...按钮),选择服务帐户和下载你的私钥(生成新的关键...链接)。 您稍后上传,关键看你的Web服务器。

在API访问页面,在服务帐户部分,复制的电子邮件地址(@ developer.gserviceaccount.com),并添加一个新用户使用此电子邮件地址到您的谷歌Analytics(分析)个人资料。 如果你不这样做,你会得到一些不错的错误


下载最新的谷歌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(
        '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();
}


Answer 2:

特里塞德勒回答了这个很好的PHP。 我想补充一个Java代码示例。

API控制台设置

这样做在谷歌API控制台所需的步骤,特里解释开始:

基本上,你去谷歌API控制台,并创建一个应用程序。 在服务选项卡启用谷歌分析。 在API访问选项卡,创建一个新的OAuth ID(创建另一个客户端ID ...按钮),选择服务帐户和下载你的私钥(生成新的关键...链接)。 您稍后上传,关键看你的Web服务器。 在API访问页面,在服务帐户部分,复制的电子邮件地址(@ developer.gserviceaccount.com),并添加一个新用户使用此电子邮件地址到您的谷歌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);
        }
    }

}


Answer 3:

您可以使用刷新标记。 存储刷新令牌在DB或安全配置文件,然后用它来显示统计信息。

谷歌API脱机访问使用OAuth 2.0刷新令牌会给你如何捕获,然后存储您刷新令牌的想法。

另请参阅使用OAuth 2.0 Web服务器应用程序-离线访问



Answer 4:

你好,我找到了一个解决方案,它为我工作

你必须改变这一个

immediate: true 

immediate: false

它看起来像

function checkAuth() {
  gapi.auth.authorize({
    client_id: clientId, scope: scopes, immediate: false}, handleAuthResult);
}


Answer 5:

谷歌已经在“服务帐户”(调用代表您的应用程序,而不是最终用户的谷歌的API),但它的工作方式是有点不同,因为它不会使用访问令牌,但私有密钥来代替。

你可以找到更多的细节https://developers.google.com/accounts/docs/OAuth2ServiceAccount



文章来源: OAuth 2.0 with Google Analytics API v3