JavaScriptを使わずにブックマークコメントを表示

ブックマークコメントを各エントリに表示したかったが、世に出回っているもののほとんどがJavaScript製。リニューアル後の方針の一つとして、できるだけJavaScriptは導入しないと決めていたので使いたくない。

だが、ご丁寧に各サービスともAPIを用意しているので、いっちょRubyで取得するか、と思ったら既に作っている人がいた。

SBM – コメントを取得

これを自サイト用に改造しよう。

コメントがついているエントリを探す

今までのエントリを上記スクリプトにかけると途方も無い時間がかかってしまう。「ブックマークされたエントリ」だけを処理にかけるというのが理想的だが、それをどのようにして取得するか。

はてなブックマークの注目・人気・新着を次へ次へと漁るのもめんどいなーと思っていたら、Get URLsという、指定したURL配下のブックマークされたURL一覧を取得できる素晴らしいサービスが存在したので、ありがたく利用させてもらうことにした。

どのようにして表示するか

取得したコメントをただのHTMLで出力し、Wordpressのテンプレート側からincludeする。こうすれば負荷が少ない上にキャッシュされるのでサイトにやさしい。

if( file_exists( $post->ID . ".html" ) ) {
include( $post->ID . ".html" );
}

こんな感じで、出力されたコメントHTMLが存在する時だけ表示するようにした。

完成物

sbmcomments.rb

  • なぜかjsonをインストールできなかったのでjson_pureを利用
  • クロスポストを考慮して、全く同じコメントは取り除く
  • livedoor クリップからは取得しない(メインで使ってる人が少ないと思われるので)
  • 1URL毎に1秒待機

このサイト用に特化しているので、取得するURLと出力部分を弄れば他サイトでも使えるはず。

cronで回す

以前praggerもcronで動かそうと思っていたが、なぜか動かなかった。それは今回も同様で、rubygemsが無いというエラーが空しく返ってくる。

どうしたもんかと途方に暮れそうになった時に以下のページを発見。

なお、crontab で実行されるときには、ほとんどの環境変数が設定されていないので注意が必要。~/.cshrc・~/.login で設定している環境変数は設定されていないし、PATH も /bin:/usr/bin くらいにしか通っていない。そのため、command の部分に指定するのはシェルスクリプトにしておいて、シェルスクリプトの先頭で環境変数の設定を行い、その後いろいろなコマンドを実行するようにしておくのがよいだろう。

UNIXの部屋 コマンド検索:crontab (*BSD/Linux)

な、なんだってー!? rubygemsをインストールした時に.bashrcというファイルに環境変数が記述がされていたので、てっきりcron実行時に自動的に読んでいるものだと思ったら、全く読んでいなかったってことか!

というわけで、.bashrcの内容をコピペする。

#!/bin/sh
export PATH=$HOME/packages/bin:$PATH
export RUBYLIB=$HOME/packages/lib/ruby/site_ruby/1.8:$HOME/lib/ruby
export GEM_HOME=$HOME/packages/lib/ruby/gem

/usr/local/bin/ruby sbmcomments/sbmcomments.rb
cd ~/pragger
/usr/local/bin/ruby pragger.rb -c nicovideo.yaml
/usr/local/bin/ruby pragger.rb -c radio.yaml
exit

そして実行を待つこと数十分。エラーを出すこともなく無事にスクリプトが動いた! Praggerのプラグインも動くようになった!

あとは大体1日毎にコメントを取得するように設定して設置完了。頻繁にブックマークされるようなサイトじゃないので、これぐらいの周期で十分だろう。