2008年03月19日

YouTubeAPIの日付データを変換するサブルーチン

 サーバ移行作業が遅々として進まないくせにこんな記事をアップしたり。

 YouTubeのAPI(http://jp.youtube.com/dev)を使用するとYouTubeにアップされている動画のデータ(タイトルやサムネイルのURL、コメントなど)を取得できますが、publishedやupdatedの値は
YYYY-MM-DDThh:mm:ss.sssTZ
で返ってきます。
(例:2007-06-01T04:32:08.000-07:00)

 これでは長いしわかりにくいのでPerl5で使えるサブルーチンを作りました。
 モジュールTime::Localが必要です。

 ちなみに、YouTubeのデータをニコニコ動画のサムネイルっぽく表示するAPIで使用しています。

 ソース等詳細は追記でどうぞ。

## 時刻変換 YYYY-MM-DDThh:mm:ss.sssTZのデータを変換
sub chg_time{
my %arg =(
TM => '1970-01-01T00:00:00.000+00:00',
TZ => 'JST',
ST => 'jp',
@_,
);
my %Zone = (
GMT => 0,
JST => 9
);
use Time::Local;

my $time = $arg{'TM'};
#日時をローカルタイムに変換YYYY-MM-DDThh:mm:ss.sTZD
$time =~ /([+-]\d\d:\d\d)$/;
my $TZ = $1;
$TZ =~ s/([+-])(\d\d):(\d\d)/$1 . ($2*60+$3)*60/e;
$time =~ s/\.\d\d\d[+-]\d\d:\d\d//;

#GMTに直す

$time =~ /(\d\d\d\d)-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d)/;
my $time1 = timegm($6,$5,$4,$3,($2-1),($1-1900));
my $time2 = $time1;
$time2 += $TZ*(-1);
my($sec,$min,$hour,$mday,$mon,$year) = gmtime($time2 + $Zone{$arg{'TZ'}}*60*60);
my $ltime;
$year += 1900;
$mon += 1;
if($arg{'ST'} eq 'jp'){
$ltime = "$year年$mon月$mday日 $hour:$min:$sec($arg{'TZ'})";
}
if($arg{'ST'} eq 'iso'){
$ltime = sprintf("%04d\-%02d\-%02d %02d:%02d:%02d",$year,$mon,$mday,$hour,$min,$sec) . "($arg{'TZ'})";
}
if($arg{'ST'} eq 'isonoTZ'){
$ltime = sprintf("%04d\-%02d\-%02d %02d:%02d:%02d",$year,$mon,$mday,$hour,$min,$sec);
}
if($arg{'ST'} eq 'isoShort'){
$year = $year - 1900;
$year -= 100 while($year > 99);
$ltime = sprintf("%02d\-%02d\-%02d %02d:%02d",$year,$mon,$mday,$hour,$min);
}
return($ltime);
}


使い方:
 &chg_timeにパラメータを与えて投げます。
  TM => 変換したい日時(ex.2008-03-18T23:26:52.000-07:00)
  TZ => タイムゾーン(ex.JST)
  ST => 出力形式(ex.jp)

例:
print &chg_time(TM=>'2008-03-18T23:26:52.000-07:00',TZ=>'JST',ST=>'jp')

結果:
2008年3月19日 15:26:52(JST)


タイムゾーンは%Zoneに追記することで増やすことができます。
出力形式の対応は以下
 jp:YYYY年M月D日 h:m:s(TZ)
 iso:YYYY-MM-DD hh:mm:ss(TZ)
 isonoTZ:YYYY-MM-DD hh:mm:ss
 isoShort:YY-MM-DD hh:mm


posted by 鯖缶 at 22:04 | Comment(0) | TrackBack(0) | その他 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。