不要在Node中使用流API获取推文

时间:2013-03-06 08:44:44

标签: node.js twitter

我正在使用Twit来获得围绕Twitter API的好包装器。我有一个cron来获取特定主题标签上的所有推文。每当有新的推文时它会递增计数器,并在句点结束时将其保存到数据库(MongoDB)中。唯一的问题是,它总是让我0 这是代码

new cronJob('00 */5 * * * *', function(){ // start parsing 5mn after call, and every 5mn then
        var stream = T.stream('statuses/filter', { track: 'hashtag' })
        var counter = 0;
        var date = new Date();
        var collection = client.collection("TweetsNumber");

        stream.on('tweet', function (tweet) {
          console.log(tweet);
          counter += 1;
        })

        collection.insert({Date: date, CrawledTweets: counter, Channel: "someChannel"});
        console.log(counter + " tweets saved in DB");

    }, null, true, "Europe/Paris");

根据文档,只要有新的推文,就会调用“stream.on”方法。我使用一些趋势主题来确保有数据,但它就像从未被调用过,我真的不知道为什么。
希望你能帮忙。祝你有美好的一天!

编辑:T已经在程序的另一部分中创建,并且在其他功能方面,它正在工作。对于客户端也是如此,这是我的数据库。

编辑:感谢Shodan,它现在有效,请参阅github issue。非常感谢!

2 个答案:

答案 0 :(得分:1)

推文是否已登录到您的控制台?

如果是,那么这不是一个麻烦的问题,因为它完全符合你的要求。

当我正确阅读您的代码时,您创建一个cronjob,每5分钟触发一次。

  • 它连接一个新的本地流,该流应该输出到控制台并在接下来的5分钟内增加计数器。
  • 它插入全局client.collection("TweetNumbers"),局部变量计数器的值为0
  • console.log(counter + " tweets saved in DB");,局部变量计数器的值为0
  • 然后退出该功能,并在5分钟内重新开始。

  • stream.on应该会在接下来的5分钟发出推文时继续触发并增加计数器,但计数器永远不会被collection.insert和第二console.log再次使用

这是因为你重新启动函数为所有东西创建新的局部变量并再次记录初始值。

答案 1 :(得分:1)

您设置var counter = 0然后立即console.log()它,这意味着'推文'事件永远不会有机会触发并增加计数器。你可能想这样做:

new cronJob('00 * / 5 * * * *',function(){//在调用后开始解析5mn,每隔5mn然后         var stream = T.stream('status / filter',{track:'hashtag'})         var counter = 0;         var date = new Date();         var collection = client.collection(“TweetsNumber”);

    stream.on('tweet', function (tweet) {
      console.log(tweet);

      collection.insert({Date: date, CrawledTweets: counter, Channel: "someChannel"});
      counter += 1;

      console.log(counter + " tweets saved in DB");
    })
}, null, true, "Europe/Paris");