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 issueを参照してください。どうもありがとう !

4

2 に答える 2

1

ツイートはコンソールに記録されていますか?

はいの場合、それはあなたが言ったことを正確に行うので、それは気の利いた問題ではありません。

あなたのコードを正しく読んだので、cronjob5 分ごとに 1 回起動する を作成します。

  • これにより、新しいローカル ストリームが接続され、コンソールに出力され、次の 5 分間のカウンターが増加します。
  • client.collection("TweetNumbers")値が 0 のローカル変数 counter を使用して、 global に挿入します。
  • it console.log(counter + " tweets saved in DB");、ローカル変数 counter の値が 0 の場合
  • その後、関数は終了し、5 分後に新たに開始されます。

  • stream.on は、ツイートが次の 5 分間に発生するたびに起動し続け、カウンターを増やしますが、カウンターがcollection.insert2 秒後に再び使用されることはありませんconsole.log

これは、すべてのものに対して新しいローカル変数を作成し、初期値を再度ログに記録する関数を再起動するためです。

于 2013-03-06T17:00:45.343 に答える
1

つまり、「つぶやき」イベントが発火してカウンターを増やす機会を得ることはありませんvar counter = 0console.log()あなたはこれをしたいかもしれません:

new cronJob('00 */5 * * * *', function(){ // 呼び出しの 5 分後に解析を開始し、5 分ごとに var stream = T.stream('statuses/filter', { track: 'hashtag' } ) 変数カウンタ = 0; 変数日付 = 新しい日付(); 変数​​コレクション = 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 に答える