文字変換&アンテナ機能


イタレーション1(その3:ゲームプランニング)のところでも少し書いたのですが、コメントマネジメントツールをつくろうと思っています。

現在チームメンバーのAbdelと悪戦苦闘しているのは、ここです。

1.他人のブログにコメントを投稿したい。
2.自分が投稿した記事をデータベースに保存したい。

いろんなサイトからフォームの部分だけ引っこ抜いてきて、そこからコメントしたら、他人のブログサイトにコメントを投稿すると同時に自分達のデータベースにも保存することです。ただフォームの部分だけ抽出するのは簡単なのですが、そのフォームにコメントを書いてSubmitボタンを押しても、ただ相手のブログに投稿されるだけです。「自分のデータベースにコメントを保存する」という作業を一枚かませようとするといろいろ厄介そうです。明日はAbdelとペアプログラミングの予定なので、なんとか解決したいです。

今日は一日中一人で開発していたので、その他のコア機能をどうやって実現するべきか色々リサーチしていました。

3.保存したコメントの一覧を見たい

一度データベースに保存したコメントを記事のタイトルごとに一覧表示させるだけなので簡単だと思い。サンプル用のデータベースアプリをScaffoldで作成。2〜3のサイトのHTML記事をテーブルに流し込み、そのタイトルの一覧をlistしてみると....

おなじ日本語の記事なのに、一方はちゃんと表示されているのに、他は文字化けしていたりします。「おんなじ日本語なのになんで?」と思ってソースを見るとS-JisとかEUC-JPとかサイトによってばらつきがあることがわかりました。「違う日本語コード同士を1つのHTMLで表示はできないから、いちいち文字コードを変換していかなくちゃいけないって大変そう」と思ってGoogleで探していたのですが、解決法は結構簡単だとわかりました。NKFというRubyのモジュールを使えば、わざわざ自分で文字コードを判別しなくとも、モジュールが現在の文字コードを分析し、それを別コードに変換してくれるようです。

list.rhtmlに以下のようなのを書けばS-JISだろうがUTF-8だろうがEUC-JPに変換してくれます。<%require 'nkf'%>
<%=NKF.nkf('-e',title)%>

詳しい解説はRubiest Magzine に出ています。

でもNKFって日本語文字間の変換だけのようだけれど、全ての言語をUTF-8に一発変換してくれるようなモジュールってあるんでしょうか?


7.自分のコメントに他の人が書き込みした場合は通知してほしい

これははてなアンテナのような機能をコメントの更新通知に活用したいなと思ってます。まだ具体的なコードはかけていませんが、参考にしたサイトを書こうとおもったのですが、今del.icio.usにうまく接続できないようなので後で載せます。

open-uriを使えば open(url).last_modifiedでそのURLの更新日時が一発でわかります。もし更新日時が前回にチェックしたときと同じままだったら何もしない。もしそれ以降に更新されているようであれば前回とっておいた生HTML文とDiffかけて、差分を表示って感じだと思います。そんな簡単にできればよいのですが。

サンプルコードを書こうと思ったのですが、もう遅いので今日は寝ます。なんか最近はRailsの勉強よりRubyの勉強についやしてる時間の方が長い気がします。