要收集从我的个人资料发送的电报消息,在电子表格中注册并从这些消息创建tweet,我设置了以下模型:
var token = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
var telegramUrl = "https://api.telegram.org/bot" + token;
var webAppUrl = "https://script.google.com/macros/s/UUUUUUUUUUUUUUUUUUUUUUUUUUU";
function setWebhook() {
var url = telegramUrl + "/setWebhook?url=" + webAppUrl;
var response = UrlFetchApp.fetch(url);
}
function doPost(e) {
var contents = JSON.parse(e.postData.contents);
var dateNow = Utilities.formatDate(new Date(), "GMT-03:00", "yyyy-MM-dd' 'HH:mm:ss' '");
var id = contents.message.from.id;
if (id != 123456789) return;
var username = contents.message.from.username;
var name = contents.message.from.first_name + " " + contents.message.from.last_name;
var text = contents.message.text;
if (!text) return;
var ssId = "ID TO SPREADSHEET";
var sheet = SpreadsheetApp.openById(ssId).getSheetByName("SPREADSHEET NAME");
sheet.appendRow([dateNow, id, username, name, text]);
var twitterKeys= {
TWITTER_CONSUMER_KEY: "<<consumer key>>",
TWITTER_CONSUMER_SECRET: "<<consumer secret>>",
TWITTER_ACCESS_TOKEN: "<<access token>>",
TWITTER_ACCESS_SECRET: "<<access secret>>"
};
var props = PropertiesService.getScriptProperties();
props.setProperties(twitterKeys);
twit = new Twitter.OAuth(props);
var service = new Twitter.OAuth(props);
if ( service.hasAccess() ) {
var response = twit.sendTweet(text);
if (response) {
Logger.log("Tweet ID " + response.id_str);
} else {
// Tweet could not be sent
// Go to View -> Logs to see the error message
}
}
}
我使用的与Twitter
名称一致的库是:
MKvHYYdYA4G5JJHj7hxIcoh8V4oX7X1M_
但是tweet没有被发送,当我尝试单独使用tweet的发送部分时,消息Send tweet failure. Error was: {"name": "Exception"}
出现在日志记录中。
分隔发送测试:
function sendTweet(status) {
status = status || "Teste";
var twitterKeys= {
TWITTER_CONSUMER_KEY: "<<consumer key>>",
TWITTER_CONSUMER_SECRET: "<<consumer secret>>",
TWITTER_ACCESS_TOKEN: "<<access token>>",
TWITTER_ACCESS_SECRET: "<<access secret>>"
};
var props = PropertiesService.getScriptProperties();
props.setProperties(twitterKeys);
twit = new Twitter.OAuth(props);
var service = new Twitter.OAuth(props);
if ( service.hasAccess() ) {
var response = twit.sendTweet(status);
if (response) {
Logger.log("Tweet ID " + response.id_str);
} else {
// Tweet could not be sent
// Go to View -> Logs to see the error message
}
}
}
我想在脚本中编辑一些我需要的帮助,以便在电报上收集的消息成为文本,并作为新的tweet发送到Twitter。
修改点:
当我使用以下示例脚本使用您提供的令牌测试发布文本时,
const url = "https://api.twitter.com/1.1/statuses/update.json"
const params = {muteHttpExceptions: true, "method":"POST","payload":"status=test","headers":{"Authorization":"###"},"escaping":false};
const res = UrlFetchApp.fetch(url, params);
console.log(res.getContentText())
我确认了{"request":"/1.1/statuses/update.json","error":"Read-only application cannot POST."}
的错误信息。从这个错误消息来看,您当前问题的原因似乎是由于您的twitter帐户的应用程序端使用twitter API的设置。遗憾的是,此错误信息并未显示在您正在使用的库中。遗憾的是,无法直接找到问题的原因。
为此,请从"阅读"中修改应用程序对twitter API的权限。到"读写";和"读+写+直接消息"。修改权限后,请获取新的访问令牌和密码。通过这个流程,当使用新的访问令牌和密钥时,脚本就可以工作了。
参考:- Twitter开发者应用