我一直在尝试使用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:
我错过了什么吗?回调网址是否必要?如果是,我在哪里指定它?
答案 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(以防万一这里存在某种权限错误)
有没有人对我还能检查什么有想法?有点卡在这里......
任何帮助非常感谢:)