[英]Getting an error with Twitter lib
在Google Apps脚本中,我在我的项目中有这段代码发送推文( 也在jsBin中 ):
function sendTweet(status) {
var twitterKeys= {
TWITTER_CONSUMER_KEY: "x",
TWITTER_CONSUMER_SECRET: "x",
TWITTER_ACCESS_TOKEN: "x",
TWITTER_ACCESS_SECRET: "x"
};
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
}
}
}
sendTweet("test");
但我遇到的问题是我收到此错误:
TypeError: Cannot read property "text" from undefined. (line 293, file "twitter", project "Twitter lib")
第293行来自“Twitter lib”库的版本21( MKvHYYdYA4G5JJHj7hxIcoh8V4oX7X1M_ )。
尽管出现了错误,但“test”消息实际上都会被发送。 有谁知道如何修理它?
嗨,Twitter Lib的作者。 @Mogsdad在Twitter上指出了我。 我想我知道你的剧本发生了什么,这是Google Script工作原理的一个特点。
您的大部分代码都在一个带参数的函数中,然后您可以在脚本的顶层调用该函数。 当你进入“运行”菜单并选择你的sendTweet
函数时,顶层的脚本在执行所选函数之前运行会发生什么,并且当时将使用“test”文本发送推文。
然后, sendTweet
在没有参数的status
运行,这意味着status
变量undefined
。 您将未定义的值发送到twit.sendTweet()
,导致您看到的错误。
我在这里推荐的只是将最后一行代码包装成一个函数,这样你就可以从Run菜单中调用它,如下所示:
function sendTestTweet() {
sendTweet("test");
}
回顾一下,您看到的错误是:
TypeError:无法从undefined中读取属性“text”。 (第293行,文件“twitter”,项目“Twitter lib”)
那就是在sendTweet()
的方法的文库 ,见下文。
/**
* Upload a tweet to Twitter with optional media.
*
* @param {string | Tweet} tweet the status text to send as a Twitter update
* @param {optional object} params any additional parameters to send as part of the update post
* @return {object} the Twitter response as an object if successful, null otherwise
*/
OAuth.prototype.sendTweet = function(tweet, params) {
var i;
var payload = { //<=== 293
"status" : (tweet.text || tweet)
};
您的代码使用单个字符串参数status
调用此方法,该参数设置为“test”。
该库的作者允许tweet
参数是两件事之一:
text
属性的对象,或者 但是,正在处理的方式首先检查tweet.text
,然后如果不存在则检查字符串tweet
。 当tweet.text
不存在时(即仅使用字符串时),抛出TypeError。
我已经联系了图书馆作者,因此他们可以发布修复程序。 但是,在此期间,您可以发送带有text
属性的Tweet
对象,或者获取库的副本并自行更新。
发送推文对象。 Tweet对象记录在Twitter API v1.1文档中 ,但由于此操作中涉及的唯一属性是text
,因此只需对status
函数进行简单更改即可。 只需确保status
是具有text
属性的对象。
function sendTweet(status) { if (typeof status === string) status = {text:status}; ...
自己更新库。 为了避免错误,并正确处理参数选项,库中的第294行应为:
"status" : (tweet.hasOwnProperty("text") ? tweet.text : tweet)
要么:
"status" : (typeof tweet === 'object' ? tweet.text : tweet)
您需要发布它,并更新代码中的库ID,但这应该解决这个问题。 库更新可用后,您可以切换回来。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.