#!/usr/local/bin/perl
use strict;
use warnings;
use LWP::Simple;
use CGI;
use URI;
use Date::Simple;
#
# Hatena Graph Snapshot Shooter
# 2006/10/17 Daisuke Motohashi (http://tenguyasiki.jp/)
#
my $filename = "hgss.cgi"; # このファイルの名前
my $baseDir = "cache"; # 画像を保存するディレクトリ。この下にキャッシュページを生成。
my $baseUrl = 'http://tenguyasiki.jp/cgi/hgss/'; # CGIを設置するURL。キャッシュURLの生成に使用。
# ↑ここまで初期値設定
$baseUrl .= $baseDir .'/';
my $charset = "Shift_JIS"; #httpヘッダーに出すcharset
my $cgi = CGI->new;
my $input = $cgi->param('imgtag');
#POSTが無いならフォームを表示すればいい
unless( defined($input) ){
print $cgi->header(-charset=>"$charset");
print inputPage($filename);
exit;
}
$input =~ m/.+href\=\"(.+?)\".+src\=\"(.+?)\".+alt\=\"(.+?)\".+$/g;
my ($href, $src, $alt) = ($1, $2, $3);
#uniq idの生成。といっても日付+時分秒。
my $today = Date::Simple->new;
my ($sec, $min, $hour) = localtime(time);
my $uniq_id = "$today\_$hour$min$sec";
$uniq_id =~ s/\-//g;
#はてなグラフ画像のキャッシュ化
getCacheImgs($src, $baseDir, $uniq_id);
#キャッシュページの生成
open(CACHE, ">$baseDir/$uniq_id.html");
print CACHE cachePage($alt, $href, $baseUrl, $uniq_id);
close(CACHE);
#生成したキャッシュページにリダイレクトして終了
print $cgi->redirect(-url=>"$baseUrl$uniq_id.html");
exit;
#以下は関数
# getCacheImgs($imgsrc_url, $output_dir, $uniq_id)
sub getCacheImgs
{
my ($url, $dir, $id) = @_;
die unless(-w $dir);
getFile($url ,"$dir/$id\.png", 1); #サムネイル
getFile($url."&mode=detail", "$dir/$id\_detail\.png", 1); #拡大画像
}
sub getFile # (uri, outputfile, binmode)
{
my $uri = URI->new($_[0]);
open(OUT, ">$_[1]");
binmode(OUT) if($_[2]);
print OUT get($uri);
close(OUT);
}
# chachePage( title, original_url, base_url, cache_id )
# cache_idはpermalink用の文字列
sub cachePage
{
my $title = $_[0];
my $originalURL = $_[1];
my $baseUrl = $_[2];
my $cacheID = $_[3];
my $cacheDate = Date::Simple->new;
$title .= "( $cacheDate )";
my $imgTag = <<"EOTAG";
EOTAG
;
my $page = << "EOP";

