0

我正在与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 问题。非常感谢 !

4

2 回答 2

1

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

如果是,那么这不是一个 twit 问题,因为它完全按照您的指示行事。

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

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

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

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

于 2013-03-06T17:00:45.343 回答
1

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

new cronJob('00 */5 * * * *', function(){ // 调用后 5mn 开始解析,每 5mn 然后 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);

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

      console.log(counter + " tweets saved in DB");
    })
}, null, true, "Europe/Paris");
于 2013-03-06T17:20:48.747 回答