JavaScript: l'errore 400 di Twitter

Short link

Nella stragrande maggioranza dei casi, l'errore 400 di Twitter (Error 400 Bad Request) è dovuto al fatto che avete superato la vostra quota massima di richieste a Twitter per ogni ora. Questo limite può variare da 150 richieste all'ora (per le richieste non autenticate) a 350 richieste all'ora (per le richieste autenticate). In questo articolo vedremo i dettagli salienti di questo problema.

Per iniziare, immaginate di aver creato uno script in jQuery che prende i vostri tweet ad intervalli regolari. Ovviamente avete usato il vostro account Twitter come base per i test.

Ecco un ipotetico codice:


var queue = function() {

	setTimeout(function() {
	
		getTweets();
		
		setTimeout(arguments.callee, 5000);
	
	}, 100);

};

I tweet vengono presi ogni 5 secondi ad intervalli regolari. Se testate la vostra applicazione per 5 minuti, avrete già eseguito all'incirca 60 richieste. Il problema è che le vostre 60 richieste di test si vanno a sommare a tutte le altre richieste che provengono dal web (per esempio dai vostri siti) ogni qualvolta viene visualizzata una pagina che contiene i vostri tweet. Quindi avete abbondantemente superato la vostra quota oraria.

Infatti Twitter monitora le richieste fatte al vostro account e se queste superano la quota oraria consentita, il vostro feed JSONP restituirà semplicemente un oggetto di tipo error con il codice corrispondente e una breve spiegazione.

Dopo qualche tempo, Twitter effettuerà un reset sul conteggio delle richieste e voi potrete di nuovo accedere al vostro feed.

La documentazione ufficiale sul rate limiting, per quanto esaustiva, non è chiarissima e si limita ad affermare nel caso delle richieste non autenticate:

Unauthenticated calls are permitted 150 requests per hour. Unauthenticated calls are measured against the public facing IP of the server or device making the request.

In pratica sono permesse 150 richieste all'ora e il monitoraggio sul Web avviene tramite l'IP di riferimento del server da cui parte la richiesta.

Le relative FAQ sono più accessibili. Un passaggio fondamentale è il seguente:

This means applications share the unauthenticated rate limit AND the authenticated limit. The application being used makes no difference so switching between multiple clients on the same IP offers no rate limit advantage – they will all share the same remaining requests.

Quindi il conteggio di Twitter viene calcolato ogni ora per ogni account. Le ricerche su Twitter eseguite tramite JSONP seguono criteri leggermente diversi ma sostanzialmente simili.

Se utilizzate le API, potete visualizzare la vostra quota oraria effettuando una chiamata a /1/account/rate_limit_status.xml o /1/account/rate_limit_status.json. Otterrete una risposta simile a questa:


{"reset_time_in_seconds"=>1277485629,
 "remaining_hits"=>350,
 "hourly_limit"=>350,
 "reset_time"=>"Fri Jun 25 17:07:09 +0000 2010"}

Twitter inoltre è in grado di monitorare la media delle richieste per ogni ora e a far scattare il blocco qualora questa media subisca una brusca impennata.