cronを使わずに(ほぼ)指定日投稿をする

2006年8月13日
従来版をFlash Player 9に対応させました。

2006年8月11日
Flashを使わずに、JavaScriptから指定日投稿を実行するプラグインも公開しました。

Movable Type 3.1xには、エントリーの投稿を予約しておいて、指定した日に投稿する「指定日投稿」という機能があります。
ただ、Movable Typeのヘルプでは、指定日投稿は「cron」と組み合わせて使うという記述があります。

※cron=UNIXの機能の1つで、定期的に何らかの処理を行うもの

ところが、レンタルサーバーでは、cronを使うことができないところも少なくありません。
例えば、当方はロリポップを使っていますが、ロリポップではcronは使うことができません。
cronを使えないために、指定日投稿をあきらめたという方も、結構いらっしゃるのではないかと思います。

そこで、cronの代わりに、Blogの読者の方々がアクセスしてきたときに、指定日投稿を行うという仕組みを考えてみました。これなら、cronを使うことができなくてもOKです。

なお、動作原理上、指定日時ぴったりに投稿が行われることはほとんどなく、ある程度のタイムラグが生じます。
また、誰かがBlogにアクセスしてくれないと、投稿が行われないことになります。アクセス頻度の低いBlogや、アクセスが少ない時間帯(深夜など)では、なかなか投稿が行われないこともあり得ます。

利用手順は以下の通りです。

必要なファイルのダウンロードと解凍

まず、以下のリンクをクリックしてファイル一式をダウンロードし、そのファイルを解凍しててください。

period.zip

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

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

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

なお、「mt-period.cgi」の先頭にParlのパスを指定する行があります(#!/usr/local/bin/perl)。
これはお使いのサーバーに合わせて変更してください。

ファイルのアップロード

zipファイルを解凍すると、4つのファイルができます。以下のようにアップロードしてください。

ファイル名アップロード先パーミッション
mt-period.cgiMTのディレクトリ755
period.swfMTのディレクトリ644
period-last.txtMTのディレクトリ646
URLEncodeContainer.plpluginsディレクトリ644


「MTのディレクトリ」は、Movable Typeをインストールしたディレクトリ(mt-xxx.cgiやmt.cfgがあるディレクトリ)を指します。
また、「pluginsディレクトリ」は、MTのディレクトリの中にある「plugins」ディレクトリを指します。

Flashの表示

ご自分のBlogに、アップロードしたFlashを表示するためのHTMLを入れます。
表示先のテンプレートを開き、Flashを表示したい位置に以下を追加してください。

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
  codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,79,0"
  id="period" width="80" height="15">
  <param name="movie" value="<$MTCGIPath$>period.swf?url=<MTURLEncodeContainer><$MTCGIPath$></MTURLEncodeContainer>">
  <param name="bgcolor" value="#FFFFFF">
  <param name="quality" value="high">
  <param name="loop" value="false">
  <param name="menu" value="false">
  <param name="scale" value="exactfit">
  <param name="allowscriptaccess" value="always">
  <embed type="application/x-shockwave-flash"
   pluginspage="http://www.macromedia.com/go/getflashplayer"
   width="80" height="15"
   name="period" src="<$MTCGIPath$>period.swf?url=<MTURLEncodeContainer><$MTCGIPath$></MTURLEncodeContainer>"
   bgcolor="#FFFFFF" quality="high"
   loop="false" menu="false"
   scale="exactfit"
   swLiveConnect="true" allowScriptAccess="always"
  ></embed>
</object>

なお、上記のHTMLは、表示頻度の高いテンプレートに入れることをお勧めします。
一般的なBlogでは、メインインデックスと個別アーカイブの表示頻度が高いと思われますので、それらのテンプレートに入れると良いでしょう。

日時の指定

ここまでの作業を行うと、これ以後は指定日投稿を行うことができるようになります。
エントリーの入力の画面で「作成日時」の欄を未来の日時にし、その上の「投稿の状態」の欄を「指定日」にして、エントリーを保存します。

2005年5月18日追加

CGIの動作

このプログラムでは、Flashから「mt-period.cgi」というCGIを起動し、そのCGIから指定日投稿のプログラム(MTのrun-periodic-task)を実行するという仕組みをとっています。
ただ、run-periodic-taskは結構重い処理で、頻繁に実行するとサーバーに負荷がかかる恐れがあります。
そこで、直前に実行されてから10分以上経過していないときは、実行しないようにしています。

Flashの表示

Flashでは、このプログラムの動作状況を以下のように表示するようになっています。
表示内容
黄色の●に「Waiting」mt-period.cgiを実行して、その結果が返ってくるのを待っている状態。
緑色の●に「Worked」指定日投稿のプログラムが実行された状態。
青色の●に「Passed」直前に指定日投稿のプログラムを実行してから10分経過していないので、実行をパスした状態。