Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OAuth 2.0和Google Analytics API v3_Oauth_Google Api_Oauth 2.0_Google Analytics Api_Garb Gem - Fatal编程技术网

OAuth 2.0和Google Analytics API v3

OAuth 2.0和Google Analytics API v3,oauth,google-api,oauth-2.0,google-analytics-api,garb-gem,Oauth,Google Api,Oauth 2.0,Google Analytics Api,Garb Gem,我过去可以用我的帐户登录名和密码查询谷歌分析API。 谷歌现在正在使用OAuth进行身份验证,这很好。。。 唯一的问题是我只需要一个访问令牌。 我不想让其他用户获取他们的分析数据 我只想能够获取我的数据。 有没有办法只为我的应用程序或分析帐户生成访问令牌 我知道有这样的解决办法。。。例如,Twitter为不需要特定用户登录的应用程序提供了所谓的“单用户oauth” 再一次,我在这里要做的就是通过API获取我自己的分析数据 有没有办法做到这一点?谷歌有“服务帐户”(代表你的应用程序而不是最终用户调

我过去可以用我的帐户登录名和密码查询谷歌分析API。 谷歌现在正在使用OAuth进行身份验证,这很好。。。 唯一的问题是我只需要一个访问令牌。 我不想让其他用户获取他们的分析数据

我只想能够获取我的数据。 有没有办法只为我的应用程序或分析帐户生成访问令牌

我知道有这样的解决办法。。。例如,Twitter为不需要特定用户登录的应用程序提供了所谓的“单用户oauth”

再一次,我在这里要做的就是通过API获取我自己的分析数据


有没有办法做到这一点?

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


您可以在

找到更多详细信息。您可以使用刷新令牌。将刷新令牌存储在db或安全配置文件中,然后使用它显示统计信息

将让您了解如何捕获并存储刷新令牌


另请参见

我正在添加一个PHP答案-您可以将其调整或转换为garb/ruby代码

您现在应该能够对服务帐户使用分析。实际上,您必须使用私钥而不是访问令牌

在API控制台中创建应用程序
基本上,您可以转到Google API控制台创建一个应用程序。
在“服务”选项卡中启用谷歌分析。
在API访问选项卡中,创建一个新的OAuth ID(创建另一个客户端ID…按钮),选择服务帐户并下载您的私钥(生成新密钥…链接)。稍后您必须将密钥上载到web服务器

在API访问页面的服务帐户部分,复制电子邮件地址(@developer.gserviceaccount.com),并将具有此电子邮件地址的新用户添加到您的Google Analytics配置文件中如果不这样做,会出现一些不错的错误

代码
从SVN下载最新的googlephp客户端(从命令行
SVN checkouthttp://google-api-php-client.googlecode.com/svn/trunk/ google api php客户端只读

您现在可以通过以下代码访问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();
}
require_once'Google_Client.php';
需要一次“contrib/Google_AnalyticsService.php”;
$keyfile='DSDFDS0SDFSDSDF44923DFS9023 privatekey.p12';
//初始化Google客户端对象
$client=新的Google_客户端();
$client->setApplicationName(“您的产品名称”);
$client->setAssertionCredentials(
新Google_断言定义(
'11122233344@developer.gserviceaccount.com',
数组('https://www.googleapis.com/auth/analytics.readonly'),
文件获取内容($keyfile)
)
);
//从谷歌控制台的API访问页面获取此信息
$client->setClientId('1112223344.apps.googleusercontent.com');
$client->setAccessType('offline_access');
$analytics=新的谷歌分析服务($client);
//我们已经完成了连接的设置,
//现在获取一些数据并输出本周的访问量。
//您的分析配置文件id。(管理->配置文件设置->配置文件id)
$analytics_id='ga:1234';
$lastWeek=日期('Y-m-d',标准时间('-1周');
$today=日期('Y-m-d');
试一试{
$results=$analytics->data\u ga->get($analytics\u id),
上星期,
$today,'ga:visions');
echo“本周访问次数:”;
echo$results['totalsForAllResults'['ga:visions'];
}捕获(例外$e){
echo“出现错误:-”。$e->getMessage();
}
为php很好地回答了这个问题。我想添加一个java代码示例

Api控制台设置 首先在google api控制台中执行所需步骤,Terry解释道:

基本上,你去谷歌API控制台创建一个应用程序。使可能 谷歌分析服务标签。在API访问选项卡中,创建 新建OAuth ID(创建另一个客户端ID…按钮),选择服务 帐户并下载您的私钥(生成新密钥…链接)。 稍后您必须将密钥上载到web服务器。 在API访问页面的服务帐户部分,复制电子邮件 地址(@developer.gserviceaccount.com)并使用此地址添加新用户 您的谷歌分析档案的电子邮件地址。如果你不这样做, 你会发现一些不错的错误

获取必要的库 从以下站点下载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>

com.google.api
谷歌api服务分析
v3-rev94-1.18.0-rc
com.google.http-client
谷歌http客户端jackson
1.18.0-rc
现在来看看代码:
公共类HellowAnalyticsV3Api{
私有静态最终HttpTransport HTTP_TRANSPORT=new NetHttpTransport();
私有静态最终JsonFactory JSON_FACTORY=new JacksonFactory();
公共无效分析示例(){
//这是通过单击generate new key从google api控制台获得的.p12文件
File analyticsKeyFile=新文件();
//这是您可以在api控制台中找到的服务帐户电子邮件地址
字符串apiEmail=;
GoogleCredential credential=新建GoogleCredential.Builder()
.setTransport(HTTP_传输)
.setJsonFactory(JSON_工厂)
.setServiceAccountId(apiEmail)
.setServiceAccountScopes(Arrays.asList(AnalyticsScopes.ANALYTICS\u只读))
.SetServiceAccountPrivateKeyFromp12文件(analyticsPrivateKeyFile).build();
Analytics analyticsService=new Analytics.Builder(HTTP_传输、JSON_工厂、凭证)
.setApplicationName()
.build();
字符串startDate=“2014-01-03”;
字符串endDate=“2014-03-03”;
String mertrics=“ga:sessions,ga:timeOnPage”;
//使用a
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);
        }
    }

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