xmlrpcブログ投稿時の投稿時刻指定
あいもかわらずxml-rpcで遊んでいる今日この頃(生活も厳しくなってきたT_T)。ブログ投稿時に、投稿時刻をプログラムを動作させたその日時以外を指定したい場合が出てきた。つまり、例えば「投稿日時を過去の日付を指定したい」といった具合だ。iso8601のフォーマットがどうとかこうとか書いてあるウェブサイトはいっぱい見つけたけど、「じゃぁ、実際どうすりゃいいのよ!」というところで放置していた。
今日ふと思い立ってやってみたら、簡単に出来た。でも忘れそうなのでメモしておく。ちなみに使用するのはxmlrpc.inc(http://phpxmlrpc.sourceforge.net/)。
まず実際のデータから。記事投稿時はもちろんXMLでサーバにデータを送るわけだが、そこはこんなXMLになる。
<dateTime.iso8601>20060418T21:00:21<dateTime.iso8601>
上記の真ん中のデータはUTC指定で、日付(年月日)と時刻(時:分:秒)を「T」でつないだもの、ということになる。2007年12月31日23時59分59秒なら
「20071231T14:59:59」
という値が入るはずだ(日本は9時間早いのだからUTCの時刻表記では9時間引いておく)。
これを手動で計算するのが一番いい。ちなみにPHP5ではiso8601フォーマットで日時を返すdate関数のオプションが用意されているらしいのだが、自分の環境は全てPHP4なので、ここでは使えない。でもxmlrpc.incには相応の関数が用意されていた。こんなの。
function iso8601_encode($timet, $utc=0)
戻り値はUTCの時刻だ。引数$timetは自分が指定したい日時のユニックスタイムスタンプ値。これを直接UTCで指定した場合は次の引数$utcに1を指定する。デフォルトは0で与えられたタイムスタンプから自動的にUTCに変換した値が返される。簡単お手軽関数だ。
でも、実は注意が必要で、サーバの「タイムゾーンのオフセット秒数」を使っているので、海外サーバで日本向けサービスを・・・なんて場合にはヘンテコリンな時刻になってしまう。どうせなら
function iso8601_encode($timet, $offset=0)
みたいにして、オフセットの時刻で指定できるようにすればよかったのに・・・。てことでここの関数は簡単なので、すぐ自作してしまおうっと。