穴水版mail2entry ver.0.2.0公開します

※最新版が公開されていますので、このページからのダウンロードは出来なくなりました。こちらへ

名前、変えた方が良いですかね。Joi Itoさんのと混同されないように。んー

えー、ver.0.2.0です。rebuild_indexも合わせてダウンロードしてください。
Download mail2entry.cgi(ダウンロード後、拡張子.txtを.cgiに変更)
Download rebuild_index.cgi(ダウンロード後、拡張子.txtを.cgiに変更)

追加機能、改良点を更新履歴より以下に引用します。


  • 更新通知pingを発信できるようにしました。それに伴い、Setting節に$flagpingを新たに設けました。1で発信、0で発信しません。
  • ブラウザからmail2entryを実行した場合の結果表示が文字化けする問題に対処しました。
  • 2通以上のメールを処理すると、前のエントリーへのナビゲータがうまく付かないことがある問題に対処しました。この問題に対処するため、rebuld_index.cgiも更新されています。でも、メールを送った順番とエントリされる順番が逆転してしまう場合などにはまだ現象が出ます(逆転してしまうのも原因不明)。なお、rebuld_index.cgiへBlogIDをmail2entryから受け渡すようにしたため、今までのようにrebuld_index.cgi内でBlogIDを指定する必要が無くなりました。perlのパス以外はそのままで使えると思います。


更新通知のpingが問題なく送れるようになったようなのでバージョンを0.2まで上げました。また少しまともなスクリプトになった気分(笑)
リビルドのあたりのコードが少し変わりました。blog->saveが新登場。いまいち使い方分からず使ってます。こうしたらいいとか、ここが変とか、どしどしご指摘くださいませ。

アップデートするときの注意点。

  • 更新履歴にもありますが、Setting節に$flagpingが新たに加わっています。一番下に追加しましたので、それ以降のソースをカットアンドペーストしてください。ソース自体を改造されてる方は申し訳ありませんが前バージョンと見比べながらアップデートしてください。どこを書き換えたかもう分からないです・・・
  • rebuild_index.cgiもアップデートされています。今回のアップデートで、blogIDの指定をしなくて良くなりました。perlのパスにだけ注意して、今までのものに上書きするだけで大丈夫だと思います。


と、こんな感じです。でもまだなにか書き忘れているような・・・
実験用コードですので、ご利用に際してはくれぐれもご注意ください。ログが吹っ飛ぶようなことはないと思いますけど。

コメント

  1. okasakaです。
    mail2entryを試そうとしていますが、
    設定などしてもひたすらInternal Server Errorがでます。
    CGIの設置など基本的なことはできているつもりですが、
    以下の2点をとりあえず教えてください。
    1)このCGIには別モジュールが必要ですか?
    2)ドキュメント中に
    mail2entry.cgi,rebuild_index.cgi
    entry.cgi,index.cgi
    など複数のcgiがでてきますが、実際に現行のバージョンで必要なのはどのcgiでしょうか?
    その他、設置のときのコツなどありましたら
    教えてください。

    返信削除
  2. 別モジュールはいくつか必要ですが、最近のサーバーでは一般的に用意されていることが多いものばかりのはずです。198行目~212行目を見ると必要なモジュールが分かります。湖西災害ボランティアのサーバーは、MIME::Parserがありませんでした。ほかには、サムネイル表示をするためにImage::Magickが必要です。TELNETが使える環境であればParserはインストールできると思いますが、Image::Magickはコンパイルが必要なので、管理者にお願いしてみるしかないと思います。$flagresizeが0になっていれば、Image::Magickがなくても動きます。
    必須cgiは、mail2entry.cgiとrebuild_index.cgiです。同じディレクトリに設置してください。アクセス権は出来る限り700で。index.cgiは、トップページを開くと同時にmail2entry.cgiを実行したい場合に用います。
    コツは・・・特に無いと思います。Setting節のディレクトリに関するものがちょっと間違っているだけでエラーになりますから、その点要注意です。他に分かりにくいのはブログIDぐらいでしょうか。First Weblogを消して新たにweblogを作っていたのを忘れて、1を指定し続けて困った経験があります(汗。MTの編集メニューの時のアドレス欄を見ると確認できます)

    返信削除
  3. 設置の仕方がログに埋もれてしまってますね。目にとまりにくいと思いますので、ここにリンクをはっておきます。
    http://www.mobile-bozu.com/weblog/archives/000066.html

    返信削除
  4. ありがとうございます。MIME::ParserはこのCGIを動かすのに必須なんですね。職場のサーバがMTに対応しているので、評価しようかなと思ったのですが、レンタルサーバーなので少し難しそうです。レンタルサーバー自体を移行する話(これはもしかして企業秘密か?)もありますので、職場で別に環境を作って試してみます。具体的にはJoeITOさんのプログラム(dhさんのゲートウェイ)を今まで使用しているのですが、それの「置き換え」を考えています。

    返信削除
  5. Parserはメールの解析に使っているので欠かせないんですよ。Parserのインストールはサーバー管理者にとっては簡単な作業のはずなので、管理者に要望を出してみると案外すんなりいくかもしれません。低価格サーバーでも応じてもらえたという話も聞きますし。(私は勝手にインストールしちゃいましたが・・・)
    この辺りのこともVer.1.0が出来たら記載しなくちゃと思っていますが、1.0になるのはいつのことやら・・・なるべく早めにまとめてエントリーします。
    moblog.uva.ne.jpには興味あります。災害用に使うには方向が違うかも、と思ったので今のところ自力で作ってますが、そのうち試してみたいサービスです。
    おおっぴらに書くほど進展してないのでここにこっそり書きますが、mail2entryの設定をブラウザから行うためのcgiをちょっとずつ書いてます。いまだにPerlに馴染めなくて試行錯誤を繰り返してるので、随分時間がかかりそうですが・・・

    返信削除
  6.  こんにちは。greenplastic.netのyosshiと申します。
     昨日から、こちらで公開されているmail2entryを使わせていただいているのですが、メール送信後、mail2entry.cgiにブラウザからアクセスしますと、なぜか同じエントリーが2つ投稿されてしまいます。
     申し訳ないのですが、手順を確認させていただきますと、まず、メールを送信する。その後、mail2entry.cgiを実行する。
     以上でメールの内容がウェブログに反映されるということでよろしいのでしょうか。
     このような便利なスクリプトを積極的に公開されている方々にはいつも感謝しています。mail2entryについては、以前にJoi Itoさんのところからダウンロードしたスクリプトと格闘して敗れ去ったという苦い思い出があります。
     よろしくお願いいたします。

    返信削除
  7. はじめまして、yosshiさん。mail2entryのご利用ありがとうございます!
    使い方はその通りです。今までテストした中では、エントリーが2重に投稿されることはなかったですので、初のケースです。どうしたことでしょう。一つも投稿されないときはしょっちゅうでしたけど。
    ブラウザからmail2entry.cgiを実行したときの結果表示は、エントリー1つ分になっていますか?
    その時点で2つあるようなら、メール自体が2通有るか、cgiが2通有ると思いこんでしまって処理をしているということになります。
    ちゃんと1つ分であれば、リビルドをする段階でおかしなことになっていることになります。
    試しに、mail2entry.cgiの最後の3行を
    #if($flagmessage) {
    # system "./rebuild_index.cgi $myblog_id";
    #}
    とコメントアウトしてみてください。単にリビルドしてるだけなのでたぶん解決にはならないはずですが、念のため。
    また、
    $blog->save; #blogをsaveしないと、前回のエントリーにナビゲータがうまく付かないことがある
    という行もコメントアウトして試してみてください。
    怪しいのはこれぐらいでしょうか。
    なにぶん自分の環境では再現出来ないものですから、申し訳ありませんが実験してみてください。どんな環境でも一発で動くものにしたいと思ってますので、よろしくお願いします。

    返信削除
  8.  ありがとうございます。
     結論から言うと、ボクのミスだったようです。
     どうやら、携帯電話でmail2entry.cgiを呼び出してエラーが出たことや、safari(MacOSXのブラウザ)のエラー(60秒間応答がないとエラーになる)が原因で2重投稿が起こっていたようです。
     念のため、もう一度だけ確認してからmail2entry.cgiを書き換えようと思ってそのまま試したところ、問題なしでした。safariのエラーを考慮して別のブラウザでmail2entry.cgiを呼び出したところ、時間はかなりかかりましたが(5分くらいかかったかも)、最終的にはエントリー1つ分の投稿完了メッセージが出ました。
     お騒がせして申し訳ありません。

    返信削除
  9. 無事に動いて良かったです。ほっとしました。
    そういえば、携帯電話から呼び出しテストしたことがないです。エラー処理ルーチンをしっかりしないといけないですね。ちょっとしたことで出来るはずなのですがほったらかしにしていまして。。。
    5分ぐらいかかるというのは、なんとも不思議です。mt.cgiでリビルドするのと大差ない時間で出来るはずなのです。
    試しに、216行目(Setting節の少し下)にある
    print "Content-type: text/html; charset=$printJcode{$to_jcode}¥nPragma: no-cache¥nCache-Control: no-cache¥n¥n";
    という行の前に、
    binmode(STDOUT);
    という一文を挿入してみてください。MT4iでタイムアウトエラーが出たときに使った方法なのですが、もしかしたら効果があるかもしれません。

    返信削除
  10.  binmode(STDOUT);
    を挿入してみましたが、結果は一緒でした。5分くらいかかります。
     ボクはindividual, daily, monthly, categoryのアーカイブを使用しているのですが、mail2entry.cgi実行中でもそれらのページは生成されていることを発見しました。indexに結果が反映されていないので、rebuildが行われていないものだと思っていましたが。
     ここで質問なのですが、mail2entry.cgiによるrebuildは、mt.cgiで『すべてを再構築』するのと同じ動作なのでしょうか。
     というのも、ボクはこの『すべてを再構築する』を普段ほとんど使いません。コメントを削除したりしたときなどにrebuildを促されはしますが、そこで再構築をせずにエントリーの保存を行います。時間とCPUの不可の節約になると思ってそうしています。
     もし『すべてを再構築する』が行われているなら、もしかしたらそのくらい時間がかかるのかもしれません。

    返信削除
  11. あらら、効果なしでしたか。私の予想は外れっぱなしですね。申し訳ないです。
    「すべてを再構築」に、さらにその前にエントリーの保存とリビルド、前回エントリーのリビルドをしています。なんだか無駄なような気もしますが、2通以上のメールを処理しようとすると正しくリビルドされないので、いろいろ実験した結果、こうなっています。
    つねに1通メールするごとにcgiを実行するというのであれば、上にも書きました以下の3行をコメントアウトして、
    #if($flagmessage) {
    # system "./rebuild_index.cgi $myblog_id";
    #}
    以下の文を下に書き加えてみてください。
    $mt->rebuild_indexes(BlogID => $blog_id)
    or die $mt->errstr;
    エントリーの保存の終わるタイミングを監視する方法が分かればもう少し幅広い環境に対応できるんですけれど・・・

    返信削除
  12.  どうも、お世話になってます。
    #if($flagmessage) {
    # system "./rebuild_index.cgi $myblog_id";
    #}
    $mt->rebuild_indexes(BlogID => $blog_id)
    or die $mt->errstr;
    を試してみましたが、mail2entry.cgiを呼び出すと500エラーが出てダメでした。
     あと、ボクが借りているサーバーはcronが使えるのですが、この場合、mail2entry.cgiを実行するように指定すればよいのでしょうか。

    返信削除
  13. すいませーん
    間違えてました。ほんとうにすいません。
    $mt->rebuild_indexes(Blog => $blog_id)
    でした。Blogの後のIDが余分でしてた。
    cronを使うのであれば、
    if($flagmessage) {
    # system "./rebuild_index.cgi $myblog_id";
    $mt->rebuild_indexes(Blog => $blog_id)
    or die $mt->errstr;
    }
    としておいてください。if文を消してしまうと、メールが無くても見リビルドをしてしまいますので。
    cronの使い方は結構複雑ですので、
    http://homepage1.nifty.com/cra/linux/cron.html
    を参照してください。
    viというエディタで書式を書き込むことになります。操作方法が分からなければ、以下のページが参考になると思います。
    http://www.net-newbie.com/linux/commands/vi.html
    うまく動かなくなったらescキーを何回か叩いて、:q[enter]で終了できることさえ覚えておけば安心です。
    シェルでcrontab -eとするとviが立ち上がってcronの設定ファイルを編集できるようになるので、書式に従って一行書き加える、ということになると思います。
    実は、「cronに登録するか」などと書いてるくせに、使い方知らないんです(汗)
    なるべく効率よくリビルドするようにコードを修正している最中ですが、なかなかうまくいきません。時間かかりそうです。

    返信削除

コメントを投稿

zenback

このブログの人気の投稿

IPv6(IPoE)でようやくVPN復活

DuraSpeedとかHuaweiの電源管理とか、やめてくれ

AirPods Pro、Apple Watchのトランシーバーアプリで楽しめる