排序和处理推文的最佳方式 - Twitter API

时间:2016-03-22 13:02:47

标签: javascript node.js sorting twitter

以下代码成功返回推文和推特数据,我现在的问题是从twitter数组中排序和返回细节的最佳方法是什么,例如sortTweets()中指定的那些。我目前遇到的主要问题是,由于twitter API和JS的异步性质,我不知道如何指定函数等待getTweets()返回必要的数据,然后可以对其进行排序和修剪到推文,用户等。这是最好的方法,还是更容易在handleTweets()函数中对推文进行排序?

var Twit = require('twit');
var client = new Twit({
  consumer_key: '',
  consumer_secret: '',
  access_token: '',
  access_token_secret: '',
  timeout_ms: 60*1000,
});

var count = 10,
    profile = 'manutd',
    date = '2011-11-11',
    keyword = 'man city',
    lan = 'en',
    search = keyword + " since:" + date + " lang:" + lan;

var tweets = getTweets();
var profiles = getProfile();
console.log('Started')
//var sortedTweets = sortTweets(tweets);
//console.log(sortedTweets)

function handleTweets(err, data){
  if (err) {
    console.error('Get error', err)
  }  
  else {
    console.log('Get Tweets');
    //console.log(data);
    console.log('Finished');
  }
}

function handleFriends(err, data){
  if (err) {
    console.error('Get error', err)
  }  
  else {
    console.log('Get Friends');
    //console.log(data);
    console.log('Finished');
  }
}

function sortTweets (err, data, response) {
    if (err) {
      console.error('Get error', err)
    }
    else if (getTweets.ready){
      for (var indx in data.statuses){
          var tweet = data.statuses[indx];
          console.log('on: ' + tweet.created_at + ' : @' + tweet.user.screen_name + ' : ' + tweet.text+'\n\n');
      }
    }
    else {
      setTimeout(sortTweets,100);
    }
}


function getTweets(){
  return client.get('search/tweets', { q: search, count: count, from: profile },
              handleTweets)

}

function getProfile( callback ){
  return client.get('friends/list', { screen_name: profile, count: count },
             handleFriends)
}

1 个答案:

答案 0 :(得分:1)

两种方式都有效,但我建议直接在handleTweets()函数中处理排序,因为您可以确保在调用sortTweets()函数时,您将收到数据的响应或者可以处理的错误。

此外,我建议您阅读:http://callbackhell.com/,因为您的代码部分建议您不熟悉回调和NodeJS的异步部分,这在第一次使用时确实相当棘手。

修改

您的handleTweetssortTweets功能可能如下所示:

function handleTweets(err, data){
  if (err) {
    console.error('Get error', err)
  } else {
    console.log('Get Friends');
    //console.log(data);
    console.log('Finished, no error, data is ready');
    sortTweets(data);
  }
}

function sortTweets (data) {
  for (var indx in data.statuses){
    var tweet = data.statuses[indx];
    console.log('on: ' + tweet.created_at + ' : @' + tweet.user.screen_name + ' : ' + tweet.text+'\n\n');
  }
}

不保证代码的正确性,只是一个粗略的例子。