はてなブックマークよりタグを取得
#Userdata.pm package Userdata; use strict; use warnings; use XML::FeedPP; use XML::Simple; use Array::Uniq; #http://b.hatena.ne.jp/'.$userid.'/atomfeed?tag='.$tag.'&of=0'; 特定のタグの数を取得 sub allnum { my @arry = @_; my $arrynum = @arry; my $userid = $arry[0]; my $source; my $num; if ($arrynum == 2){ my $tag = $arry[1]; $source = 'http://b.hatena.ne.jp/'.$userid.'/atomfeed?tag='.$tag.'&of=0'; my $feed = XML::FeedPP->new( $source ); if($feed->title() =~ /\s\([0-9]+\)$/){ my $str = "$&"; if($str =~ /[0-9]+/){ $num = $&; } } }else{ $source = "http://b.hatena.ne.jp/".$userid."/rss"; my $feed = XML::FeedPP->new( $source ); $num = $feed->get('opensearch:totalResults'); } return $num; } #最新のブックマークについたタグを10個取得 sub getmaintag { my (@user) = @_; my @tags = (""); my $allnum = allnum(@user); my $userid = $user[0]; for (my $i=0;$i < $allnum;$i = $i+20){ print $i,"\n"; #tagを取得 my $source = 'http://b.hatena.ne.jp/'.$userid.'/atomfeed?of='.$i; my $feed = XML::FeedPP->new( $source ); foreach my $item ( $feed->get_item() ) { my @feedtags = $item->get("dc:subject"); foreach my $tag (@feedtags){ if(defined($tag)){ @tags = uniq sort {"\L$a" cmp "\L$b"} @tags; #重複削除 my $tagsnum = @tags; my $cut = 0; for (my $i = 0;$i<$tagsnum;$i++){ if(lc($tags[$i]) eq lc($tag)){ $i = $tagsnum; $cut = 1; } } if (lc($tag) ne lc($tags[$#tags]) && $cut !=1){ push(@tags,$tag); } } if($#tags >= 10){ #10個タグを取得したら,終わり $i = $allnum; } } } } return @tags; } #ブックマークのタグをすべて取得 sub getalltag { my (@user) = @_; my @tags = (""); my $allnum = allnum(@user); my $userid = $user[0]; for (my $i=0;$i < $allnum;$i = $i+20){ print $i,"\n"; #tagを取得 my $source = 'http://b.hatena.ne.jp/'.$userid.'/atomfeed?of='.$i; my $feed = XML::FeedPP->new( $source ); foreach my $item ( $feed->get_item() ) { my @feedtags = $item->get("dc:subject"); foreach my $tag (@feedtags){ if(defined($tag)){ @tags = uniq sort {"\L$a" cmp "\L$b"} @tags; #重複削除 my $tagsnum = @tags; my $cut = 0; for (my $i = 0;$i<$tagsnum;$i++){ if(lc($tags[$i]) eq lc($tag)){ $i = $tagsnum; $cut = 1; } } if (lc($tag) ne lc($tags[$#tags]) && $cut !=1){ push(@tags,$tag); } } } } } return @tags; } 1;
okok.