繁体   English   中英

使用Twitter lib获取错误

[英]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参数是两件事之一:

  • 它可以是一个带有包含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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM