とりあえず音楽活動4年間のブランクを埋めるべくWeblogを開始してみたが、ネットゲームのプレイ日記に成り果てそうな予感がひしひしと。目標はドメインが有効な1年間のうちにせめて1曲・・・一応達成
favorite blogs | PC / AKIBA | music |
---|---|---|
Raspberry Heart | AKIBA PC Hotline! | CISCO RECORDS |
Nacky - Snowland.net | ASCII24 Akiba2GO! | TECHNIQUE |
game | PINUPS | addictivebeat.com |
PangYa! | hermitage akihabara | Ping Music Label |
Ragnarok Online | Re:(Response) |
拙作MT2MIXIはそのまま使った場合はMTの出力結果をそのままmixiに渡しているので、本文を全部送りたい場合はMTEntryBodyにsanitaizeやremove_htmlを指定して余計なHTMLのタグを削除したり、convert_breaksの指定で改行をpやbrに変換されないように工夫してテキストに変換しなきゃならない。でも世の中には既にHTMLから綺麗に整形されたテキストに変換するフィルタがあるんだから、それを使ったほうがずっといいじゃないですか。
というわけで、今回はW3Mを使って整形してmixiに投稿するためのMT2MIXIの設定方法について書いてみる。これを使えば、
まず始めに、使っているサーバでw3mが使えないことにはお話にならないので、次のCGIを適当な名前でアップロードしてw3mが存在するかどうか確認する。
#!/bin/sh echo "Content-Type: text/plain" echo which w3m
このCGIにアクセスして「/usr/bin/w3m」などと返ってきたら使える可能性あり。さらに次のCGIで実際に動作を確認してみる。
#!/bin/sh echo "Content-Type: text/plain" echo w3m -dump -I UTF-8 -O UTF-8 -T text/html http://www.google.co.jp/
このCGIにアクセスしてGoogleのページがテキストに変換されたものがちゃんと表示されればw3mが使えます。
今までMT2MIXIで使っていたテンプレートを、mixiに投稿したいHTMLを出力するように書き換える。ただし、1行目と2行目は今まで通りエントリーIDとサブジェクトを出力し、3行目以降に実際のHTMLを出力させる。以下に自分が使っているテンプレートを例として挙げる。
<MTEntries lastn="1"><$MTEntryID$> <$MTEntryTitle$>@<$MTBlogName$> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=<$MTPublishCharset$>"> <title><$MTEntryTitle$>@<$MTBlogName$>*lt;/title> </head> <body> <p><$MTEntryLink archive_type="Individual"$></p> <$MTEntryBody$> <MTEntryIfExtended> <p>続きはこちらで<br> <$MTEntryLink archive_type="Individual"$></p> </MTEntryIfExtended> </body> </html> </MTEntries>
ここではこのテンプレートを/virtual/foo/temp/mt2mixi.htmlとして出力することにする。
次に先ほどのテンプレートが生成するHTMLをMT2MIXIが解釈できるテキスト形式に変換するCGIスクリプトを作成する。今回はお手軽にshシェルスクリプトとUNIXのコマンド群で済ませることにする。
#!/bin/sh echo "Content-Type: text/plain" echo #xreaではホームディレクトリが設定されていないので適当なディレクトリを指定しておく export HOME=/virtual/foo #作成したテンプレートのフルパスを設定 export TEMP_PATH=/virtual/foo/temp/mt2mixi.html #先頭2行(IDとサブジェクト)をまず出力 head -n 2 $TEMP_PATH #3行目以降をw3mで変換して出力 tail -n +3 $TEMP_PATH | w3m -dump -I UTF-8 -O UTF-8 -T text/html -cols 67
ここではこのCGIのURLが「http://www.example.com/cgi-bin/html2text.cgi」であるとする。
MT2MIXIの設定ファイル(mt2mixi.cfg)の「MT2MIXI_ENTRY」の項目は、マニュアルでは「MT2MIXIのエントリ情報ファイルの相対または絶対パス。」とあるが、実際にはURLで指定することもできる(とマニュアルにも書いてある)。つまりここにファイルそのものではなく、ファイルを処理して変換するCGIのURLを指定しておけば、変換後のテキストをmixiに投稿できるというわけだ。今回の例では次のように指定する。
define("MT2MIXI_ENTRY", "http://www.example.com/cgi-bin/html2text.cgi");
これで設定は完了。あとは今まで通りMTにエントリーを作成すれば、mixiにも整形された状態で全文が投稿される。
こんな感じになります。mixiの日記の表示幅が狭すぎて折り返しがイマイチですがとりあえずこんなところで。W3Mの表示幅を狭めると今度は逆にURLとかまで折り返されたりするので、URL部分はW3Mを通さないようにCGIを改造するとよいかも。
追記:実際に使ってみたところ、W3MにUTF-8で出力させると箇条書きのマークが半角の・になってしまい具合が悪いので、W3Mの-OオプションはUTF-8ではなくEUC-JPを指定したほうが無難。その場合、サブジェクトもEUC-JPに変換しなければならないので、iconvなどで適当に変換すること。さらにmt2mixi.cfgのMT2MIXI_ENTRY_CHARSETの項目もUTF-8からEUC-JPに変更する。
今現在自分が使っているテンプレートとCGIスクリプトも挙げておく
<MTEntries lastn="1"><$MTEntryID$> <$MTEntryTitle$>@<$MTBlogName$> <$MTEntryLink archive_type="Individual"$> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=<$MTPublishCharset$>"> <title><$MTEntryTitle$>@<$MTBlogName$></title> </head> <body> <$MTEntryBody$> <MTEntryIfExtended> blogに続く・・・ </MTEntryIfExtended> </body> </html> </MTEntries>
#!/bin/sh echo "Content-Type: text/plain" echo export HOME=/virtual/foo export TEMP_PATH=/virtual/foo/temp/mt2mixi.html head -n 4 $TEMP_PATH | iconv -f UTF-8 -t EUC-JP tail -n +5 $TEMP_PATH | w3m -dump -I UTF-8 -O EUC-JP -T text/html -cols 60
2 | 0 | 0 | 6 | / | 0 | 2 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | ||||