[perlメモ]楽天ウェブAPIのlastBuildDateを通常日付に変換する方法

先日、「楽天ウェブAPI」の「楽天商品ランキングAPI (version:2009-04-15)」を使ったランキング取得のサンプルプログラムの記事を書きました。

楽天商品ランキングAPIを使ったperlサンプルソース – KUMA TYPE

で、ブログパーツの「track word」をふと見ると「lastbuilddate 楽天 変換」というキーワードでこのページに辿りついてる方がいらっしゃるようなので、lastBuildDateの変換について簡単に書いておきます。

XG001317

そもそも、lastBuildDateとはなんぞや?ということになりますが、これは、下の楽天ウェブサービスの楽天商品ランキングAPIの仕様を見ていただくと詳しくわかりますが、要するに「最終更新時間」なわけです。ランキングの情報は常に最新の情報を提供しているわけではなく、確か2週間毎位の更新頻度だったと思うので、まあ、最後いつ更新されたランキング情報なのかを示している出力パラメータなわけです。

【楽天ウェブサービス】RAKUTEN WEBSERVICE

そして、楽露店のランキング情報でも、この「lastBuildDate」から取得した最終更新時間を下の様に末尾にひっそりと表示してます。しかし、「lastBuildDate」を通常の日付の形式で表示してはないです。「Mon, 04 May 2009 08:39:38 +0900」というおよそ日本人にはなじみ難い表示形式でそのまま表示してます。それはなぜかというと、

【楽天市場】ランキング市場 【総合】 – 売れ筋ランキング情報 – 楽露店

XG001318

めんどくさかったからですw。(お

しかし、変換自体はそんなに大変なことではなく簡単にできます。ここではあんまり必要性がなかったので単に手を抜いていたんですw。

変換には、「HTTP::Date」モジュールを利用すると簡単です。

Browse and search CPAN : HTTP::Date

「str2time」関数を使ってそこにlastBuildDateの値をそのまま渡せば、time関数の戻り値と同じ形式に変換して返してくれます。なのであとはそれをlocaltime関数で処理して、sprintfなどで出力を加工してあげれば自由な形式に変換して表示することなどが可能になります。

簡単なサンプルと実行結果は下記のとおりです。
lastBuildDateの値をstr2timeに渡して
その戻り値をlocaltime関数に渡して、ローカルタイムに変換
あとは、sprintfで整形して出力してます。

#!/usr/bin/perl

use strict;
use warnings;
use HTTP::Date;

my $lt = str2time(‘Tue, 28 Apr 2009 18:30:58 +0900’);
my ($ss,$mm,$hh,$DD,$MM,$YYYY,$WW,undef,undef) = localtime($lt);
print sprintf("%04d/%02d/%02d %02d:%02d:%02d\n",$YYYY+1900,$MM+1,$DD,$hh,$mm,$ss);

 

下が実行結果です。「2009/04/28 18:30:58」という日本人が見やすい形式になってます。

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

F:\TEMP\sample>perl str2date.pl
2009/04/28 18:30:58

F:\TEMP\sample>

 

最後に、この、「lastBuildDate」の値は別に珍しい形式ではなく、ウェブ上で扱われる日付の形式としては標準的なものです、RSSなどに記載されている日付情報などもこの形式で記載されています。ですから、大抵の場合、このstr2timeを覚えておけば対応できると思います。

後、実際には、時間計算する場合に文字列データをtime関数の戻り値と同じ値に変換してくれるので時間の計算には必須になると思います。

タグ :