return new Promise(function (resolve, reject) { var T = Twit({ consumer_key: config.twitter_api_config.consumer_key, consumer_secret: config.twitter_api_config.consumer_secret, access_token: accessToken, access_token_secret: accessTokenSecret }); var runCount = 0; var tweetID = ''; var tweetCount = 0; var tweetSources = {}; var dailyTweetSources = {}; function find() { if (runCount > 100) { return resolve({ tweetCount: tweetCount, tweetSources: tweetSources, dailyTweetSources: dailyTweetSources, truncated: true }); } T.get('statuses/user_timeline', { screen_name: user, include_rts: false, exclude_replies: false, count: 200, max_id: bigInt(tweetID).subtract(1).toString(), trim_user: true }, function (err, data, response) { if (!err && !data.errors) { if (data.length > 1) { tweetCount += data.length; data.forEach(function (tweet) { var src = sourcegex.exec(tweet.source)[1]; var date = new Date(tweet.created_at); date.setHours(0, 0, 0, 0); date = date.toISOString(); if (typeof tweetSources[src] === 'undefined') { tweetSources[src] = 1; } else { tweetSources[src]++; } if (typeof dailyTweetSources[date] === 'undefined') { dailyTweetSources[date] = {}; dailyTweetSources[date][src] = 1; } else { if (typeof dailyTweetSources[date][src] === 'undefined') { dailyTweetSources[date][src] = 1; } else { dailyTweetSources[date][src]++; } } }); tweetID = data[data.length - 1].id_str; find(); } else { return resolve({ tweetCount: tweetCount, tweetSources: tweetSources, dailyTweetSources: dailyTweetSources, truncated: false }); } } else { return reject({ error: 'api_error', message: err }); } }); } T.get('statuses/user_timeline', { screen_name: user, include_rts: 0 }, function(err, data, response) { if (!err && !data.errors) { console.log('Sourcing user ' + data[0].user.name + '(@' + data[0].user.screen_name + ')'); tweetID = data[0].id_str; find(); } else { return reject({ error: 'user_not_found', message: 'User not found.' }); } }); });
return new Promise(function (resolve, reject) { var T = Twit({ consumer_key: config.twitter_api_config.consumer_key, consumer_secret: config.twitter_api_config.consumer_secret, access_token: accessToken, access_token_secret: accessTokenSecret }); var runCount = 0; var tweetID = ''; var tweetCount = 0; var untouchedTweets = 0; function find() { if (runCount > 100) { return resolve({ tweetCount: tweetCount, untouchedTweetCount: untouchedTweets, truncated: true }); } T.get('statuses/user_timeline', { screen_name: user, include_rts: false, exclude_replies: false, count: 200, max_id: bigInt(tweetID).subtract(1).toString(), trim_user: true }, function (err, data, response) { if (!err && !data.errors) { if (data.length > 1) { tweetCount += data.length; data.forEach(function (tweet) { if (tweet.retweet_count == 0 && tweet.favorite_count == 0) { untouchedTweets++; } }); tweetID = data[data.length - 1].id_str; find(); } else { return resolve({ tweetCount: tweetCount, untouchedTweetCount: untouchedTweets, truncated: false }); } } else { return reject({ error: 'api_error', message: err }); } }); } T.get('statuses/user_timeline', { screen_name: user, include_rts: 0 }, function(err, data, response) { if (!err && !data.errors) { console.log('Judging user ' + data[0].user.name + '(@' + data[0].user.screen_name + ')'); tweetID = data[0].id_str; find(); } else { return reject({ error: 'user_not_found', message: 'User not found.' }); } }); });