使用Google Apps脚本发出oAuth请求

时间:2012-10-16 08:44:59

标签: oauth google-apps-script

我一直在尝试使用oAuth对第三方服务进行身份验证,并在UrlFetchApp.fetch()阶段收到“意外错误”。这促使我用Twitter替换第三方服务,其中一个教程中提供了示例,我也看到了与twitter相同的问题。

这是我的代码。

function testTwitter() {
  var oauth = UrlFetchApp.addOAuthService('twitter');
  oauth.setRequestTokenUrl('https://api.twitter.com/oauth/request_token');
  oauth.setAuthorizationUrl('https://api.twitter.com/oauth/authorize');
  oauth.setAccessTokenUrl('https://api.twitter.com/oauth/access_token');
  oauth.setConsumerKey('CONSUMER_KEY');
  oauth.setConsumerSecret('CONSUMER_SECRET');

  var url = 'https://api.twitter.com/1/statuses/mentions.json'; 
  try{
    var options = {
      "oAuthServiceName" : "twitter",
      "oAuthUseToken" : "always",
      "method":"GET"
    };
     var resp = UrlFetchApp.fetch(url,options);
      Logger.log(resp.getContentText());
  }catch(ex){
    Logger.log(ex);
  }
}

当我看到日志时,我看到在UrlFetchApp.fetch阶段抛出以下内容。

Exception: Unexpected error: 

我错过了什么吗?回调网址是否必要?如果是,我在哪里指定它?

2 个答案:

答案 0 :(得分:2)

我已将您的代码用于推特,如果您按照“应用脚本”页面中的教程进行操作,该工作正常:https://developers.google.com/apps-script/articles/twitter_tutorial

主要查看设置Twitter 部分。您必须设置您的Twitter才能使用您的脚本。以下是为您的Twitter设置新应用的链接:http://dev.twitter.com/apps/new

编辑:这也适用于您正在使用的其他第三方服务。

答案 1 :(得分:1)

我创建了上面的脚本版本,根据上面的教程设置了Twitter(包括指定的回调URL),一切都运行良好......直到昨天下午。

     function tweet() {
   // Setup OAuthServiceConfig
   var oAuthConfig = UrlFetchApp.addOAuthService("twitter");
   oAuthConfig.setAccessTokenUrl("http://api.twitter.com/oauth/access_token");
   oAuthConfig.setRequestTokenUrl("http://api.twitter.com/oauth/request_token");
   oAuthConfig.setAuthorizationUrl("http://api.twitter.com/oauth/authorize");
   oAuthConfig.setConsumerKey(ScriptProperties.getProperty("twitterConsumerKey"));
   oAuthConfig.setConsumerSecret(ScriptProperties.getProperty("twitterConsumerSecret"));

   // Setup optional parameters to point request at OAuthConfigService.The "twitter"
   // value matches the argument to "addOAuthService" above.
   var options =
     {
        muteHttpExceptions : true,
       "oAuthServiceName" : "twitter",
       "oAuthUseToken" : "always"
     };
   var_url='https://api.twitter.com/1.1/search/tweets.jsonq=hello&count=5&include_entities=true&result_type=recent';
   var result = UrlFetchApp.fetch(url,options);
   var tweets  = Utilities.jsonParse(result);

出于某种原因,我现在收到OAuth错误。我添加了muteHTTPExceptions = true,并且消息显示“无法对服务进行身份验证:twitter”。

我做了以下事情:

  • 检查了执行文件,可以看到我的密钥和密钥是从项目属性中提取的

  • 使用相同的密钥和秘密从Twitter生成了一个CURL,以便仔细检查这些是否有效(它们是我得到的预期响应)

  • 将我的google脚本部署为webapp(以防万一这里存在某种权限错误)

有没有人对我还能检查什么有想法?有点卡在这里......

任何帮助非常感谢:)