2003年05月22日
moblogシステム概要
このweblogに携帯メールから書き込めるようにしているシステムの概要とセットアップ方法
環境:
Mac OS X 10.2 (10.3以降はSendmailからPostfixに変更されているので、後半のSMTPの設定方法が異なる)
概要:
1.メールサーバでメールを受ける
2.題名、本文、添付ファイルをとりだす
3.weblogに書き込む
という動作をするスクリプトを使用。XMLRPCを使用しているので、メールサーバとMovable Typeが動いているWebサーバは別のマシンでも良い。
更新履歴
- 2005-06-13: セキュリティ対策(投稿内容のサニタイズ)
- 2004-04-13: A5501TのExifタグに対応。(GPSタグの度が1/100000、分・秒共に0)
- 2004-02-13:
- [Movable Type 2.661 + 日本語化パッチ]に対応。
- GPS情報の抽出をexiflistからImage::Infoに変更。
- mencoderによるamcファイルの変換を廃止。(QuickTime6.5によりamc再生環境が整ったため不要と判断)
- 2003-07-24: Extendedが生成されないバグを修正。
- 2003-07-20: Altitudeタグがない場合に対応。
この手の動作をするpythonのスクリプトとしてmail2entryというものがすでにあるが、これがOS X10.2に含まれるバージョンのpythonではうまく動かなかったので、perlで書いてしまった。車輪の再発明かも。
Download file
GNU General Public License version 2(日本語) に従ったフリーウェアです。
位置付写真を添付したメールでMovable Typeに書き込むための基本的な機能しか実装してません。
- 想定している測地系は、WGS-84。
- 地図へのリンクは、@NAVI。
- カテゴリーは扱いません。
- ffmpegをインストールしておけば、auムービーメールのサムネールを作って同時にアップロード。
- ムービーに埋め込んだ位置情報には対応していません
測地系の変換をして日本測地系のMapionを使う、自動的にカテゴリーを設定する、などの拡張をするには、nob sekiさんのSync A World You Want To Explore: GPSは正確だが、地図情報は?が参考になります。
メールから書き込む機能はいらない、画像に地図リンクだけ付け足したい、という場合は、AddMapsプラグインをどうぞ。
スクリプトの設定:
my $url = 'http://www.your-site.com/movabletype/mt-xmlrpc.cgi';
Movable Type のmt.cgiをmt-xmlrpc.cgiに置き換えたもの。
my $blog_id = 2;
書き込みたいweblogのid。Entry編集画面のURLにblog_id=で表示されているもの。
my $username = 'Melody';
my $password = 'Nelson';
書き込むユーザ名とパスワード。メール書き込み用に新しくユーザを追加したほうがいいかも。
my $code = utf8; # utf8, euc, jis, sjis(2.661+日本語化パッチではXML-RPCがutf8に統一されているようなので、この設定は削除)
書き込む漢字コード
my $MT_DIR = '/Library/WebServer/Documents/mt/';
同じマシンにMovable Type をインストールしているならば、そのディレクトリ。文字列の最後は/で。
my $parse_path = '/Users/Shared/post2blog';
テンポラリファイルを作るディレクトリを用意する。OS Xの場合、Finder上から確認しやすい/Users/Shared/に作るのが良いかも。
モジュールのインストール:
OS XでMovable Typeが動いている環境の標準以外で必要なperlモジュール
http://search.cpan.org/author/ERYQ/IO-stringy-2.108/
http://search.cpan.org/author/GAAS/MIME-Base64-2.20/
http://search.cpan.org/author/MARKOV/MailTools-1.58/
http://search.cpan.org/author/ERYQ/MIME-tools-5.411a/
http://search.cpan.org/author/DANKOGAI/Jcode-0.83/
http://search.cpan.org/~gaas/Image-Info-1.16/
MIME-toolsをインストールする前に、その上の3つをインストール。
それぞれを展開したディレクトリの中で
% perl Makefile.PL
% make
% sudo make install
でインストールできる。
OS Xの標準に含まれていないものとしては、SOAP::Liteも必要だが、Movable Typeが動いている環境ならば、すでにインストールされている。Movable Typeを動かしているマシンとは別のマシンでこのスクリプトを動かす場合は、SOAP::Liteもインストールする。SOAP::Liteは依存するモジュールが多くてややこしいので、CPANモジュールを使ったほうがいいかもしれない
まずはCPANモジュール自身のアップデート。途中でいろいろ聞いてくるが、基本的にはすべてデフォルトでよい。つまりひたすらリターンキー。
% perl -MCPAN -e shell
cpan> install Bundle::CPAN
ただしlibwww-perlのインストール中に
Do you want to install the HEAD alias? [y]
と聞いてくるので、これだけはnと答えないと、大文字小文字を区別しないHFS+ボリュームの場合/usr/bin/headコマンドを潰してしまう。
cpan> reload cpan
CPANモジュールを使っていると、途中でperl5.8.0とかのインストールが始まってしまうことがある。そんなときはダウンロード中にすかさずCtrl+Cで中断。
cpan> install SOAP::Lite
sendmailの設定:
まずはサーバとして動くようにする。
[参考ページ]
http://pisa.csrs.is.uec.ac.jp/TechInfo/Macintosh/SendmailOnJaguar/UptheSendmailOnJaguar.html
[参考ページ]に書いてないこと:
DNSで引けるマシン名がなくてIPアドレスだけの場合
/etc/mail/local-host-names
に、生IPアドレスを[]で囲んだものを記入。仮にアドレスを192.168.0.1とすると
192.168.0.1
[192.168.0.1]
これは、SMTPサーバによってはTo: user@192.168.0.1では送信ができず、To: user@[192.168.0.1]とする必要があるため。.macはこのパターン。ezwebは[]なしで送信可。
次に、サーバに届いたメールをスクリプトに渡すようにする。
スクリプトを/usr/adm/sm.bin内に置く。
% sudo mkdir -p /usr/adm/sm.bin
% sudo cp post2blog /usr/adm/sm.bin
% sudo chmod 555 /usr/adm/sm.bin/post2blog
NetInfoマネージャで[参考ページ]の通りにaliasesを追加。ただし、"members"にはアドレスのかわりにスクリプトへのパイプをフルパスで記入。
| /usr/adm/sm.bin/post2blog
再起動。
これで、
alias名@IPアドレス
にメールを送信すれば書き込まれる。
2004-04-13以前の版には以下のセキュリティホールがあります。最新のものをダウンロードしなおして使用するか、以下の対策を取ってください。
内容1:
添付ファイル名のサニタイズを行っていないため、投稿先メールアドレスが漏洩すると、最悪の場合、メールを受信するサーバ上で任意のコードの実行が可能です。
対策1:
オリジナルの添付ファイル名を使用しないようにしてください。
内容2:
同じく投稿先メールアドレスが漏洩した場合、題名、本文などを利用したXSSが可能になります。
対策2:
投稿内容のサニタイズを行ってください。
以上二つの変更を行ったものと旧バージョンとのdiffは以下。
はじめまして。さっそく、使わさせていただきました。
私はPythonが全然分からなかったので、Perl版になり
いろいろいじれそうです。
そうそう、GPSのlocation情報については、navi.comとmapionで
場所が違って表示されていたのですが、
これは世界測地系と日本測地系という異なる基準があるからだそうです。
これについては
http://www.syncworld.net/blog/nob/archives/000961.html
をご参照ください。
情報ありがとうございます。
国土地理院のページは、お役所の縦割りのせいか、どうにもナビゲーションが悪くて情報を見落としてしまいがちでしたが、教えていただいたURLのおかげでいろいろわかりました。
私は
http://member.nifty.ne.jp/Nowral/index.html
を良く参考にしてます。「測地系」のページに、測地系変換をするperlのコードも載っています。
公開しているバージョンのpost2blogにはまだ反映していないのですが…
最後に紹介されているコードは計算量が少なくて、組み込みやすそうですね( http://member.nifty.ne.jp/Nowral/02_DATUM/Molodensky.html )
私の場合は、Linux版の座標変換プログラム( http://vldb.gsi.go.jp/sokuchi/software/ )をとりあえずインストールして、Mapionの地図を出すようにしました。
元のpost2blogをちょっと拡張させていただきました。
・MovableTypeのカテゴリーに対応
・Mapion、@NAVI.comの両方の地図に対応
・Mapion用に座標軸を日本測地系へ変換
・最新の写真を参照できるlatest.category.jpgファイルを作成
とりあえず元ソースからのdiffを、
http://www.syncworld.net/blog/nob/archives/000961.html
に置いてみました。
このスクリプトを元にして、こんなこともできます。
http://ld.minken.net/
moblogを始めたので、どうせだったらAUの携帯だし、
GPS情報も活用しようと思いまして、
まずEXIFの情報からリサーチを始めて、
Image::infoを使えばEXIFのdumpも簡単だなと、、、
そして、GPSの測地系についてリサーチを始めたところ
このサイトに行き着きました
もうすでにperlで実現されているようなので
自分で再度作りこむのもなんなんで
使わして頂いてよろしいでしょうか?
ezwebのコンテンツでsutaba-search(簡単アクセス88000)なるものを
運営しているのですがGPS情報って使えば使うほど面白いですよね
はじめまして。このblogの運営者です。
そう、Image::infoがバージョンアップして今はGPSタグも拾えるようになってるんですよね。適当に書き換えて使ってくださいませ。
手を加えて利用させていただいてるのですが、
スクリプトのライセンスはどのような扱いになっているのでしょうか。
ありがとうございます。
GPL2を適用されたのですね。とても嬉しく思います。
改変バージョンについては、
http://33rpm.jp/wiki/index.php?MobLog
こちらで配布しています。
こんにちわ。
もしよろしければ、ついでにお聞きしたいのですが、
Urban landscape Search Engineの「近傍検索」
って、どういう仕組みで動いているのでしょうか?
最近傍だけでなく、トップ10とか、
文字列検索と空間検索(2km以内など)のアンドをとるとか、複雑な検索が、技術的に可能なものなのか
知りたいと思っています。
ULSEの近傍検索では、素朴に、全投稿を順番にサーチして、投稿ごとにクリックした点からの距離を計算し…という処理を行っています。
他の検索条件と組み合わせることも、技術的には可能だと思います。
投稿数が膨れ上がったら、アルゴリズムを変えるなり、もっと速い言語で書き直すなりしないとダメでしょうけど、いまのところこんな程度で動いてます。
Posted by: もとなが at 2004年02月17日 00:09なるほど・・ありがとうございました。
あの近傍検索は、無駄な操作をユーザにさせないので、すごいなぁと思っていました。
それでは、また。
はじめまして。
公開されているスクリプトを基に、機能を追加して自宅サーバでモブログを運営できるようになりました。
XMLRPCのAPIを扱うのは初めてだったので、大変勉強になりました。どうもありがとうございました。
See YAHOOSee GOOGLE
Posted by: Bozko1 at 2004年10月20日 19:43こんにちわ。
モブログの挑戦しているものなのですが、一通り設定し、テスト投稿のため該当のメールアカウント宛にメールを送信した所、$parse_pathで指定したディレクトリにmsg-1155357404-25290-0というディレクトリと中にmsg-25290-1.txtというファイルのセットが延々と作成され続けてしまいます。
post2blog.plを削除する事でループからは逃れられるのですが、モブログができず困っています。
考えられる原因をご教授いただけないでしょうか?
環境はさくらでMTVersion 3.31-ja です。
スクリプトを削除してループが止まるということは、ループそのものはスクリプトの中ではなくスクリプトを呼び出す側で起きている可能性が高いです。
まっさきに思いつくのは、メールループですね。たとえば、エラーメールが返る先がモブログのアドレスになっているとか。
早速のお返事ありがとう御座います。
.mailfilterには
to "| /パス/mt/plugins/post2blog.pl"
exit
と指定しています。
エラーメールがpost2blog.plに行ってしまうため
ループすると言った現象でしょうか?
まずは、moblogのアドレス自身にエラーが返るような設定で投稿されているなら、設定を変えてください。
つぎに、post2blogはプラグインではありませんので、プラグインディレクトリからは出してください。
こんにちわ
その後色々と調べてみたのですが、
moblog自身にエラーが帰る設定が具体的にどのような
設定なのかまったく解りません(汗
moblog自身のメールとは投稿用のメールアドレスかと思うのですが、そちらの.mailfilterの設定になるのでしょうか?
ちなみに、一度めの動作確認時、投稿用アドレスにエントリーをメールで送信しましたが、
use MT::Sanitize;の部分でエラーが発生していると言った内容のメールが送信元に返ってくるため、
どこかのサイトでコメントアウトしても問題がなかった旨の記事があったのでpost2blog.plの36行目、54行目、95行目をコメントアウトし送信したらエラーは返ってきませんがループしてしまいました。
これらが問題でしょうか?
少し前から利用させていたでき順調に動いてきたのですが、先日ボーダフォンから写真付きのメールで投稿したらエラーが返ってきました。
エラーを引き起こしている場所はpathのメソッドが見つかりません(line70)とあるのでおそらく70行目あたりだと思います。
auからやボーダフォンでも写真がないのでは投稿できます。
何か対処の方法はありますか?
エラーが起きるメールそのものを見てみないとなんとも言えませんが、たぶんMIMEが入れ子になっているとか、そのあたりだと思います。Apple Mailが出すAppleDoubleっぽいメールもダメなんですよね。
if ($entity->is_multipart) {
# multi parts
for (my $pn = 0; $pn < $partnum; $pn++) {
(略)
}
} else
あたりの処理をもう少しいろんなケースを想定したものに書き換える必要があるんですが、手が空いたらやってみます。
http://www.google.com/search?q=MIME::Parser+nested
あたりでしらべると参考になります。まだちゃんと調べてないですが。
なにやらMIME-toolsの新しいバージョンなら入れ子のMIMEも良きに計らってくれそうなオプションがあるようにも読めます。
やりはじめたら見直したい部分が他にも出てきて、書き直すまでちょっと時間がたってしまいましたが、スクリプトを更新しました。まだしっかりテストできていませんが、とりあえず上げておきます。
http://minken.net/mt/archives/000473.html
はじめましてkiichiと申します。
こちらで配布されている「post2blog」の古いやつを使わせてもらっているのですが、添付した画像を任意の位置に表示させたくて少々改造しているのですが、本文を指定している変数はどの辺りで指定してるのでしょうか?
自分なりに置き換える文字を$imgとして125行目あたりに
if ($description =~ /\$img/) {
$description =~ s/\$img/$returl/;
}
のような行を追加してみましたが、上手くいきませんでした。
お忙しいとは思いますが、アドバイスを頂けたら幸いです。
連続書き込み失礼します。
125行目じゃなく153行目でしたm(__)m
上記の者ですが、自己解決しました(^^♪
ですが、画像を2枚3枚と添付した場合がどうしてもわからず悪戦苦闘しております。
何とか自分で解決できるようがんばりますm(__)m
お騒がせしました。