使用Google Apps Script在我的推特上发布一条推文。

3
正如标题所示,我的目标是从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 中的某个地方。如果需要,我可以提供进一步的说明。任何帮助都将不胜感激。


SSL与HTTPS是同义词。您的“url”变量使用的是HTTP而不是HTTPS。我建议将其作为最简单的第一步尝试。var url =“https://api.twitter.etc - Alan Wells
Twitter API文档使用HTTPS。Tweet API - Alan Wells
因为忘记加上https而感到facepalm。然而,现在我收到了错误消息“请求失败,返回代码403。截断的服务器响应:{"errors":[{"code":170,"message":"缺少必需参数:status。"}]}”。但是我在Roptions中有status - J148
2个回答

6

真是太好了!有解决方法了。讽刺的是我之前也有类似的问题,但都被我忽略掉了。结果发现 https 是我的最大问题。今晚我会吃下谦虚派的。

发送推文的脚本

//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');
}

当您注册Twitter应用程序时,您必须勾选选项允许使用Twitter登录此应用程序。这可以防止不断出现的授权弹出窗口。另外,推文文本中不能包含单引号(')。

此解决方案已被弃用 https://cloud.google.com/blog/changes-oauth-apps-script - rubdottocom

1

@J148,oauthConfig已经被弃用,您不能再使用它了;

现在对于Twitter,您必须使用OAuth1 for Apps Script。迁移文档: https://developers.google.com/apps-script/migration/oauth-config?utm_campaign=oauth-appsscript-315&utm_source=gadbc&utm_medium=blog

Sample: https://github.com/googlesamples/apps-script-oauth1/blob/master/samples/Twitter.gs

为了使示例工作,您需要:
  • 将“OAuth1 for Apps Script库”添加到您的脚本项目中
  • 在Twitter应用程序的设置中声明一些存根“回调URL”

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接