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, throu…
JavaScript
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
examples
lib
node_modules
LICENSE
README
README.md
package.json

README.md

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 != "undefined" && 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 == "undefined" || 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();