Jewel-mmo開発日記

RubyでMMORPGを作る過程を記録する日記。

ブログ記事に対するコメントをtwetterで

年末にブログシステムをcgi.rb実装からSinatra実装に移行してからこっち、コメント機能が無効になっていた。

ブログに対するコメントをtwitterで受け付けると面白いんじゃないかと思っていたのでその方向で実装してみた。

実装の作戦は以下の通り。

  1. 新規の日記エントリを作成したらそのエントリのタイトルとパーマリンクをtwitterで通知する(日記エントリとペアになるtweetを用意しておき、そのtweetへの返信をブログ記事へのコメントと見なす)
  2. twitterから自分のtweetsを取得して日記エントリに対応するものをキャッシュしておく
  3. twitterから自分のrepliesを取得してキャッシュしておく
  4. 2へのrepliesを日記エントリへのコメントとして日記ページに表示

1は今のところ手動、2と3はcronで定期的にスクリプトを実行、4はブログシステムが動的に処理という形。これで少し様子を見てみようと思う。

現状の問題点としては、コメントとしてポストされたtweetに対するrepliyを拾えていないところ。 各tweetに対する返信をたどることができれば木構造でコメント欄に表示できるんだけど、あるtweetに対する返信tweetは検索できないものと理解している(詳しくないのだけど)。

完全にtweetを木構造でたどれるようになると、もしかしたら爆発的な数になってしまうかもしれないけど、それはそれとして。

permalink
category: Bilbo(15)

日記の更新を支援する仕組み

日々取り組んでいることや考えていることをもっと日記に書きたいなと思いつつ、 サーバにログインしてテキストファイルを作成するというBilbo(今使っている日記システム)のエントリ更新方法が素朴過ぎるのか、なかなか日記を更新できていない。 サーバでのエントリ直書きも悪くないのだけど、特別便利とは言えない。

事態を改善すべく、前々から考えていた日記更新システムを作成中。

作戦としては、まず原稿をDropboxに置き、普段使用しているすべてのPCで共有する(Dropboxに置くのは単に書きかけの原稿を複数のPCで共有したいがため)。 ひとつの原稿ファイルに複数のエントリを書けるようにする。このときエントリの単位がわかるように簡単なルールを設けておく。そしてこの原稿ファイルからエントリを切り出して、エントリデータを作成するスクリプトを作る。

切り出されたエントリデータは、ローカルで稼働させてるBilboサーバ(要WEBrick等の動作する環境)のdraftカテゴリに放り込まれるようにしておく(実際は出力先のディレクトリをカテゴリデータディレクトリにシンボリックリンクしてるだけ)。

ローカルでの原稿チェックはここまでで完了。 あとはローカルのエントリーデータをサーバにアップするスクリプトがあればOK。

このような仕組みにしたい理由は、手元に複数の書きかけの日記をためておきたいから。 ひとつのエントリを一日で書き上げるのではなく、日々の細切れの時間を使って少しずつ書きたいのだ。 思いつきのアイデアをメモすることが多いが、そんなときもすぐには一本のエントリとしてまとめることはできない。原稿ファイルがひとつになっていればこういう書き方をするのに便利なんじゃないかなと。

原稿作成からサーバにアップするまでの手順は次のようになる。

  1. ローカルの原稿テキストファイルを編集
  2. rake でローカルにエントリデータ作成
  3. ブラウザでローカルのデータにアクセス(draftカテゴリ記事の一覧表示)して表示確認
  4. rake update

とこう書き出してみて気がついたが、手順2は不要だ。 ブラウザでdraftカテゴリを表示したときに自動的に原稿データからのエントリデータ切り出しが行われた方が良い。

そうなると以下の手順で記事を更新できる。

  1. ローカルの原稿テキストファイルを編集
  2. ブラウザでローカルのデータにアクセス(draftカテゴリ記事の一覧表示)して表示確認
  3. rake update

--

とりあえず4手順で更新するシステムはできたのでこれで様子を見よう。

permalink
category: Bilbo(15)

Bilboをruby 1.9.1で動かす(2)

m17nに対する対応。

いままで「-Ku」オプションをつけて実行していたスクリプトには、次のような処理を追記した。

Encoding.default_external = 'UTF-8' if defined? Encoding

うしろに「if defined? Encoding」としているのは、1.8系でエラーになるのを防ぐため。

さらにrequireまたはloadされるスクリプトの中で、日本語(UTF-8)を記述してあるものには、先頭行に以下を追加した。

# -*- encoding: UTF-8 -*-

とりあえず、これで大丈夫そう。「-Ku」オプションなしで動いてる。

tDiaryから記事をインポートしたり、記事をUTF-8に変換するスクリプトもあるんだけど、この辺はまた違う対応が必要だろうから保留。

permalink
category: Bilbo(15)
no tweet

コメントのスパムフィルター実装

本ブログコメントのスパムフィルター。

やっと集中できる時間ができたので重い腰を上げて実装。

def spam?
  return false unless data
  return true if data[/href|url=/i]
  return true if data[/\A[\w\s\n\/:.,-]*\z/]
  false
end

dataはコメントデータファイルの中身、つまり名前と本文を合わせた文字列。 これでこれまで放置してた3000のスパムコメントを一掃した。

厳しい判定なので日本語を入れないとほぼ通らない。

permalink
category: Bilbo(15)
no tweet

ぼちぼちやりたいと思っていること

  • tDiaryからコメントデータをインポート
  • コメントスパムのフィルタリング機構を作る
  • コメント用RSSはなぜ更新してないやつまでLDRに上がってくるんだろう
  • CodeReposにBilboをリリース
permalink
category: Bilbo(15)
no tweet