2007-03-22

livedoor Readerにdel.icio.usのブックマーク数を表示するGreasemonkeyスクリプト

画像でブックマーク数が取れるようになったっぽいので作ってみました。
JavaScriptでURLのMD5ハッシュを計算するので、多少遅くなる可能性があります。最近のCPUなら問題ないはず。
http://la.ma.la/misc/userjs/ldr_with_delicious_count.user.js

以前作ったやつ。

livedoorクリップ
http://la.ma.la/misc/userjs/ldr_with_livedoor_clip_count_images.user.js

はてなブックマーク
http://la.ma.la/misc/userjs/ldr_with_hatena_bookmark_count_images.user.js

livedoor Readerに何かくっつけるGreasemonkeyの書き方
http://la.ma.la/blog/diary_200610182325.htm

2007-03-19

アメブロのオフィシャルブログ画像保護機能を無効化するGreasemonkeyスクリプト

現在見ているページをGM_xmlhttpRequestで受信するため、amebloのPVが増えます。さすがYappoです。
http://subtech.g.hatena.ne.jp/yappo/20070319/1174293065

なのでちょっと書き直してみました。
http://la.ma.la/misc/userjs/ameblo_sucks.user.js

イベントはremoveEventListenerで外したいところですが、元の関数が参照できないと無効化できないので、onclickやoncontextmenuに直接代入してます。GreasemonkeyではDOMへの参照はラッピングされたオブジェクトが帰ってくるのでunsafeWindow経由で操作を行う必要があります。

Greasemonkey以外のuserjs実装でも動くように書いてみたつもりです。
どうぞご利用ください。

追記

JavaScriptで追加された既存のイベントを全部消したかったら、こういうブックマークレットでOK。
javascript:document.body.innerHTML=document.body.innerHTML;void(0);

ただし再描画されるのでそれなりに重い可能性があるのと、有効になってて欲しいイベントも消えてしまうことがある。
なのでYappoさんのGreasemonkeyと同等のコードはこれで出来る。
(function(){
    var w = (typeof unsafeWindow == 'undefined') ? window : unsafeWindow;
    var onload = w.onload;
    w.onload = function(){
        onload();
        document.body.innerHTML = document.body.innerHTML;
    }
})();

2007-03-07

アメブロの新着ブログのRSSを適当に読み上げるページを作った

アメブロの有名人ブログの新着ページからリンク抽出してRSSを取得してMSAgentを使って音読してくれるページを作った。Windows IE専用です。それ以外でも一応見れますが音は出ません。
http://la.ma.la/misc/ameblo/

MSAgentが使える必要があります。MSAgentというのはMicrosoft製の伺かみたいなやつで、WindowsMe以降なら標準で入ってます。
Plaggerで使ってたりするやつ。MSAgentで使う日本語の読み上げエンジンは無料でダウンロードできます。MSOfficeが入ってれば最初から入ってたりします。

参考: http://blog.livedoor.jp/hakin/archives/50561235.html


何か色々言いたいことがあったんだけど忘れた。

2007-03-04

coCommentの拡張機能をいれるとlivedoor Readerの動作がおかしくなるらしいので調べてみた

似たようなのを続けて見たので調査してみた。

http://d.hatena.ne.jp/ekken/20070303/1172921555
http://d.hatena.ne.jp/babie/20070227/1172547987

coCommentのFirefox用の拡張が原因っぽい。手元のFirefox2だとXULのエラーが出て上手くインストールできなかったんだけど、ソースを読んで調べてみた。

原因はこのソースが読み込まれてるからだと思われる。
http://www.cocomment.com/js/core.js

coCommentの拡張機能はページを読み込むたびにブックマークレットを実行するのと同じようなことをしてるみたい。その際に、サイト側で定義してある関数を上書きしてしまうことがある。$とString.prototype.stripが再定義されていて、これがlivedoor Readerが動かなくなる原因だろう。他にもグローバル変数使いまくり。なんというか全般的におかしい。相性とかそういう類のものではなくて、単にcoCommentのJavaScript書いてる人が素人なだけ。

こっち側ではどうしようもないのでcoCommentの方に文句を言ってください。

感想

Firefoxの拡張機能は、分かってる人であれば中身を解凍してソースを見て、その段階で安全かどうかを判断することができるけど、ウェブサイト上に置いてあるJSを動的に読み込むようなことをしてしまうと、いつでも改変することが出来るので安全性を保障できない。(インストールした時点では安全でも、後から悪意のある拡張機能にいつでも変更できるということ)

ブックマークレットで使っているソースと共通化することが出来るので、メンテナンスコストを下げることができる。そういう理由でこういった実装にするのは、ありえないことではないとは思うけど、せめて普通は拡張機能側で適用可能なサイトかどうかを判別してからやるものだと思います。

2007-03-03

Yahoo pipesを使ってid:hamster009さんのいい加減な回答を全文フィードにするチュートリアル

hamster009さんの回答履歴
http://q.hatena.ne.jp/hamster009/answerlist

が、面白いのでウォッチしてみる。URLに「?mode=rss」を付けるとRSSを取得できるのだけれど、この回答履歴のフィードには質問文しか入っておらず、リンク先をクリックしないと回答文が読めない。ネタバレとか気にしてないので全文入れて欲しいところだ。これは人力検索の回答を日記代わりに使ってるhamster009さんのような人にとっては重大な問題のはずなので、さっさと利用規約改定すべき。

そんなわけで、今回はYahoo pipesを使ってhamster009さんの回答を全文フィードにしてみることにする。
下記のような手順でプログラミングができない私にも簡単にマッシュアップすることができた。

1. 米Yahooのアカウントを取得。
2. Yahoo pipesを表示。create a new pipeで新規パイプを作成。
3. 入力ソースでfetchモジュールを追加して、回答履歴RSSのURLを入れる。
4. linkが質問のページになってるので一覧を取得してそれぞれに?mode=rssをくっつけて、全部のRSSを取得してマージしてfilterでdc:creatorがhamster009の記事だけ残すようにすれば良いんだな。
5. 30分ぐらい試行錯誤する。
6. ブラウザを閉じる。
7. Automatorを初めて起動する。終了する。
8. Plaggerでやろうとして、やっぱりやめる。
9. 自分でスクリプト書く

出来上がり
http://feeds.feedburner.com/hamster009


ところで
Q: バソキヤ2006を売っている店を探しています。
A: 来年までまちましょう。
http://q.hatena.ne.jp/1160648378

Q: バソキヤ2006を売っている店を探しています。
A: 見つかるといいですね。
http://q.hatena.ne.jp/1160729694

Q: バソキヤ2006を売っている店を探しています。
A: いいかげんにあきらめたら。
http://q.hatena.ne.jp/1160736696


思い出したら腹が立ってきた。