ただのにっき
2009-03-29(日) [長年日記]
■ Jリーグの試合速報を携帯で見やすくする
スーパーサッカーの速報をスクレイピングして、シンプルなテキストを吐くスクリプトを書いただけなんだけど(ソース@gist→mobile_supers.rb)。相当シンプルにしてあるので、スタジアムの混雑した電波状態でも快適……なはず。来週の名古屋戦で試す。
自宅サーバが死ぬまでは別の(もっと泥臭い)スクリプトでやっていたんだけど、最近けっこうまともなHTMLになったようなので今回からちゃんとNokogiriを使った。
とはいえ、これを短間隔のcronで回すというのも芸がない。というか、試合やってないときまでアクセスさせたくない。かといって、CGIにして毎回動的に作らせるのも、相手サイトの負荷が高いときのレスポンスが気になる。で、
- 最短5分間隔で最新情報を見られるようにする
- それより短い間隔でアクセスしても静的ファイルが返るだけ
という運用方針のもと、実現するためにたつをさんのキャッシュ方式を参考にして.htaccessでmod_rewriteを設定した。まぁ、ほとんど丸写し:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^/football/score\.txt$ /cgi-bin/update-score.cgi [L]
update-score.cgiはこんな感じ:
#!/usr/bin/ruby require 'nkf' require 'mobile_supers' text = NKF::nkf( '-s -Z1', Jleague.miniscore2mobile ) open( '../football/score.txt', 'w' ) {|f| f.write( text ) } print "Content-Type: text/plain; charset=Shift_JIS\n\n#{text}"
あとは5分間隔でcronを回して、score.txtを削除すればよろしい。あとやるとすれば、リンク先も同じように見られるように拡張するとか、そんなところか。
■ 単体ファイルのソース管理にGist + gistyを使う
上のような「プロジェクトにするほどでもない」プログラムを公開したり、ソース管理したいときにはGitHubのGistが便利なんだけど、gistyを入れるとさらに便利になる。
Gistの使い方やgistyのインストール方法はあちこちで書かれているので略。cloneされたGistのプロジェクト(?)は数字列で可読性が低いので、symlinkを張るといいね:
% echo $GISTY_DIR /home/sho/src/gists % cd ~/src % ln -s gists/87404 mobile_supers
いつものように、防火壁の内側からproxy経由のsshでGistを使うためには、~/.ssh/configに以下を追加すれば良いようだ:
Host gist.github.com HostName ssh.github.com Port 443 ProxyCommand corkscrew YOUR_PROXY_HOST YOUR_PROXY_PORT %h %p
GistのリポジトリはGitHubそのものとはホストが違うからsshサーバも別かと思ったら、これは共通でいいようだ。Corkscrewの設定など、その他のノウハウは以前の記事を参照: