Tweet Buttonなどを独自にデザインしたかったので作った。
まぁ、Twitter、Facebook、はてぶしか取れないんだけど。。
var socialCount = (function() {
'use strict';
var _url = window.location.href, _api = { twitter: 'http://urls.api.twitter.com/1/urls/count.json', facebook: 'https://graph.facebook.com/', hatena: 'http://api.b.st-hatena.com/entry.count?callback=?' };
function _getParameter(vendor) { if ( vendor === 'facebook' ) { return {'id':_url}; } return {'url':_url}; }
function _getPromise(vendor) { if ( ! _api[vendor] ) return;
var defer = $.Deferred(); $.ajax({ url: _api[vendor], dataType: 'jsonp', data: _getParameter(vendor), success: defer.resolve, error: defer.reject }); return defer.promise(); }
var socialCount = { get: function(vendors, callback) { if ( typeof callback !== 'function' ) return this; if ( ! $.isArray(vendors) ) vendors = [vendors]; var promises = $.map(vendors, function(vendor) { return _getPromise( vendor ); }); $.when.apply($, promises).then(function() { var ret = {}; $.each(arguments, function(i, res) { var data = res[0]; ret[vendors[i]] = data.shares != null ? data.shares : data.count != null ? data.count : data; }); callback.call(socialCount, ret); }); return this; }, url: function(url) { if ( url ) _url = url; return this; } };
return socialCount; }());
|
カウントを取るには、socialCount.get()
を呼び出す。
第1引数にはカウントを取得したいサービスを配列で書く。第2引数にはコールバック関数を記述する。
$(function() { socialCount.get(['twitter', 'facebook', 'hatena'], function(res) { console.log(res); }); });
|
デフォルトはlocation.href
のカウントを取得するようになっているが、socialCount.url()
で任意のURLのカウントを取ることもできる。
$(function() { socialCount.url('http://www.yahoo.co.jp/').get(['twitter', 'facebook', 'hatena'], function(res) { console.log(res); }); });
|
こんな感じでまぁなんとか。。
PocketとGoogle+を追加したい。