ftp-recordings:returns?

とりあえず音楽活動4年間のブランクを埋めるべくWeblogを開始してみたが、ネットゲームのプレイ日記に成り果てそうな予感がひしひしと。目標はドメインが有効な1年間のうちにせめて1曲・・・一応達成

MT2MIXIでの投稿をw3mで整形してみる

拙作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からテキストに変換するCGIスクリプトの作成

次に先ほどのテンプレートが生成する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の設定ファイル(mt2mixi.cfg)の「MT2MIXI_ENTRY」の項目は、マニュアルでは「MT2MIXIのエントリ情報ファイルの相対または絶対パス。」とあるが、実際にはURLで指定することもできる(とマニュアルにも書いてある)。つまりここにファイルそのものではなく、ファイルを処理して変換するCGIのURLを指定しておけば、変換後のテキストをmixiに投稿できるというわけだ。今回の例では次のように指定する。

define("MT2MIXI_ENTRY", "http://www.example.com/cgi-bin/html2text.cgi");

これで設定は完了。あとは今まで通りMTにエントリーを作成すれば、mixiにも整形された状態で全文が投稿される。

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

trackbacks

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

recent entries

2006-08-17
PING presents Lounge "20"
2006-07-26
ペプシカーニバル
2006-07-12
18禁ファンタ
2006-07-07
ナン・カリー
©2005, 2006 Yusuke Noda, all rights reserved.
powered by Movable Type 3.2-ja-2