livedoor Reader に ping を送信する Greasemonkey スクリプト
livedoor Reader が ping の受け付けを開始したとのことだけど、「はてなダイアリーのヘルプ - リンク元・Ping送信設定を変える」に見られる通り、はてなの ping 送信先は決め打ちで、かつ、LDR に対応してないので、それ Gre(ry
つかこれテキトー過ぎ。まぁ、テキトーじゃなかったことなど、これまで一度もなかったのだが!つか、これでうまくいってるのかどうか、よくわかりません><
UPDATE: なんかうまくいってない気がする。まぁどうでもいいけど。
MORE UPDATE: 編集画面の submit と同時に ping を送っちゃうと、エントリが保存されていないため、更新前のフィードが取得されちゃうようなので、画面遷移後に ping を送信するようにした。
// ==UserScript== // @name LDR UpdatePing // @namespace http://antipop.gs/ns/greasemonkey/ldr_updateping // @include http://d.hatena.ne.jp/* // ==/UserScript== // // This script was written by Kentaro Kuribayashi // // Homepage: http://antipop.gs/ // Weblogs : http://d.hatena.ne.jp/antipop/ (in Japanese) // http://antipop.typepad.com/ (in English ) // // Copyright (C) 2006 by Kentaro Kuribayashi // // This script is distributed under the CCPL by-sa // - See: http://creativecommons.org/licenses/by-sa/2.5/ // (function(){ var SCRIPT_NAME = 'LDR UpdatePing'; var VERSION = '0.02'; var isAfterEdit = GM_getValue('isAfterEdit'); var pingUri = 'http://rpc.reader.livedoor.com/ping'; if (!isAfterEdit && location.href.match(/http:\/\/d\.hatena\.ne\.jp\/[^\/]+\/edit.*/)) { $X('//input[@name = "edit"]')[0].addEventListener('click', function () { GM_setValue('isAfterEdit', true); }, false); } else if (isAfterEdit) { var title = document.title.split(' - ')[0]; var link = location.href.match(/(http:\/\/d\.hatena\.ne\.jp\/[^\/]+\/).*/)[1]; var call = <methodCall> <methodName>weblogUpdates.ping</methodName> <params> <param><value><string>{title}</string></value></param> <param><value><string>{link}</string></value></param> </params> </methodCall> ; GM_xmlhttpRequest({ method : 'POST', url : pingUri, headers : { 'User-Agent' : [SCRIPT_NAME, '/', VERSION].join(''), 'Content-Type' : 'text/xml', }, data : call.toString(), onload : function (res) { alert(new XML(res.responseText.replace(/^<\?xml.+?\?>/, ''))..string[0]); GM_setValue('isAfterEdit', false); }, onerror : function (res) { alert(['Error', res.statusText].join(' - ')); }, }); } // $X was originally written by cho45 (http://lowreal.net/logs/2006/03/16/1), and // it is distributed under the CCPL by-sa same as this script function $X (exp, context) { if (!context) context = document; var resolver = function (prefix) { var o = document.createNSResolver(context)(prefix); return o ? o : (document.contentType == 'text/html') ? '' : 'http://www.w3.org/1999/xhtml'; } var exp = document.createExpression(exp, resolver); var result = exp.evaluate(context, XPathResult.ANY_TYPE, null); switch (result.resultType) { case XPathResult.STRING_TYPE : return result.stringValue; case XPathResult.NUMBER_TYPE : return result.numberValue; case XPathResult.BOOLEAN_TYPE: return result.booleanValue; case XPathResult.UNORDERED_NODE_ITERATOR_TYPE: { result = exp.evaluate(context, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var ret = []; for (var i = 0, len = result.snapshotLength; i < len ; i++) { ret.push(result.snapshotItem(i)); } return ret; } } return null; } })();