Google の検索結果に delicious のブックマーク数を付け加える GreaseMonkey スクリプト
XMLHttpRequest だとクロスドメインにリクエストできないらしい。
GreaseMonkey の場合は GM_xmlhttpRequest でクロスドメインに非同期的にリクエストできる。
それのサンプルとしてタイトルにあるようなものを書いてみたんだけど、MD5を求めるのにHugeDomains.com - Shop for over 300,000 Premium Domainsを使っているせいで、通信量が多い気がする。
以下コード。
// ==UserScript== // @name Google with Delicious // @namespace http://d.hatena.ne.jp/eagletmt/ // @include http://www.google.*/search?* // ==/UserScript== (function(){ var f = function(a) { GM_xmlhttpRequest({ method: 'GET', url: 'http://www.hashserver.com/md5/?info='+encodeURIComponent(a.href), onload: function(xhr) { if (xhr.readyState == 4 && xhr.status == 200) { var md5 = xhr.responseText; g(md5, a); } } }) } var g = function(md5, a){ GM_xmlhttpRequest({ method: 'GET', url: 'http://feeds.delicious.com/v2/json/urlinfo/'+md5, onload: function(xhr) { if (xhr.readyState == 4 && xhr.status == 200) { var info = eval(xhr.responseText)[0]; if (info) { var div = document.createElement('div'); var link = document.createElement('a'); link.href = 'http://delicious.com/url/'+md5; link.appendChild(document.createTextNode('delicious '+info.total_posts+' users')); div.appendChild(link); var r = document.evaluate('../../div[@class="s" or @class="s hc"]', a, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); if (r.snapshotLength == 1) { var s = r.snapshotItem(0); s.parentNode.insertBefore(div, s); } } } } }) } var res = document.evaluate('//a[@class="l"]', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); for (var i = 0, len = res.snapshotLength; i < len; i++) { f(res.snapshotItem(i)); } })()