Google急上昇ワードランキングブログパーツ

GIGAZINEに載っていた「Google急上昇ワードランキングブログパーツ
というサービス。

http://www.blogdeco.jp/google_word/

Google Trends(http://www.google.co.jp/trends/hottrends?sa=X)の結果を
ランキング上昇下降を付加して掲載するサービスらしい。

ちょっと自分でも作れるかやってみた。
実際に使うわけではないので
前回の更新との比較が出るだけのシンプルな作りにした。
本家は1日前とか出せるようだけど
差分ファイルを一つ作るだけで改造できるかと。

#!/usr/bin/perl

use strict;

my $log = 'trends.log';

my @trends;
my @html= `wget -O- -q 'http://www.google.co.jp/trends/hottrends?sa=X'`;

for my $l (@html){
if($l =~ m/num>(\d+)\..*X\">(.*)<\/a>/){
push(@trends,"$1\t$2\n");
}
}

my $outtxt;

if( -e $log ){
open my $fh , "<$log" or die ($?);

my @logtrends = <$fh>;

for my $t (@trends){
chomp $t;
my $rank;
my $word;

if($t =~ /(.*)\t(.*)/){
$rank = $1;
$word = $2;
}else{print "cant read $log";exit;}
my $logrank;
my $logword;

my $flag=1;
for my $logt (@logtrends){
chomp $logt;
if($logt =~ /(.*)\t(.*)/){
$logrank = $1;
$logword = $2;
}else{print "cant read $log";exit;}

if($logword eq $word){
my $diffrank = $logrank - $rank;

if($diffrank > 0){
#up
$outtxt .= $t . "\t" . "$diffrank UP!\n";
$flag = 0;

}elsif($diffrank < 0){
#down
$outtxt .= $t . "\t" . "$diffrank DOWN!\n";
$flag = 0;

}elsif($diffrank == 0){
#not change
$outtxt .= $t . "\t" . "-\n";
$flag = 0;

}
}
last if($flag == 0);
}
if($flag == 1){
$outtxt .= $t . "\t" . "NEW!\n"
}
}
}else{

open my $oh ,"> $log" or die($?);
print $oh @trends;
exit;
}
open my $oh ,"> $log" or die($?);
for my $oline (@trends){
print $oh $oline . "\n";
}
print $outtxt;