我已获得可访问Google Analytics的帐户凭据,
我希望使用Analytics Core Reporting API http://code.google.com/apis/analytics/docs/gdata/home.html
我找到了使用用户名/密码调用setUserCredentials的示例,但看到这些注释不太安全/请求限制较低(并且在最新客户端中不存在)。
另外,我似乎使用oauth的示例,但需要用户交互并授予用户google帐户访问权限。
但是,我希望运行一项不需要任何用户互动的服务,并连接到预定义的Google帐户(与查看该用户的用户无关)。
然后我可以将结果存储在数据库中,最终用户可以从数据库中查询结果。
我第一次登录时看到过有关使用AccessType = Offline的信息,然后返回访问令牌和refreshtoken。 http://code.google.com/apis/accounts/docs/OAuth2WebServer.html#offline
在我的示例中,最终用户永远不会登录到该应用程序。 我可以有一个单独的管理应用程序获取刷新令牌,并将刷新令牌存储在配置/查找表中吗? 然后,主应用程序可以使用从配置/查找表中提取的刷新令牌,并获取访问令牌以便能够查询Google Analytics帐户。
我正在寻找一个使用AccessType = Offline的C#示例,并分离获取刷新令牌并使用刷新令牌获取访问令牌以查询Google Analytics(分析)帐户。
答案 0 :(得分:16)
制作您的应用https://code.google.com/apis/console/
对于您的应用,请启用对Google Analytics的访问权限,并为您的网站创建OAuth 2.0客户端ID。
浏览至:
https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=YOUR_APP_ID.apps.googleusercontent.com&access_type=offline&scope=https://www.googleapis.com/auth/analytics.readonly&redirect_uri=HTTP://YOUR_CALL_BACK_URL
将 YOUR_APP_ID , YOUR_CALL_BACK_URL 更改为相关值。
重要的是包含 access_type =离线。
按“授予访问权限”,这将重定向到HTTP://YOUR_CALL_BACK_URL?code=THIS_IS_YOUR_CODE
。复制URL中的代码。
使用代码,使用CMD提示请求刷新令牌。
curl -d "code=THIS_IS_YOUR_CODE&client_id=YOUR_APP_ID.apps.googleusercontent.com&client_secret=YOUR_APPS_SECRET_CODE&redirect_uri=HTTP://YOUR_CALL_BACK_URL&grant_type=authorization_code" https://accounts.google.com/o/oauth2/token
将 THIS_IS_YOUR_CODE , YOUR_APP_ID , YOUR_APPS_SECRET_CODE , YOUR_CALL_BACK_URL 更改为相关值。
记录 refresh_token 返回。
下载最新版本的Core Reporting V3.0 .net库 http://code.google.com/p/google-api-dotnet-client/wiki/Downloads
当前版本的Google.Apis.Analytics.v3.cs中存在一个错误,要将此文件中的代码复制到您的本地解决方案中(并且不要参考Google.Apis.Analytics.v3.bin) ) http://code.google.com/p/google-api-dotnet-client/source/browse/Services/Google.Apis.Analytics.v3.cs?repo=samples&name=20111123-1.1.4344-beta
并将属性维度从List<system.string>
更改为string
。
或者你会得到像我这样的错误,这个人做了http://www.evolutiadesign.co.uk/blog/using-the-google-analytics-api-with-c-shar/
然后,您可以使用刷新令牌,在无需用户交互的情况下为您生成访问令牌,并使用访问令牌针对Google Analytics运行报告。
using System;
using DotNetOpenAuth.OAuth2;
using Google.Apis.Authentication.OAuth2;
using AnalyticsService = Google.Apis.Analytics.v3.AnalyticsService;
class Program
{
public static void Main()
{
var client = new WebServerClient(GoogleAuthenticationServer.Description, "YOUR_APP_ID.apps.googleusercontent.com", "YOUR_APPS_SECRET_CODE");
var auth = new OAuth2Authenticator<WebServerClient>(client, Authenticate);
var asv = new AnalyticsService(auth);
var request = asv.Report.Get("2012-02-20", "2012-01-01", "ga:visitors", "ga:YOUR_GOOGLE_ANALYTICS_ACCOUNT_ID");
request.Dimensions = "ga:pagePath";
request.Sort = "-ga:visitors";
request.MaxResults = 5;
var report = request.Fetch();
Console.ReadLine();
}
private static IAuthorizationState Authenticate(WebServerClient client)
{
IAuthorizationState state = new AuthorizationState(new string[]{}) { RefreshToken = "REFRESH_TOKEN" };
client.RefreshToken(state);
return state;
}
}
答案 1 :(得分:4)
伟大的答案伊恩,它帮助我走向正确的方向比我在网上找到的任何其他答案更多。必须在AnalyticsService对象中更改某些内容,因为行:
var request = asv.Report.Get("2012-02-20", "2012-01-01", "ga:visitors", "ga:YOUR_GOOGLE_ANALYTICS_ACCOUNT_ID");
对我不起作用,我不得不使用以下内容:
var request = asv.Data.Ga.Get("ga:YOUR_GOOGLE_ANALYTICS_ACCOUNT_ID", "2012-01-01", "2012-02-20", "ga:visitors");
希望这会帮助其他人,比如你的回答对我有帮助。谢谢!
答案 2 :(得分:1)
Ian的答案帮了我很多,但是我一直在运行curl命令时遇到错误。做了一些研究,发现通过转到https://code.google.com/oauthplayground/并检查oAuth配置设置,可以更轻松地获取访问代码和刷新令牌的步骤。页面右上角有一个设置按钮。选择“使用您自己的OAuth凭据”。您可以从此处获取访问代码并请求刷新令牌。
希望这有帮助。
答案 3 :(得分:0)
您可以从OAuth Playground手动获取刷新令牌。 如果您需要像我一样的服务帐户刷新令牌,请确保