Javascript and Twitter API rate limitation? (Changing variable values in a loop)
- by Pablo
Hello,
I have adapted an script from an example of http://github.com/remy/twitterlib. It´s a script that makes one query each 10 seconds to my Twitter timeline, to get only the messages that begin with a musical notation. It´s already working, but I don´t know it is the better way to do this...
The Twitter API has a rate limit of 150 IP access per hour (queries from the same user). At this time, my Twitter API is blocked at 25 minutes because the 10 seconds frecuency between posts. If I set up a frecuency of 25 seconds between post, I am below the rate limit per hour, but the first 10 posts are shown so slowly. I think this way I can guarantee to be below the Twitter API rate limit and show the first 10 posts at normal speed:
For the first 10 posts, I would like to set a frecuency of 5 seconds between queries.
For the rest of the posts, I would like to set a frecuency of 25 seconds between queries.
I think if making somewhere in the code a loop with the previous sentences, setting the "frecuency" value from 5000 to 25000 after the 10th query (or after 50 seconds, it´s the same), that´s it... Can you help me on modify this code below to make it work?
Thank you in advance.
var Queue = function (delay, callback) {
var q = [],
timer = null,
processed = {},
empty = null,
ignoreRT = twitterlib.filter.format('-"RT @"');
function process() {
var item = null;
if (q.length) {
callback(q.shift());
} else {
this.stop();
setTimeout(empty, 5000);
}
return this;
}
return {
push: function (item) {
var green = [], i;
if (!(item instanceof Array)) {
item = [item];
}
if (timer == null && q.length == 0) {
this.start();
}
for (i = 0; i < item.length; i++) {
if (!processed[item[i].id] && twitterlib.filter.match(item[i], ignoreRT)) {
processed[item[i].id] = true;
q.push(item[i]);
}
}
q = q.sort(function (a, b) {
return a.id > b.id;
});
return this;
},
start: function () {
if (timer == null) {
timer = setInterval(process, delay);
}
return this;
},
stop: function () {
clearInterval(timer);
timer = null;
return this;
},
empty: function (fn) {
empty = fn;
return this;
},
q: q,
next: process
};
};
$.extend($.expr[':'], {
below: function (a, i, m) {
var y = m[3];
return $(a).offset().top y;
}
});
function renderTweet(data) {
var html = '';
html += '';
html += twitterlib.ify.clean(data.text);
html += '';
since_id = data.id;
return html;
}
function passToQueue(data) {
if (data.length) {
twitterQueue.push(data.reverse());
}
}
var frecuency = 10000; // The lapse between each new Queue
var since_id = 1;
var run = function () {
twitterlib
.timeline('twitteruser', { filter : "'?'", limit: 10 }, passToQueue)
};
var twitterQueue = new Queue(frecuency, function (item) {
var tweet = $(renderTweet(item));
var tweetClone = tweet.clone().hide().css({ visibility: 'hidden' }).prependTo('#tweets').slideDown(1000);
tweet.css({ top: -200, position: 'absolute' }).prependTo('#tweets').animate({
top: 0
}, 1000, function () {
tweetClone.css({ visibility: 'visible' });
$(this).remove();
});
$('#tweets p:below(' + window.innerHeight + ')').remove();
}).empty(run);
run();