「ほぼ」指定日投稿(JavaScript版)

2008年5月25日 さらに改良したバージョン2.10を公開しました

2.10をお使いください。

2006年10月4日 Ajaxを使ってFlashと同様の表示ができるように改良しました。

Movable Typeには「指定日投稿」の機能があり、指定した日時に自動的にエントリーを投稿することができます。
ただし、そのためには指定日投稿のスクリプトを定期的に実行する必要があります。
cronを使えないサーバーだと、スクリプトを定期的に自動実行することができません。

そこで、以前から「ほぼ」指定日投稿というプログラムを公開していました。
Blogのテンプレートに、指定日投稿のスクリプトを呼び出すためのFlashを入れておき、Blogにアクセスがあったときに、そのFlashによってスクリプトが実行されるという仕組みです。

ただ、Flash Player 9ではこのFlashがうまく動作しないとの報告をいただいています。
そこで、Flashを使わずに、JavaScriptを使うタイプのプラグインを作りました(Movable Type 3.2以降に対応)。

1.プラグインのダウンロード

まず、以下のアドレスからプラグインのファイルをダウンロードします。

RunPeriodicTasks_2_01.zip

プラグインの継続的な開発やサポートのために、プラグインをご利用された方は、ドネーション(寄付)を行っていただけると幸いです。
ドネーションの方法は、こちらのページをご参照ください。

また、このプラグインの他にも、いくつかのプラグインを配布しています。
配布中のプラグインは、Movable Type Plugin Directoryのページをご参照ください。

Movable Typeのプラグイン開発等のドキュメント「Movable Type Developer's Guide Volume 1」も販売しています。
ご自分でプラグインを作ってみたい方に、ぜひお勧めしたい一冊です。
詳細は特設ページをご覧ください。

ファイルを解凍すると、「RunPeriodicTasks」と「image」の2つのフォルダができます。
「RunPeriodicTasks」フォルダを、Movable Typeの「plugins」ディレクトリの中にアップロードします。「image」フォルダはそのままおいておきます。
そして、RunPeriodicTasksディレクトリ内の「mt-run-periodoc-tasks.cgi」のパーミッションを755等に変えて、実行可能にします。

なお、MTの文字コードの設定をutf-8以外にしている方は、その文字コードに変換してアップロードします。

2.Ajaxを使わない場合のテンプレートの書き換え

Ajaxを使わない場合は、メインページやエントリーアーカイブなど、表示頻度が高いページのテンプレートで、ほぼ指定日投稿の結果を表示したい位置に以下のタグを入れます。
このタグはJavaScriptに変換され、そのJavaScriptからほぼ指定日投稿のCGIが呼び出されます。

<$MTRunPeriodicTasksJS$>

なお、このタグはページの最後に近い箇所(サイドバーの最後の方など)に入れることをお勧めします(CGIの実行が終わるまで、ページの表示が進まないため)。

2.Ajaxを使う場合のテンプレートの書き換え

Ajaxを使う場合は、以下のような手順を取ります。

・prototype.jsの入手
まず、以下のサイトからprototype.jsを入手し、Blogの出力先ディレクトリにアップロードします。

Prototype JavaScript Framework

・テンプレートの書き換え
メインページやエントリーアーカイブなど、表示頻度が高いページのテンプレートを開きます。
そのテンプレートのヘッダー部分に、以下のタグを入れます。

<script type="text/javascript" src="<$MTBlogURL$>prototype.js"></script>

また、ほぼ指定日投稿の結果を表示したい位置に以下のようなタグを入れます。
このタグはJavaScriptに変換され、そのJavaScriptからほぼ指定日投稿のCGIが呼び出されます。

<div id="run_periodic_tasks"><p>Now running periodic tasks...</p></div>
<$MTRunPeriodicTasksJS ajax="1" tag_id="run_periodic_tasks"$>

なお、Ajaxを使わない場合と異なり、このタグはテンプレートのbodyタグ内のどこにでも入れることができます。

4.指定日投稿を行う

後は、エントリーを書く際に「公開の状態」を「指定日」に設定し、「エントリーの投稿日時」を未来の日時にして保存するだけです。
指定の日時を過ぎた後に誰かがBlogにアクセスすると、「ほぼ」指定日投稿のCGIが実行され、エントリーが投稿されます。

ただし、指定日投稿のスクリプトを頻繁に実行すると、サーバーに負荷がかかります。
そこで、「ほぼ」指定日投稿のCGIでは、指定日投稿のスクリプトを一度実行すると、その後15分経過するまでは、指定日投稿のスクリプトを実行しないようにしています。

5.「ほぼ」指定日投稿の実行結果の表示をカスタマイズする

「ほぼ」指定日投稿のCGIが実行され、そこから指定日投稿のスクリプトが実行されると、scriptタグを入れた位置に「OK」と表示されます。
また、指定日投稿のスクリプトを一度実行してから15分経過していないうちに、指定日投稿のCGIが再度実行されると、scriptタグの位置に「Skipped」と表示されます。

この表示を変えることもできます。
Blogのメニューで「環境設定」の「設定」をクリックして設定のページを開き、「プラグイン」のタブに切り替えます。
プラグインが一覧表示されますので、「Run Periodic Tasks」のところの「設定を表示」をクリックします。
これで、指定日投稿のスクリプトが実行されたときと、その実行がスキップされたときに表示する内容を設定することができます。

なお、プラグインのファイルを解凍したときに「image」というフォルダができましたが、そのフォルダには、指定日投稿スクリプトの実行結果に対応したボタンの画像があります。
その画像を表示するように設定すると良いでしょう。