tDiaryの日記データをHTMLで取り出す
tDiary2.2.xの日記データを取り出すスクリプトを書いてみた。使い方は以下の通り。
$ tdiary-export.rb /path/to/tdiary/base/dir > tdiary.dat
各日の日記の各セクションをHTML化したものと、その日にあったツッコミやトラックバックをハッシュにまとめて、それを配列にしたものをMarshal.dumpした結果が得られる。セクションタイトルなどはほどほどに処理したものを取り出せるようにしたつもり。
設定ファイルのような上等なものはないので必要ならスクリプト自体を書き変えなければならい。config_overrideでtdiary.confの設定内容を、plugin_overrideでプラグインが提供する関数を、それぞれ上書きできる。また、section_modifyでHTML化前のセクションデータを変更できる。
tDiaryのデータには手を入れないようにしているつもりだが、あまり自信はないので別のところにまるごとコピーして、tdiary.conf中のパスを書き換えておくか、config_overrideで上書きするなどの形で、スクリプトを実行したほうが良いと思う。
blogキットを使っている環境では多分うまく動かないと思う。
Typoインストールメモ
まずTypoのコードを入手する。いろいろなも味に依存しているのでRubyGemsを使うのが楽。
$ GEM_HOME=/tmp/GEM gem install typo
Typoではサイトをセットアップするときに必要なものをすべてコピーするので、インストールしたgem群への依存関係は一応なくなる。ただし、typoコマンドを通じてバックアップなどの管理操作ができる。そしてそのような操作のためにはインストールされたgemが必要となる)。
$ sudo -u www-data \
env GEM_HOME=/tmp/GEM \
/tmp/GEM/bin/typo install path/to/install/dir \
db_user=dbuser \
db_password=dbpass \
db_name=dbname \
web-server=external # FastCGIの場合
これでTypoが動作する環境ができるが、.htaccessは作ってくれないのでこれを作っておく(FastCGIで動かそうと思うので)。また、Rails 2.x系ではw3mなどでアクセスすると406エラーになるので回避コードを入れておく。
$ rails /tmp/t $ sudo -u www-data \ cp /tmp/t/public/.htaccess path/to/install/dir/public $ rm -rf /tmp/t $ sudo -u www-data \ vi path/to/install/dir/putlic/.htaccess # 調整 $ cat <path/to/install/dir/config/initializers/w3m.rb
Mime::HTML.instance_eval { @synonyms << "text/*" }
Mime::LOOKUP["text/*"] = Mime::HTML
E
今回、tDiaryから移行したデータがあるので、一部の表現のために書いた互換プラグインを置いておく。
$ sudo -u www-data \
cp -a typo_textfilter_{asin,tdiarycompat} \
path/to/install/dir/vendor/plugin
最後にApache HTTPサーバ側のその他の調整をしてリロードする。
$ sudo vi /etc/apache2/sites-available/site # その他調整 $ sudo /etc/init.d/apache2 reload
ブラウザでアクセスすると最初のユーザ登録ができる。tDiaryからのデータ移行の都合のためspamまわりの設定を残して、その他の設定をしておく。その後でデータを流し込む。
$ sudo -u www-data \ path/to/install/dir/script/runner td2typo.rb tdiary.dump
終了後、残しておいたspamまわりの設定をし、動作確認をする。
この環境ではFastCGIをmod_fcgidで運用しているのだけど、外部リソースにアクセスしまくるページなどでIPCCommTimeoutにひっかかることがあるようだった。tDiaryをFastCGIで動かそうとしたときにはIPCConnectTimeoutを大きめにしなければならなかったのだけど、ここではCommのほうを大きめに設定した。
実はnet/httpのタイムアウトのところでエラーになっていたのを勘違いしてしって、ずいぶん遠まわりをしてからこのことに気付いた。いかんいかん。
よく使うプラグイン
tDiaryのデータをHTMLで取り出そうとしている。どう処理しようかなと考えるところがプラグインなのだけど、いろいろ考える前にどんなものを使っているのか調べてみた。
444 isbn_image
326 flickr
266 my
238 image
150 a
93 fn
92 bq
87 isbn
41 bug
31 image_left
23 ruby_dev
16 isbn_image_left
11 ruby_cvs
8 ruby_talk
7 ruby_list
4 ruby_core
4 raa
3 image_right
3 amazon
2 ul
2 isbn_image_right
はてなスタープラグイン
ただのにっきを見て、いまさらな感じもしたけど、はてなスターをくっつけてみた。
tDiary 2.0.3とamazon_bk1.rb
amazon.rbが変更になった関係でカバーイメージの補完がうまく働かなくなったみたい。とりあえずこんな感じにしとこう。
--- bk1_amazon.rb.orig 2006-12-07 22:35:09.000000000 +0900
+++ bk1_amazon.rb 2006-12-07 22:36:16.000000000 +0900
@@ -76,18 +76,22 @@
return get_bk1_image( "amazon", isbn, comment ) if r == isbn
if /^[0-9-]{9,12}[\d|Xx]$/ =~ isbn then
h = get_bk1( isbn )
- if @conf['amazon.imgsize'] && @conf['amazon.imgsize'] != 0 then
+ if @conf['amazon.imgsize'] && @conf['amazon.imgsize'] == 2 then
image_url = h['ImageUrlSmall'] || 'http://www.bk1.co.jp/images/bk1/no_img_90.gif'
else
image_url = h['ImageUrlLarge'] || 'http://www.bk1.co.jp/images/bk1/no_img_144.gif'
end
r.sub!( %r|http://[^"]+comingsoon_books\.gif|, image_url ) unless image_url =~ /no_img/
+ if image_url !~ /no_img/ && r.sub!( %r|http://www\.tdiary\.org/images/amazondefaults/[^'"]*|, image_url )
+ r.sub!( %r|height="\d+"|, '' )
+ r.sub!( %r|width="\d+"|, '' )
+ end
if h['DetailURL'] then
r << %Q[<a href="#{h['DetailURL']}">]
- if @conf['bk1.iconsize']==1 then
- r << %Q[<img src="http://www.bk1.co.jp/images/bk1/bk1mini.gif" style="border-width: 0px" alt="bk1">]
+ if @conf['bk1.iconsize']>=1 then
+ r << %Q[<img src="http://www.bk1.co.jp/images/breeder/banner/button.gif" width="65" height="17" style="border-width: 0px" alt="bk1">]
else
- r << %Q[<img src="http://www.bk1.co.jp/images/bk1/bk1m-rogo.gif" style="border-width: 0px" alt="bk1">]
+ r << %Q[<img src="http://www.bk1.co.jp/images/breeder/banner/BookSimpleS.gif" width="30" height="40" style="border-width: 0px" alt="bk1">]
end
r << %Q[</a>]
end
flickrプラグイン + Lightbox JS
Lightbox JSを使って画像表示をかっこよくみせてみるという記事を参考にして、flickrプラグインでLightbox JSを使うようにしてみた(flickr_plugin-20060429からの差分)。このへんとか。
日時によるコメントspam対策
tDiary.orgにパターンマッチによるコメントspam対策の説明があるのだが、いわゆるblogというよりは日記というサイトについてはAD-HOCKERY DIARYで説明されているような、古い日付の日記にはコメントできなくするという対策も効果的だと思う。
過去一か月分の日記についてだけコメントを受け付けるならこんな感じかな:
--- antispam.rb.orig 2006-05-17 12:00:42.000000000 +0900
+++ antispam.rb 2006-05-17 12:01:34.000000000 +0900
@@ -2,6 +2,9 @@
module Filter
class AntispamFilter < Filter
def comment_filter( diary, comment )
+ if Time.now - diary.date > 86400 * 30
+ return false
+ end
mailregexp = r = /^[0-9a-zA-Z_.-]+@[\(\)%!0-9a-zA-Z_$.&+-,'"*-]+(\.[\(\)%!0-9a-zA-Z_$.&+-,'"*-]+)*\.[a-zA-Z]{2,6}$/
if /@(yahoo|hotmail|gmail|aol|leroy|ablare|gmx)\.com$/ =~ comment.mail


