从URL检索对象/资源

时间:2013-08-24 23:24:51

标签: javascript google-analytics google-apps-script

我最近开始使用Google Apps脚本自动执行某些Google Analytics报告任务。 Google Analytics服务返回的许多对象都有“获取”函数,这些函数以字符串形式返回网址。实际上,许多Google Apps脚本对象都具有返回这些资源网址的功能,而不仅仅是Google的Analytics Services。表明我可以以某种方式使用这些URL来引用Google Apps资源并获取对象作为回报,但我不知道如何。

我尝试在浏览器中加载其中一个URL,期望使用JSON或我可以使用的其他东西,但却收到了404错误。当我尝试使用Google Apps脚本UrlFetchApp请求网址时也是如此。

这是一个简单的例子:

var accountId = '0123456789'; // Pretend this is a valid account number

// Get the first WebProperty
var webProp = Analytics.Management.Webproperties.list(accountId).getItems()[0];

// ...getHref() is along the lines of "https://www.googleapis.com/analytics/v3/management/accounts/0123456789"
var parentHref = webProp.getParetLink().getHref();

问题是,如何使用parentHref来恢复Google Analytics帐户对象?我觉得我错过了一些非常基本的东西......

资源:

2 个答案:

答案 0 :(得分:0)

这不是激活API。它显然很活跃,因为他已经获得了分析数据。

您不能仅仅提取这些网址,因为您缺少与调用需要身份验证和权限的网址相关的OAuth相关代码。

答案 1 :(得分:0)

阅读Using OAuth 2.0 to Access Google APIs,将帮助您获得所需。

我添加了一个非常基本的代码,可以作为指南。

/* CODE FOR DEMONSTRATION PURPOSES */
function authorizeGAS() {
  var result = false;
  var oauthConfig = UrlFetchApp.addOAuthService("google");

  oauthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");
  oauthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?" +
                                 "scope=https://www.googleapis.com/auth/analytics.readonly");
  oauthConfig.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken");
  oauthConfig.setConsumerKey(ScriptProperties.getProperty("YOUR_ANALYTICS_CONSUMER_KEY"));
  oauthConfig.setConsumerSecret(ScriptProperties.getProperty("YOUR_ANALYTICS_CONSUMER_SECRET"));

  var requestData = {
    "method": "GET",
    "oAuthServiceName": "google",
    "oAuthUseToken": "always"
  };  
  var URL = "https://www.googleapis.com/analytics/v3/management/accounts/~all/webproperties/~all/profiles";

  try {
    result = JSON.parse(UrlFetchApp.fetch(URL, requestData).getContentText());
  } catch (e) {
    if (e.message) Logger.log(e.message);
  }

  Logger.log(result);
  return result;
}