【问题标题】:Best way to sort and handle tweets - Twitter API排序和处理推文的最佳方式 - Twitter API
【发布时间】:2016-03-22 22:15:53
【问题描述】:

下面的代码成功返回推文和推特数据,我现在的问题是从推特数组中排序和返回细节的最佳方法是什么,例如在 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)
}

【问题讨论】:

    标签: javascript node.js sorting twitter


    【解决方案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');
      }
    }
    

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

    【讨论】:

    • 我一定会通读的,谢谢。是否可以将 sortTweets() 的 else if 部分合并到 handleTweets() 中?
    • 用建议更新答案
    猜你喜欢
    • 1970-01-01
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 2014-04-20
    相关资源
    最近更新 更多