tDiaryの日記データをHTMLで取り出す

投稿者 akira 2008-11-14 10:55:00 GMT

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インストールメモ

投稿者 akira 2008-11-10 08:40:00 GMT

まず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のタイムアウトのところでエラーになっていたのを勘違いしてしって、ずいぶん遠まわりをしてからこのことに気付いた。いかんいかん。

よく使うプラグイン

投稿者 akira 2008-11-06 15:00:00 GMT

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.2.xのaプラグインがエスケープしすぎる?

投稿者 akira 2008-06-10 15:00:00 GMT

tDiary 2.2になってから初めてaプラグインを使ったところ、どうもエスケープしすぎているような動作になっていた。

aプラグイン用の辞書では文字コードを指定できるようになっていて、これを指定した場合にエスケープされるのは従来からの動作としてあるのだが、文字コードを指定していない場合でもエスケープされている様子。コードが変更されたのはこのあたりだと思う。

仕様変更だろうか。

tDiary 2.2.0に更新

投稿者 akira 2007-12-19 15:01:00 GMT

tDiary 2.2.0に更新した。

はてなスタープラグイン

投稿者 akira 2007-08-14 15:00:00 GMT

ただのにっきを見て、いまさらな感じもしたけど、はてなスターをくっつけてみた。

tDiary 2.0.3とamazon_bk1.rb

投稿者 akira 2006-12-06 15:02:00 GMT

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

tDiary 2.0.3へ

投稿者 akira 2006-11-25 15:00:00 GMT

tDiary 2.0.3にバージョンアップした。

早いとこdonrailsに移行したい。tDiaryからのデータ移行は簡単にできるので、あとは機能強化の具合によるところ。手を出したいけど今はなー。

flickrプラグイン + Lightbox JS

投稿者 akira 2006-09-24 15:00:00 GMT

Lightbox JSを使って画像表示をかっこよくみせてみるという記事を参考にして、flickrプラグインでLightbox JSを使うようにしてみた(flickr_plugin-20060429からの差分)。このへんとか。

日時によるコメントspam対策

投稿者 akira 2006-05-16 15:00:00 GMT

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