【问题标题】:Post a tweet to my feed using Google Apps Script使用 Google Apps 脚本向我的提要发布推文
【发布时间】:2016-09-16 18:11:06
【问题描述】:

正如标题所示,我的目标是能够从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
  • Twitter API 文档使用 HTTPS。 Tweet API
  • facepalm 因为缺少 https。但是,我现在收到错误 Request failed for returned code 403. Truncated server response: {"errors":[{"code":170,"message":"Missing required parameter: status."}]}。但我在Roptions 中有status??

标签: twitter google-apps-script twitter-oauth


【解决方案1】:

尤里卡!这是解决方案。具有讽刺意味的是,我以前也有过这样的事情,但后来不理会它。原来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 应用程序时,您必须选中 Allow this application to be used to Sign in with Twitter 选项。这可以防止持续的授权弹出窗口。此外,推文文本不能包含单引号 (')。

【讨论】:

【解决方案2】:

@J148,oauthConfig 已弃用,你不能再使用它了;

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

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

要使示例正常工作,您必须:

  • 将“OAuth1 for Apps 脚本库”添加到您的脚本项目中
  • 在 twitter 应用的设置中声明一些存根“回调 URL”

【讨论】:

    猜你喜欢
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    相关资源
    最近更新 更多