更新Pingを受けて自動RebuildするCGI

あるBlogの更新時に、別BlogのIndexもRebuildしたい。

このBlogでも「別Blogでリンク集」にもあるとおり、別のBlogにしたリンク集の内容をMTOtherBlogプラグインを利用して表示しているのだが、そちらを更新しても、人生迷い箸側のインデックスがリビルドされるまで反映されない。

そこで、更新Pingを受けて自動的にインデックスをRebuidするCGIを作成しました。

up-rebuild.zip (Ver0.9 size=1.02KB)

設置方法は、up-rebuild.cgi を編集し、適切なperlのパス、$MT_DIRにmt.cgiのあるディレクトリ、$blog_idに自動リビルド対象のBlogのidを指定。変更したファイルを、CGIが実行できるディレクトリに設置後、適切にパーミッションなどを設定する。

【2006/1/24 追記】

MT3.2以降では mt.cfg がないため、うまく動作しません。MT3.2 以降でお使いの方は up-rebuild.cgi を編集する際に、27 行目あたりにある「mt.cfg」という文字列を「mt-config.cgi」に書き換えてください。

あとは、更新するBlog(自動リビルドのトリガになる側)で、「BLOGの設定」→「ウェブログの設定」の「広報 / リモートインターフェイス / トラックバック」に、設置したup-rebuild.cgiのURLを入力すれば完了。

中身を簡単に説明。

CGIにアクセスがあったら単純に、指定されたBlogのインデックスをリビルドしてXML-RPCのレスポンスを返すだけ。

レスポンスのフォーマットについては下の記事を参考にさせていただきました。

NDO::Weblog Weblogs.Com Ping の Perl による実装

上の記事を参考にしてXMLRPC::Transport::HTTPを使おうかとも思ったんですけど、別にPingで通知される情報を利用するわけではないのでやめておきました。

50 Responses to “更新Pingを受けて自動RebuildするCGI”

  1. blog:N@TURE BRAIN Says:

    別BlogのPingでMainIndexをリビルドするCGI

    流石、男爵です。早くもCGIを作成してくれました。 これで、PhotoBloggerみんながハッピーになれることでしょう。 狙いは 手順は以下の通り。 up-rebuild.cgiをダウンロードし、エディタでMTの…

  2. キミコ Says:

    こんにちは。

    これって、モブログを別ブログにしてる人にも有効ですよね。苦手といいつつ、プラグインとか入れてるような人なら、SSIにするより、やりやすいかもしれませんね。

    うちはPHPにしてしまったけれど、これがあったら、きっと使わせてもらってたと思います。

    うーん、使いたくなってきた・・・。なんか、いいアイデアはないかなあ。

  3. ヴァリウム男爵 Says:

    そうですね。有効だと思います。

    実は僕もSSIで解決しようかとも思ったんですけど、テンプレート直したり拡張子を直したりというのが面倒だったので(苦笑)
    あと、本当の作成動機はブログドロイドさんの記事
    http://www.2-1b.com/archives/000024.html
    を参考に、MTOtherBlogプラグインを使って別Blogの画像を表示している友人からの熱い要望だったりします。自分では「ま、リビルドすりゃいいや」なんて思ってたので。:p

  4. gumoblog : futch Says:

    MTテンプレート修正

    ホーム、カテゴリアーカイブとマンスリーアーカイブを修正。…

  5. ホンの愉しみ Says:

    別ブログの最新タイトルを表示

    久しぶりのMTネタです。私は読書感想のBLOGを他に2つ立ち上げていて,その最新5件を別テンプレートに書き出させIFRAMEでこのTOPページに表示させていたんですが,どうも気に入らなくて…

  6. Diary Says:

    トップページに更新日を表示

    前々からやりたかった、更新日の表示をトップページにつけました。これがあれば、どこのページが更新されたか一目瞭然でしょ? このサイトは、複数のblogをMTOtherBlogプラグインで寄せ…

  7. 無言さんのつぶやき Says:

    無言さんのひとこと

    別Blogを使用して、 右側にひとことを乗せるようにしてみました。 参考サイト: http://www.2-1b.com/archives/000024.html 簡単な流れを書くと・・ 1.新しいウェブログを作成する。 2.MTOtherBlog (v 0.25)…

  8. ウェブログ@ことのは Says:

    Movable Type 改造とプラグイン覚書

    ・今さらながら、このサイトを構築するのに使っているMovable Typeをアップデート。 ・新ドメインの新サイト制作中(引越しではありません) で、覚書とか。…

  9. PukiWiki/TrackBack 0.1 Says:

    MovableTypeプラグイン

    MovableTypeプラグイン 人生迷い箸: 更新Pingを受けて自動RebuildするCGI http://valium.oops.jp/archives/000093.html コメントを書き込んだ人(訪問者)に、追記されたコメントを通知するプラグイン …

  10. 随想雑録譚 Says:

    2つのblogを一つに

    随想雑録譚とスケート虎の穴、随想雑録譚のほうは一般的な話題、スケート虎の穴はスケート関係の話題を扱っているが、随想雑録譚のほうでもスケート虎の穴のエントリーを表示できないものかと思って色々探してみた。主にググっただけだが(笑) すると松永氏の「ジェームズ…

  11. DEFAULT BLOG Says:

    +Diary:sの自動Rebuild

    更新通知をするようにしたけれど。 更新ピングを受けて自動RebuildするCGI …うまく動いてない?…

  12. katz Says:

    野暮な質問で申し訳ございません。
    例えば一つのmt.cgiで3つの並立するブログを作っていた時、どれか一つを更新すると他の2つもリビルドをかける設定ってありますか?

  13. ヴァリウム男爵 Says:

    katzさん、こんにちは。

    今のところup-rebuild.cgiを改造するか、あるいはファイル名かフォルダを変更してup-rebuild.cgiを2つ設置し、それぞれのBlogをリビルドするしかありません。

    とりあえず、いちばん簡単な2番目の方法を。

    例えばMovableTypeでA,B,CというBlogを作成しており、以下のようになっているとします。

    A:blog_id = 1
    B:blog_id = 2
    C:blog_id = 4

    この状況でAが更新されたらBとCもリビルドしたい場合、up-rebuild.cgiのファイル名を変更してそれぞれBとCをリビルドするように修正します。例えばup-rebuild_b.cgiファイル中では「my($blog_id) = “2″;」、up-rebuild_c.cgiファイル中では「my($blog_id) = “4″;」として、それぞれ設置します。

    これでAの更新Ping通知先に2つのCGI動作URLを記述すれば、Aを更新したときにBとCが自動リビルドされるようになります。

  14. katz Says:

    早速のご返事ありがとうございます。
    ブログごとにcgiを作成する訳ですね。了解です!
    2つのブログは文字しか考えていないのでこの方法でいこうかなぁと思います。
    もう一つのブログは写真付きを考えているので、表示用にテンプレートを作ってiflameで取り込もうかと現在思案中…

  15. 男の料理 Says:

    他サーバーのブログの新着記事をMTotherBlogを使って表示させる方法

    製作の依頼があったので無い知恵を絞って力技に出てみました。MTotherBlog…

  16. 男の料理 Says:

    他サーバーのブログの新着記事を表示させる方法

    製作の依頼があったので無い知恵を絞って力技に出てみました。MTotherBlog…

  17. A double nest::web-katz Says:

    複数ブログ立ち上げ

    お気づきの方も多いと思いますが、9月より実験的に複数のブログを立ち上げております…

  18. A double nest::web-katz Says:

    複数ブログ立ち上げ

    お気づきの方も多いと思いますが、9月より実験的に複数のブログを立ち上げております…

  19. e-Groover,log Says:

    cronが使えなくてもRSSfeedを自動化

    MTにRSSを取得、表示できるプラグインがありますが、cronが使えない場合は使えないというか、手動でリビルドまたはコメント、トラックバックがあった時に更新みた…

  20. 子供達は夜の住人 Says:

    複数ブログを合体させる。

    エントリー3つくらいまとめてupしとります。まとめすぎです。ごめんなさい。 以前…

  21. FOX通信 Says:

    別ブログへの更新通知

    現在狐の巣穴は全部MovableTypeで構築してて、 ブログ3つをこんな感じでわけてます。 1.狐…

  22. ブログ アフィリエイト徹底ガイド マイバブルタイプ Says:

    連携プレーで行こう!磯野家の真実

    久々にムーバブルタイプ関連の使える情報をお届けします。…

  23. MTカスタマイズ法収集ブログ Says:

    別ブログの最新記事タイトルを表示させる方法

    実は私(この記事を書いている時点で)MTで3つのブログを運営しています。 そのうちのひとつ、日常の事とちょっとした豆知識を綴っている 「ひだまりのひまわり」の最…

  24. TENERE Says:

    別ブログの情報を表示:MultiBlogプラグイン

    あるブログで別のブログの更新情報を表示するのにMTOhterBlogプラグインを…

  25. FAKE BLOG Says:

    MTOtherBlogプラグインを導入

    今まで本館サイトの更新履歴はCGIを利用して手入力で書いていましたが、なかなか更…

  26. 腐女子のMovableTypeカスタマイズ感想文 Says:

    別blogの最新エントリーを表示する

    現在メインでやっている読書感想文のブログの記事数が多すぎて、ブログの再構築ができなくなってしまいました。

    現在使用しているMobableTypeとい…

  27. Orie Says:

    こんにちは。
    複数あるブログにup-rebuild.cgiを利用させていただこうと思ったのですが、エントリー保存時に「トラックバックか、アップデート情報の送信でエラーがありました 」と表示されて自動更新させたいブログに反映されません。
    MT3.2のためmt.cfgがありませんので、27行目のmt.cfgをmt-config.cgiに変えてみたりしたのですが同様の結果です。
    更新作業が楽になるこのCGIをぜひとも使いたいと思っていますので、もし何か原因がわかりましたら教えていただけませんでしょうか?よろしくお願いいたします。
    環境:
    MT3.2
    PHPによるモジュール化済み
    サーバーはロリポップ

  28. ヴァリウム男爵 Says:

    Orieさん、こんにちは。

    MTのログに、なにかエラーは記録されておりますでしょうか?

  29. Orie Says:

    早速のお返事ありがとうございます。
    MTのログを見たら原因がすぐにわかりました。
    ディレクトリの指定間違いという単純ミスでした。
    1週間も悩んでいたので、これでようやくすっきりしました。
    本当にありがとうございました。

  30. WEB制作関連メモ Says:

    複数ブログ間での連携

    各コンテンツでデザインが大幅に異なるMT案件。 トップページに新着情報を作る必要…

  31. MovableTypeを活用して脱初心者! Says:

    MovableType3.2アップグレード

    3.2はmt.cfgがないのでちょっと敷居が高い感じがします。しかし、メリットも大きいのでアップグレ…

  32. MovableType(MT) Wiki | MTまとめサイト? | (PukiWiki/TrackBack 0.3) Says:

    MultiBlog

    MT-Wiki MovableTypeのマルチブログ化 † プラグイン(英語圏) MTOtherBlog (v 0.25) MTOther…

  33. tama*blog Says:

    別ブログの最新エントリーを表示させてみよう!

    ┌|゚□゚;|┐ガーン!! タイトル長っ!! ......気を取り直し。w レ…

  34. Mit Says:

    こんにちは。既に使わせて頂いており、とても助かっております。ありがとうございます。
    ただ、伺いたいのですが、
    複数のブログの更新時に、その他の1つのブログのIndex以外もRebuildさせる方法はありますでしょうか? ご教授頂ければ幸いです。MTは3.2です。

  35. ヴァリウム男爵 Says:

    Mitさん、こんにちは。

    Index以外、というのは具体的には何を指していますか?

    例えばup-rebuild.cgi 41行目あたりの rebuild_indexesだけでなく、rebuild_entry や _rebuild_entry_archive_type などのビルド処理を追加すればアーカイブなどもリビルドできるんじゃないかと思います。ただしこれらの関数はエントリーを引数に取りますので、簡単には追加できません。アーカイブを全てリビルドするなら話は簡単ですが、負荷を考えると無理だと思いますし・・・・・・。

  36. Mit Says:

    早速にご回答頂き、ありがとうございました。
    説明不足で申し訳ありませんでした。

    >Index以外、というのは具体的には何を指していますか?
    1エントリー内にMTタグを記述していて、他のブログの更新情報などを表示させています。
    (※Process Tagsプラグインというプラグインを利用していてエントリー内のMTタグが有効になっています。)

    ここのエントリー記事をup-rebuild.cgiを使って他のブログが再構築したらリビルドしたいと思っています。

    >例えばup-rebuild.cgi 41行目あたりの
    >rebuild_indexesだけでなく、rebuild_entry や
    >_rebuild_entry_archive_type などのビルド処理を追加すればアーカイブなどもリ
    >ビルドできるんじゃないかと思います。ただしこれらの関数はエントリーを引数に
    >取りますので、簡単には追加できません。アーカイブを全てリビルドするなら話は
    >簡単ですが、負荷を考えると無理だと思いますし・・・・・・。

    CMSとして利用しており、アーカイブのテンプレートはエントリー・アーカイブとカテゴリー・アーカイブの2つです。

    エントリーの数自体も40前後とそこまで多くないのですが、負荷を考えるとアーカイブを全てリビルドするのはやめた方がよいでしょうか?

    また、特定のエントリー記事だけ、リビルドすることは可能でしょうか?

    どうかよろしくお願い致します。

  37. ヴァリウム男爵 Says:

    Mitさん、

    アーカイブやエントリ数が少ないということで全リビルド負荷を気にしないのであれば、Line41の

    $mt->rebuild_indexes(

    のところを

    $mt->rebuild(

    と書き換えるだけでうまくいくのではないかと思います。時間が取れなくてテストはしてません。

    エントリを指定する場合にはもう少し変更が必要になてしまいます。

  38. Mit Says:

    ありがとうございました。ご指摘通り、
    $mt->rebuild_indexes(    を
    $mt->rebuild(  と書き換えましたところ、うまくいきました。
    今回は、エントリーを指定せず、この方法で様子を見ようと思っております。
    いろいろとご指導下さり、本当にありがとうございました。

  39. Movable Type ブログテンプレート:商用BLOG専門店 Says:

    Movable Typeの困った事、役立つ情報のリンク集

    はじめまして、とても役に立つ情報をありがとうございました。リンクさせていただきました。

  40. BrightMoonlightNight Says:

    更新履歴

    トップの「最近の更新」を表示するのにmultiblogというプラグインを使ってい…

  41. デュオン Says:

    はじめまして、こんにちは。
    こちらのup-rebuild.cgi を利用させて頂いている者です。
    大変素晴らしいcgiで非常に満足しております。有難う御座いました。^^

    一点だけお伺いしたいのですが、新規エントリーした時は、更新pingを送信でき更新が反映されるのですが、既にエントリーされている記事を書き換え再エントリーする時にはpingが送信されません。

    再エントリーした時もpingを送信したいと思うのですがどのようにしたら宜しいでしょうか?
    御忙しい所申し訳御座いません、ご教授頂けましたら幸いです。

  42. デュオン Says:

    度々すみません、エントリー画面の「トラックバック送信先のURL」にhttp://~up-rebuild.cgiをいれ再投稿したらping送信できました^^;

    環境設定のところでは「新規投稿」だけなんですね、失礼致しました。

  43. ヴァリウム男爵 Says:

    デュオンさん、はじめまして。

    一番簡単なのは一度下書きに戻して保存し、さらに公開にして保存すれば再度更新Pingが送られると思います。あとはエントリー更新後、外部ツールで更新Pingだけ送る方法があります。例えばもしBlogPeople(http://www.blogpeople.net/)をお使いであればBlogPingPingなどの外部ツールを利用するなどですね。

    どうしてもエントリー更新時にも更新Pingを自動的に送りたいということであれば、ogawaさんが作成されたUpdate-n-Ping Plugin(http://as-is.net/blog/archives/000976.html)が利用できるのではないかと思います。

  44. MovableTypeマニュアル? Says:

    他のブログの更新履歴の表示 その2

    親サイトである『金持ちサラリーマンへの道』の新着記事紹介欄は、他の関連ブログの新…

  45. デュオン Says:

    お世話になっております。
    一点だけ、ご質問がありまして参りました。
    ブログは、MTを使っております。
    up-rebuild.cgiでping送信の際、indexテンプレート全てではなく、indexテンプレート内にある「テンプレートid=1の、index.html」だけを更新したいのですが、可能でしょうか?

    indexテンプレートには、自動的に再構築されるものが数多く設定してあり、index全テンプレートがpingで更新されると、タイムアウトエラーになってしまいます。実際には更新は反映されているのですが、待つ時間が長いのできになります^^;

    恐らく、改造しなければならないと思うのですが、可能で御座いましたらご指南の程をお手数ですが何卒、宜しくお願い申し上げます。

  46. ヴァリウム男爵 Says:

    デュオンさん、こんにちは。

    # rebuild indexes
    $mt->rebuild_indexes( Blog => $blog )
    or die $mt->errstr;

    の部分を、下記のように変更してみてください。

    require MT::Template;
    my $tmpl_id = 0;
    my $tmpl = MT::Template->load($tmpl_id)
    or die $mt->errstr;

    # rebuild indexes
    $mt->rebuild_indexes( Blog => $blog, Template => $tmpl )
    or die $mt->errstr;

    「$tmpl_id=0;」の 「0」のところは、リビルドしたいテンプレートを指すidに変更してください。テンプレートidの確認方法は、tsupoさんの

    http://www.na.rim.or.jp/~tsupo/program/rebuild-tool/

    このページの真ん中辺りの説明を参考にしてみてください。説明を勝手に利用してすみません(^^;>tsupoさん

    ちなみに動作確認はしておりませんので、申し訳ありませんが自己責任でお願いします。m(_,_)m

  47. デュオン Says:

    エラーなく、正常に動作致しました。
    大変お手数お掛け致しました。
    有難う御座います。m(__)m

  48. 雑記帳 Says:

    み〜っけ!

     探していたMovableTypeのプラグインをついに見つけました! その名はG…

  49. ココット Says:

    はじめまして。up-rebuildにはとてもお世話になっております。すてきなcgiを本当にありがとうございます。^^
    今回、新規エントリーでもリビルドする手だてはないかと探していたところ、こちらでUpdate-b-Pingを知り、少し無理矢理かとも思ったのですが、Update-b-Pingからup-rebuildにPingを送るという手で、望んでいた結果を得る事ができました。
    一言お礼を言いたくてコメントさせて頂きました^^ 

  50. ヴァリウム男爵 Says:

    ココットさん、はじめまして。

    >望んでいた結果を得る事ができました。

    それは何よりです。:)

Leave a Reply