search.twitter.comの検索結果のページャーで言語選択が維持されるようにするGreasemonkeyスクリプト

Twitter Searchというのがあって、これはTwitterの公式検索エンジン。発言を検索できるやつ。

それで、画面右側に見える「Show tweets written in:」のところのドロップダウンで言語で絞り込めるんだけど、検索結果のページャー部分(NewerとかOlderのリンク)をクリックしてページを移動すると、そこから先は言語の絞り込みが無くなっちゃうので、とても困ってる。

原因はわりと簡単。この言語の絞り込みドロップダウンを使うと、URLのQUERY_STRINGに「lang=ja」みたいなのが追加されて、これをサーバ側で見て検索をしてるっぽいんだけど、ページャーのリンクのURLにはこのlang指定が含まれてない。だからページを移動すると言語の指定が解除されちゃうわけだ。

Twitter Searchのバグっぽいけど、まあ自分で直しちゃえってことでGreasemonkeyスクリプトを書いた。

なんか名前が長いな。まあいいや。そして名前の割にコードは短いので以下に書いておく。

(function(){
  var lang = document.getElementById('langSelect').value;
  var links = document.getElementsByTagName('a');
  for(var i = 0; i < links.length; i++){
    var c = links[i].className;
    if(c == 'prev' || c == 'next'){
      links[i].href += '&lang=' + lang;
    }
  }
})();
  1. 現在のドロップダウンの値を取得して、
  2. ページ内のリンクの一覧を取得して、
  3. リンク一覧をループして、
  4. class属性が 'prev' か 'next' だったとき、href属性に '&lang=(さっき取得したドロップダウンの値)' を追加する。

といった感じ。まあわかるよね。

Firefox 3.0.7でしか確認してない。

AutoPagerizeを使ってる人へ

AutoPagerizeを使ってる人は、実行順序を変えてAutoPagerizeよりも本スクリプトを先に実行するようにすると、1回継ぎ足されるページまでは言語が維持される。2回目以降の継ぎ足しページはやっぱり指定が消えちゃう。なんとかしようと思ったけど、よくわからないのでやってない。

window.AutoPagerize.addFilterかな?と思ったんだけど、継ぎ足しページの内容ではなくて、継ぎ足すために取得したページ内の次のリンクを取得する方法がわからなかった。あと、このスクリプトAutoPagerizeより前になっちゃうと、そもそもwindow.AutoPagerizeが存在しないのでどうしようもない。

ってことであきらめちゃった。ごめんなさい。