twimap

Twimap is a very simple Node.js module for collecting twitter followers user-name's from a specific date.

Description

Twimap is a very simple Node.js module for collecting twitter followers user-name's from a specific date. This module can be used to address the issue of getting list of recent followers on twitter with minimum effort possible. Solution implemented in this module is that: it looks inside a mailbox, which is registered with twitter account, through IMAP protocol and searches for a special e-mail subjects (e-mails notifying the the twitter user that someone new has started following you on twitter) and extracts the twitter follower user-name from those matching e-mails.

Requirements

  • node v0.4.0 or newer

Installation

npm install twimap

Example

from file thanker.js

var twimap;
twimap = require("twimap");
var Twit = require("twit");
var util = require("util");
var _current_index = -1;
var _followers_list ;
var thanks_temp;
 
thanks_temp = [
    "Dear %s, thank you for following :)",
    "%s = awesome. Me = grateful for following :)",
    "Is there no limit to your awesomeness  %s? Thank you for following!",
    "You can’t see me %s! but I’m totally doing a happy dance! Big thanks for following me on twitter :)",
    "hey %s!Do you practice being so wonderful? Thank you kindly for following."
];
 
// create twitter client 
twit_cli = new Twit({
    consumer_key:       "---consumer-key---"
    , consumer_secret:     "---consumer-secret---"
    , access_token:         "---access-token---"
    , access_token_secret:  "---access-token-secret---"
});
 
//config TWIMAP imap account 
twimap.configImap({
    user : '---username---@gmail.com',
    password : '---password---',
    host : 'imap.gmail.com',
    port : 993,
    secure : true
});
 
// stores last imap try 
var last_check =  now();
 
 
//call this function periodically to get new followers 
//callback is called when new information is available 
function load_followers_priodically() {
    try{
 
    twimap.followersAsync(last_check, function(result) {
        if(typeof result != "" && result.length >=1){
            //save it in our variable 
            _followers_list = result;
            last_check = now();
            msg_followers_thanks();
        }
 
 
    },function (err){
 
        //  I command you to stay silent 
        reset_values();
    });
 
    }catch(e){
    //still... 
        reset_values();
        console.log(e);
    }
}
 
 
 
//this function iterates through followers listed in variable 
//_followers_list  
function msg_followers_thanks(){
    
    //move cursor 
    _current_index++;
 
    //if there is no followers OR finished messaging followers stop 
    if(_current_index >= _followers_list.length  ){
        _current_index = -1;
        _followe_list = null;
        return;
    }
        //otherwise get user name from twitter  
        twit_cli.get("users/show",{screen_name:_followers_list[_current_index]}, function (err,dt){
            
            //clean up the name 
            var dude = filter_name(dt.name);
                
            //message the user 
             twit_cli.post("direct_messages/new" , {screen_name:_followers_list[_current_index],text:random_msg(dude)}, function (err,dt){
                    if(!err) console.log("done...");
 
                    //go for another round 
                    msg_followers_thanks();
            });
           
        });
 
}
 
//cut names bigger that 40 characters 
function filter_name(name){
    if ( typeof name == "" || name=="" || name==null) name = "my friend";
    if(name.length > 40 ) name = name.substr(0,40);
    return name;
}
 
 
//generate a random message 
function random_msg(name){
    name = filter_name(name);
    return  util.format(thanks_temp[Math.floor(Math.random()*10)%(thanks_temp.length-1)] , name);
}
 
//return current day 
function now() {
    var d;
    d = new Date();
    return d.toUTCString();
}
 
//reset values on error 
function reset_values(){
    _current_index = -1;
    _followers_list = null;
 
}
 
// run safe and sound :| 
function run(){
_interval = setInterval(load_followers_priodically,1000*60*30);
 
//run now , I can't wait ;) 
load_followers_priodically();
}
 
//cheers to a happy running ;) 
run();