Chrome拡張機能でFacebookのいいね数をバッジに表示してみる
Facebookのいいね数をバッジに表示してみる。
manifest.json
{ "name": "Sample Extension", "version": "0.0.1", "manifest_version": 2, "description": "サンプルの拡張機能です。", "permissions": ["tabs"], "browser_action" : { }, "background": { "scripts": ["jquery-1.11.1.min.js", "background.js"] } }
background.js
/* * 現在表示中のタブとURL */ var currentTabId; var currentUrl; /* * 一度取得したいいねの数はタブ毎にキャッシュしておく * * 【形式】 * cacheCount = { * タブID = { * URL => いいねの数, * }, * ・・・ * } */ var cacheCount = {}; /* * いいねの件数の更新 */ function updateLikeCount(tabId, url) { // 現在選択されているURLを設定する currentUrl = url; // 'http'で始まらないURLの場合は何もしない if (!url || url.match(/^http/) === null) { return; } // キャッシュがある場合はキャッシュから取得する if (cacheCount[tabId] !== undefined && cacheCount[tabId][url] !== undefined) { var count = cacheCount[tabId][url]; var badge = (count > 0) ? (count > 9999) ? "9999" : String(count) : ""; chrome.browserAction.setBadgeText({text:badge}); return; } // キャッシュがないのでいいねの数の取得して更新する // 一旦バッジをクリアする chrome.browserAction.setBadgeText({text:""}); // FacebookからFQLでいいねの数を取得する var query = "SELECT share_count, like_count, comment_count, total_count FROM link_stat WHERE url='" + url + "'"; jQuery.get('http://graph.facebook.com/fql', {q:query, format:"json"}, function(res) { // 取得時のタブとURLが、現在のものと異なる場合は何もしない if (tabId !== currentTabId || url !== currentUrl) { return; } // バッジの更新 if (res && res.data[0]) { //console.log(url); //console.log(res.data[0]); var count = res.data[0].like_count; var badge = (count > 0) ? (count > 9999) ? "9999" : String(count) : ""; // いいねの数をバッジに表示する chrome.browserAction.setBadgeText({text:badge}); // キャッシュを設定する if (cacheCount[tabId] === undefined) { cacheCount[tabId] = {}; } cacheCount[tabId][url] = count; } }); } /* * タブが切り替わった場合の処理 */ chrome.tabs.onSelectionChanged.addListener(function(tabId, selectInfo) { // 現在選択されているタブを設定する currentTabId = tabId; // タブのURLを取得する chrome.tabs.get(tabId, function(tab) { // いいね数の更新 updateLikeCount(tabId, tab.url); }); }); /* * 更新があった場合の処理 */ chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) { // タブのURLを取得する chrome.tabs.get(tabId, function(current_tab) { // 別のタブの更新の場合は何もしない if (tabId !== currentTabId) { return; } // 今のタブのURLとは別のURLを読み込んだ場合は何もしない // AutoPatchWorkを入れてると、同一タブで異なるURLで更新されるため if (tab.url !== current_tab.url) { return; } // 'loading'時と'complete'の2回呼ばれる // 'loading'時のみ更新し、それ以外の場合は更新しない if (changeInfo.status !== 'loading') { return; } // いいね数の更新 updateLikeCount(tabId, tab.url); }); });