正如标题所示,我在这里的目标是能够从script.gs
发送一条推特。这条推特将被发布到我的推特上,理想的情况下,我不必访问Twitter网站。
我编写了两个主要函数来尝试这样做:
script.gs
//post tweet
function oAuth() {
var CONSUMER_KEY = "**********************";
var CONSUMER_SECRET = "*************************************************";
ScriptProperties.setProperty("TWITTER_CONSUMER_KEY", CONSUMER_KEY);
ScriptProperties.setProperty("TWITTER_CONSUMER_SECRET", CONSUMER_SECRET);
var oauthConfig = UrlFetchApp.addOAuthService("twitter");
oauthConfig.setAccessTokenUrl("https://api.twitter.com/oauth/access_token");
oauthConfig.setRequestTokenUrl("https://api.twitter.com/oauth/request_token");
oauthConfig.setAuthorizationUrl("https://api.twitter.com/oauth/authorize");
oauthConfig.setConsumerKey(ScriptProperties.getProperty("TWITTER_CONSUMER_KEY"));
oauthConfig.setConsumerSecret(ScriptProperties.getProperty("TWITTER_CONSUMER_SECRET"));
var options = {muteHttpExceptions: true,oAuthServiceName:'twitter',oAuthUseToken:'always'}
var url = "https://api.twitter.com/1.1/statuses/user_timeline.json";
var response = UrlFetchApp.fetch(url, options).getContentText();
Logger.log(response);
}
function postTweet() {
oAuth();
Logger.log('oAuth complete');
var status = "Tweet";
var Roptions = {
method: "post",
oAuthServiceName: "twitter",
oAuthUseToken: "always",
status: status
};
var url = "https://api.twitter.com/1.1/statuses/update.json";
Logger.log('begin post');
var request = UrlFetchApp.fetch(url, Roptions); //the trouble line. Execution stops.
Logger.log('post complete');
}
经过大约一天的无情黑客攻击,我能够获得第一个功能,oAuth()
工作。这记录了我的用户数据。然而,对于我的生活,我不知道什么是阻碍request
。我确实得到了一个错误:Request failed for returned code 403. Truncated server response: {"errors":[{"message":"SSL is required","code":92}]}
。在谷歌上搜索的情况并不多见。我猜问题就在Roptions
的某个地方。任何帮助都将不胜感激,如果需要的话,我可以提供进一步的澄清。
发布于 2014-08-30 05:24:55
尤里卡!这是解决办法。讽刺的是,我以前也有过这样的经历,但却对此置之不理。原来https
是我最大的问题。今晚我将享用卑微的派。
发送tweet的脚本
//post tweet
function oAuth() {
var CONSUMER_KEY = "*************************";
var CONSUMER_SECRET = "**************************************************";
ScriptProperties.setProperty("TWITTER_CONSUMER_KEY", CONSUMER_KEY);
ScriptProperties.setProperty("TWITTER_CONSUMER_SECRET", CONSUMER_SECRET);
var oauthConfig = UrlFetchApp.addOAuthService("twitter");
oauthConfig.setAccessTokenUrl("https://api.twitter.com/oauth/access_token");
oauthConfig.setRequestTokenUrl("https://api.twitter.com/oauth/request_token");
oauthConfig.setAuthorizationUrl("https://api.twitter.com/oauth/authenticate");
oauthConfig.setConsumerKey(ScriptProperties.getProperty("TWITTER_CONSUMER_KEY"));
oauthConfig.setConsumerSecret(ScriptProperties.getProperty("TWITTER_CONSUMER_SECRET"));
var options = {muteHttpExceptions: true,oAuthServiceName:'twitter',oAuthUseToken:'always'}
var url = "https://api.twitter.com/1.1/statuses/user_timeline.json";
var response = UrlFetchApp.fetch(url, options).getContentText();
Logger.log(response);
}
function postTweet() {
oAuth();
Logger.log('oAuth complete');
var status='Test tweet';
var options = {
"method": "post",
"oAuthServiceName": "twitter",
"oAuthUseToken": "always",
"payload":{"status":status}
};
var url = "https://api.twitter.com/1.1/statuses/update.json";
Logger.log('begin post');
var request = UrlFetchApp.fetch(url, options);
Logger.log('post complete');
}
当你注册你的推特应用程序,你必须检查选项Allow this application to be used to Sign in with Twitter
。这样可以防止连续的授权弹出窗口。另外,tweet文本不能包含单引号('
)。
发布于 2016-09-16 10:11:06
@J 148,oauthConfig降级了,你不能再使用它了;
现在,对于twitter,您必须使用OAuth1来编写应用程序脚本。迁移文档:medium=blog
样本:https://github.com/googlesamples/apps-script-oauth1/blob/master/samples/Twitter.gs
要使样本正常工作,您必须:
https://stackoverflow.com/questions/25577921
复制相似问题