我尝试在我的Google Apps脚本中使用Twitter Pin-based authorization最终代表其他用途发送推文。
我坦率地承认,我不知道我在做什么,但我在网上看了很多信息,觉得我已经尝试了一切。
我当前的Google Apps脚本JavaScript代码:
var method = 'post';
var url = 'https://api.twitter.com/oauth/request_token';
var consumerKey = '[my consumer key]';
var ticks = '1422745454';
var nonce = '6826266';
var options = {
'method': method,
'oauth_callback': 'oob',
'oauth_consumer_key': consumerKey,
'oauth_nonce': nonce,
'oauth_signature': 'cIFeptE5HjHp7xrp%2BZt9xFhHox4%3D',
'oauth_signature_method': 'HMAC-SHA1',
'oauth_timestamp': ticks,
'oauth_version': '1.0'
};
var response = UrlFetchApp.fetch(url, options);
为了测试我在每次测试运行之前将滴答设置为值here nonce是111111和9999999之间的随机数,在每次测试运行之前重新生成。 我生成的oauth签名是从linq2twitter project
中提取的一些c#代码生成的我怀疑问题是签名。我已经阅读了twitter documentation on creating a signature,我认为C#代码正确地执行了但我不确定。
问题在于,无论我尝试什么,我总是会收到此错误: “https://api.twitter.com/oauth/request_token请求失败,返回代码401.截断的服务器响应:无法验证oauth签名和令牌(使用muteHttpExceptions选项检查完整响应)”
我一直试图在Google Apps脚本中找到基于Twitter Pin的授权示例,但到目前为止还没有找到任何内容。 我在C#,PHP等中翻译示例的尝试也失败了。
请帮忙。
答案 0 :(得分:0)
Apps脚本提供了一个与UrlFetchApp一起使用的Oauth API,他们甚至在他们的示例中使用了twitter。如果可能的话,使用那些解决签名生成的麻烦是一件非常麻烦的事。
https://developers.google.com/apps-script/reference/url-fetch/o-auth-config https://developers.google.com/apps-script/articles/twitter_tutorial
如果您绝对必须从头开始,最好的方法是获取使用现有库的请求(例如您提到的c#),然后处理获取应用脚本以生成完全相同的请求。
我明白你现在正在做的事情,所以它可能只是在传出请求中对你的签名进行base64编码:
https://developers.google.com/apps-script/reference/utilities/utilities#base64Encode(String)
最终,在Apps脚本中手动完成整个Oauth流程非常困难。大约一年前,当我尝试从头开始尝试这样的东西时,我最终放弃并使用部署到Google App Engine的Python应用程序。我将Apps脚本中的请求提交到App Engine应用程序,App Engine应用程序处理Oauth并将请求转发到外部服务,然后将请求返回到我的Apps脚本。这种方法伴随着它自身的复杂性。