#!/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"; $title EOTAG ; my $page = << "EOP"; $title

htg: $title

サムネイル

サムネイルのURL

グラフ詳細

グラフ詳細のURL

イメージタグ

EOP ; return $page; } sub inputPage { my $this = $_[0]; my $ret = << "EOP";
はてなグラフのイメージタグを貼り付けてください。

EOP ; return $ret; }