Advertisement
Guest User

Untitled

a guest
Dec 21st, 2014
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var fs = require('fs');
  2. var _ = require('lodash');
  3. var async = require('async');
  4. var Twit = require('twit');
  5. var pg = require('pg').native;
  6. var colors = require('colors');
  7. // Database connections - TODO - Use env
  8.  
  9. var finished = function (db) {
  10.   db.end();
  11.   console.log('Crawl complete'.blue)
  12.  
  13. };
  14.  
  15. var blockedColons = ['http', 'https'];
  16.  
  17. var parseColon = function (tweet) {
  18.   var colonRegex = /^([\sa-zA-Z0-9]{0,20}):(.*)$/;
  19.   // Has to be in first 15 characters
  20.   var match = colonRegex.exec(tweet);
  21.   var colon = null
  22.   if (match !== null) {
  23.  
  24.     var matchedColon = match[1];
  25.     var text = match[2];
  26.     var blocked = false;
  27.     _.each(blockedColons, function (block) {
  28.       if (matchedColon.indexOf(block) !== -1) {
  29.         blocked = true;
  30.       }
  31.     })
  32.     if (!blocked) {
  33.       console.log('Found colon'.green, matchedColon, ':', text);
  34.       colon = {
  35.         colon: matchedColon,
  36.         text: text
  37.       }
  38.     } else {
  39.       console.log('Colon is in the blocked list'.yellow, matchedColon);
  40.     }
  41.   }
  42.   return colon;
  43. }
  44. pg.connect(conString, function (err, db, done) {
  45.   if (err) {
  46.     return console.error('error fetching client from pool', err);
  47.   } else {
  48.     console.log('Postgres connected');
  49.   };
  50.  
  51.   var currentTime = new Date().getTime();
  52.  
  53.   // Find outdated users
  54.  
  55.   db.query("SELECT * FROM users WHERE last_checked-" + currentTime + " < -60", function (err, result) {
  56.     var users = result.rows;
  57.     if (users.length > 0) {
  58.       console.log('Found users who have to be checked'.green, users.length);
  59.       async.eachSeries(users, function (user, callback) {
  60.         console.log('Loading data for'.green, user.screen_name);
  61.  
  62.         var T = new Twit({
  63.           consumer_key: "",
  64.           consumer_secret: "",
  65.           access_token: user.access_token,
  66.           access_token_secret: user.access_token_secret
  67.         });
  68.  
  69.         T.get('users/show', {
  70.           screen_name: user.screen_name
  71.         }, function (err, twitter_user, response) {
  72.           db.query("UPDATE users SET twitter_name=$1, twitter_location=$2, twitter_description=$3, twitter_picture=$4, twitter_followers=$5 WHERE screen_name=$6", [twitter_user.name, twitter_user.location, twitter_user.description, twitter_user.profile_image_url_https.replace('_normal', ''), twitter_user.followers_count, user.screen_name], function (err, result) {
  73.             console.log('User bio updated'.green);
  74.  
  75.             T.get('statuses/user_timeline', {
  76.               count: 200,
  77.               include_rts: false,
  78.               exclude_replies: false
  79.             }, function (err, data, response) {
  80.               //console.log(data);
  81.               var tweets = _.map(data, function (tweet) {
  82.                 var colon = parseColon(tweet.text);
  83.                 if (colon !== null) {
  84.                   colon.tweet = tweet;
  85.                 }
  86.                 return colon;
  87.               });
  88.               tweets = _.filter(tweets, function (tweet) {
  89.                 return tweet !== null ? true : false;
  90.               });
  91.               async.eachSeries(tweets, function (tweet, cb) {
  92.                 db.query("INSERT INTO tweets (user_id, colon, text, tweeted_at, tweet_id, tweet_content) VALUES ($1,$2,$3,$4,$5,$6)", [user.id, tweet.colon, tweet.text, tweet.tweet.created_at, tweet.tweet.id_str, null], function (err, result) {
  93.                   if (err) {
  94.                     console.log('Tweet already exist'.yellow);
  95.                   } else {
  96.                     console.log('Added new colon based tweet'.green);
  97.                   }
  98.                   cb();
  99.  
  100.                 });
  101.               }, function () {
  102.                 callback();
  103.               });
  104.             });
  105.           });
  106.         });
  107.       }, function () {
  108.         finished(db);
  109.       })
  110.     } else {
  111.       finished(db);
  112.     }
  113.  
  114.   });
  115.  
  116. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement