Získejte počty Twitter a Facebook pomocí JSONP

Vadilo mi, že mnoho populárních API se přesunulo k vyžadování autentizace, aby bylo možné získat informace. Pokud mohu procházet stránku a získat uvedené informace, proč ji nemohu jednoduše stáhnout pomocí jednoduchého kódu a přeskočit bit ověřování? Myslel jsem, že Twitter i Facebook vyžadují ověření k načtení základních počtů příspěvků, ale ukázalo se, že je můžete získat pomocí JSONP. Zde je návod, jak to udělat.

JavaScript

Použiji základní JavaScript, abych vám ukázal, jak to udělat:

// Tiny object for getting counts
var socialGetter = (function() {
	/* just a utility to do the script injection */
	function injectScript(url) {
		var script = document.createElement('script');
		script.async = true;
		script.src = url;
		document.body.appendChild(script);
	}

	return {
		getFacebookCount: function(url, callbackName) {
			injectScript('https://graph.facebook.com/?id=' + url + '&callback=' + callbackName);
		},
		getTwitterCount: function(url, callbackName) {
			injectScript('http://urls.api.twitter.com/1/urls/count.json?url=' + url + '&callback=' + callbackName);
		}
	};
})();

// Callbacks to do something with the result
function twitterCallback(result) {
	result.count && console.log('The count is: ', result.count);
}

function facebookCallback(result) {
	result.shares && console.log('The count is: ', result.shares);
}

// Usage
socialGetter.getFacebookCount('https://davidwalsh.name/twitter-facebook-jsonp', 'facebookCallback');
socialGetter.getTwitterCount('https://davidwalsh.name/twitter-facebook-jsonp', 'twitterCallback');

Existují stovky všezahrnujících až malých mikrorámců, které spravují JSONP, takže nejdůležitější částí tohoto příspěvku jsou pravděpodobně adresy URL, ze kterých lze načíst počty. Použijte jakýkoli nástroj, který považujete za nejlepší!

Twitter a Facebook jistě omezují rychlost, jakou můžete tyto požadavky podávat, takže je velmi možné, že JSONP je jen špatnou cestou, pokud provozujete populární web. Jedním rychlým řešením je uložit hodnoty počtu do sessionStorage, ale to je pouze základ pro jednotlivé uživatele. Pokud provozujete web, který má slušnou návštěvnost, nejlepším řešením je pravděpodobně získat počet na straně serveru a uložit jej do mezipaměti za dané časové období.