Hatena::Groupperlmemo

Perlメモ

2008年09月18日 より開始
最新5件(RSS 2.0)
古いモジュールの更新

Plagger(Fedora10)
Plagger(Ubuntu9.04)

CPAN::Mini

Remedie(Ubuntu 9.04、Vine4.9(5α)、Fedora11Preview)
Remedie(Fedora10) 見れたサイトまとめ
編集

2008-10-23

含むアンテナの数を取得

| 含むアンテナの数を取得 - Perlメモ を含むブックマーク はてなブックマーク - 含むアンテナの数を取得 - Perlメモ 含むアンテナの数を取得 - Perlメモ のブックマークコメント

$ sudo cpan Web::Scraper


http://a.hatena.ne.jp/include?http://www.dfnt.net/t.html


use strict;
use warnings;
use Web::Scraper;
use URI;

my $scraper = scraper {  # myh1 という名前で取るスクレイパーを作成
    process 'h1', 'myh1' => 'TEXT';
};

my $uri = new URI('http://a.hatena.ne.jp/include?http://www.dfnt.net/t.html');

my $res = $scraper->scrape($uri);  # 先ほどのスクレイパーに渡す。(スクレイピングされる)

$res->{myh1} =~ /\(([0-9]+)\)/;
print $1 . "\n";

$ perl test.pl

6982

2008-10-19

含むアンテナの数を取得

| 含むアンテナの数を取得 - Perlメモ を含むブックマーク はてなブックマーク - 含むアンテナの数を取得 - Perlメモ 含むアンテナの数を取得 - Perlメモ のブックマークコメント

http://perlmemo.g.hatena.ne.jp/fedora9/20081023/p2

はてなアンテナ - アンテナ検索 1271

未登録URLの場合は登録数を調べてサーバーに追加します。

登録済みか否かで背景色変更。(未登録=青)

ブックマークレット(参考)

javascript:window.open('http://hiroyuki12.sakura.ne.jp/hatenaantennaCount.cgi?'+escape(location.href),%20'_blank',%20'width=850,height=310,resizable=1,scrollbars=1');undefined;
#!/usr/local/bin/perl

use strict;
use warnings;
use LWP::Simple;
use Web::Scraper;


my $filename = 'hatenaantennaCounter.csv';

my $formin = $ENV{'QUERY_STRING'};
$formin = shift;
my @indata = split(/&/,$formin);


(my $sec, my $min, my $hour, my $mday, my $mon, my $year, my $wday, my $yday, my $isdst) = localtime();
$year += 1900;
$mon += 1;
my $date =  $year . '/' . $mon . '/' . $mday;


print "Content-type: text/html\n";
print "\n";
print "<html>\n";
print "<head>\n";
print '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">' . "\n";
print "<title>はてなアンテナ合計数取得</title>\n";
print "</head>\n";



foreach(@indata) {
    s/%3A/:/g;
    s/%2F/\//g;
    s/%257E/~/g;
    s/%7E/~/g;
    #s/\?/\\\?/g;



    my $url = $_;
    
    my $flg = 0;

    open(IN,"$filename");# || die('ファイルを追記モードで開けませんでした');
    while(<IN>) {
        chomp;  #改行を削除
        if(/$url,/)  {  #csvに登録済URLの場合 URLに?が含まれていても \? になっているので問題ない
            $url =~ s/\\//g;            
            print "<body bgcolor=\"#ffcccc\">\n";
            print "登録済み " . $_ . ' <a href="http://a.hatena.ne.jp/include?' . $url . '" target="_blank">含むアンテナ</a>' . 
                  ' <a href="http://a.hatena.ne.jp/append?' . $url . '" target="_blank">登録</a>' . "<br>\n";
            $flg = 1;
	}
    }

    close(IN);

    if($flg == 0)  {  #csvに未登録URLの場合
            $url =~ s/\\//g;            
            my $includeurl = 'http://a.hatena.ne.jp/include?' . $url;

				my $scraper = scraper {  # myh1 という名前で取るスクレイパーを作成
					process 'h1', 'myh1' => 'TEXT';
				};

				my $uri = new URI($includeurl);

				my $res = $scraper->scrape($uri);  # 先ほどのスクレイパーに渡す。(スクレイピングされる)

				$res->{myh1} =~ /\(([0-9]+)\)/;
				#print $1 . "\n";

            print "<body bgcolor=\"#ccccff\">\n";	
	    print "登録しました" . $1 . "," . $url . ' <a href="http://a.hatena.ne.jp/include?' . $url . '" target="_blank">含むアンテナ</a>' . 
                  ' <a href="http://a.hatena.ne.jp/append?' . $url . '" target="_blank">登録</a>' . "<br>\n";
	
	    open(OUT,">>$filename") || die('ファイルを追記モードで開けませんでした');
	    print OUT $1 . "," . $url . "," . $date . "\n";
	    close(OUT);
    }
}

print "<br>\n";

print '最近の注目ページ <a href="http://a.hatena.ne.jp/" target="_blank">はてなアンテナ<a>' . "\n";

&PrintRanking();

print "\n";

print "</body>\n";
print "</html>\n";


sub PrintRanking {  #注目のURLを表示
	my $flg2 = 0;
	
	my $url = 'http://a.hatena.ne.jp/';
	my @data2 = split(/\n/, get($url));  #改行で分解して @data2へいれる
	
	foreach(@data2) {        # ループ
		if($flg2==0)  {
			if(/<ol class="ranking">/) {
				$flg2 = 1;
			}
		}
		else {
			if(/<a href=/) { #登録されているURLを取得
				#s/^.{63}//g;  #先頭から半角63文字除去
				s/<a href="\/include.*//g;  # <a href="/include. より後ろを除去
				s/<\/a>/<\/a><\/li>/g;  # </a> を </a></li>に
				s/">/" target="_blank">/g;  # "> を " target="_blank">に
				#m/go\?(.+?)"/i;  # go? と " の間を取得 .+? なので最小マッチ
				#my $temp = $1;
				#$temp =~ s/\d{14}$//g;  #末尾からdigit14文字除去 http://blog.livedoor.jp/kawase_oh/20081006072204 \d {14}
				print $_  . "\n";  #注目のURL
			}
			elsif(/<\/ol>/) {  # </ol> 以降はいらない
				$flg2 = 0;
			}
		}
	}
}

$ perl a.pl http://d.hatena.ne.jp/jkondo/ > a.html

登録済みURLの場合、合計数 URL 登録日を表示。

未登録の場合、はてなアンテナ - アンテナ検索 のデータを取得して()内のデータを取得して表示、登録。

Perlで現在の日付/時刻を取得し処理した上で望みの書式に整形して返してくれるサブルーチン - keiyaの日記@PG - Hatena::Group::Perl

2008-10-04

はてなアンテナカテゴリ別人気URL(2008/10/4)

| はてなアンテナカテゴリ別人気URL(2008/10/4) - Perlメモ を含むブックマーク はてなブックマーク - はてなアンテナカテゴリ別人気URL(2008/10/4) - Perlメモ はてなアンテナカテゴリ別人気URL(2008/10/4) - Perlメモ のブックマークコメント

カテゴリ別人気URL2008/10/4)

(登録ページ数)
芸能・芸術        656,922
ビジネス・経営     78,739
コンピュータ      543,079
ゲーム            188,036
学習・教育        104,496
政治・経済・社会  160,862
グルメ・料理       46,212
趣味・スポーツ 1,080,342
金融・保険         12,418
旅行・地域情報     78,021
医療・健康・美容   44,665
動物・植物         40,409
就職・転職          8,858
科学・統計資料     62,945
はてな            168,298
生活・その他      737,008
カテゴリー未登録  297,382

合計 約 4,301,000

はてなアンテナ

2008-09-30

はてなアンテナのコンピュータカテゴリに登録されているURLを取得

| はてなアンテナのコンピュータカテゴリに登録されているURLを取得 - Perlメモ を含むブックマーク はてなブックマーク - はてなアンテナのコンピュータカテゴリに登録されているURLを取得 - Perlメモ はてなアンテナのコンピュータカテゴリに登録されているURLを取得 - Perlメモ のブックマークコメント

はてなアンテナ - コンピュータ

#!/usr/bin/perl
use strict;
use warnings;
use LWP::Simple;


#my $category = '&c=a';  my $category_maxcount = 14000;
#my $category = '&c=b';  my $category_maxcount = 2400;
#my $category = '&c=c';  my $category_maxcount = 12800;
#my $category = '&c=d';  my $category_maxcount = 4600;
#my $category = '&c=e';  my $category_maxcount = 2600;  #7min
#my $category = '&c=f';  my $category_maxcount = 3000;
#my $category = '&c=g';  my $category_maxcount = 1400;  #5min
#my $category = '&c=h';  my $category_maxcount = 25200;
my $category = '&c=i';  my $category_maxcount = 200;  #1min
#my $category = '&c=j';  my $category_maxcount = 2000;  #5min
#my $category = '&c=m';  my $category_maxcount = 1400; #4min
#my $category = '&c=p';  my $category_maxcount = 1000;  #5min
#my $category = '&c=r';  my $category_maxcount = 200;  #1min
#my $category = '&c=s';  my $category_maxcount = 1200; #3min
#my $category = '&c=t';  my $category_maxcount = 4600;
#my $category = '&c=y';  my $category_maxcount = 18600;
#my $category = '';  my $category_maxcount = 19800;  #nocategory
#$category_maxcount = 200;

my $urlcount = 0;  my $sitecount = 0;  my $over200 = 0;

print "Content-type: text/html\n";
print "\n";
print "<html>\n";
print "<head>\n";
print '<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">' . "\n";
print "<title>hatena antenna</title>\n";
print "</head>\n";
print "<body bgcolor=\"#ffcccc\">\n";

#open(OUT,">out.txt");

(my $sec, my $min, my $hour, my $mday, my $mon, my $year, my $wday, my $yday, my $isdst) = localtime();
print $hour . " 時" . $min . "分 " . $sec . "秒\n";

for(my $page=0; $page <= $category_maxcount; $page+=200)
{
	my $url = 'http://a.hatena.ne.jp/category?of=' . $page  . $category;
	my @data = split(/\n/, get($url));  #改行で分解して @dataへいれる

	my $flg = 0;	my $flg2 = 0;	my $count = 0;

	foreach (@data)         # ループ
	{
		if($flg==0) {  # ol start より前の行
			if(/<ol start="/) {  #<ol start="201">など
				$flg = 1;
			}
		}
		else {
			if(/<a href=/) {
			        m/<a href="(.+)">/i;  #<a href=" と ">の間を取得
				my $username = $1;
				#s/\s+//g;  # スペースを除去

				if($flg2==0)  { # アンテナページのデータを取得
					my $url_simple = 'http://a.hatena.ne.jp/' . $username . '/simple' ;
					my @data2 = split(/\n/, get($url_simple));  #改行で分解して @data2へいれる

					$count++;
					foreach(@data2) {        # ループ
						if($flg2==0)  {
							if(/<ol start="1">/) {
								$flg2 = 1;
							}
						}
						else {
							if(/<a href=/) { #登録されているURLを取得
								#s/^.{63}//g;  #先頭から半角63文字除去
								#s/">.*>//g;  # "> より後ろを除去(target_blank が無い場合)
								m/go\?(.+?)"/i;  # go? と " の間を取得 .+? なので最小マッチ
								my $temp = $1;
								$temp =~ s/\d{14}$//g;  #末尾からdigit14文字除去 http://blog.livedoor.jp/kawase_oh/20081006072204 \d {14}
								print $temp  . "\n";  #アンテナに登録してあるアドレス
								$urlcount++;
							}
							elsif(/<\/ol>/) {  # </ol> 以降はいらない
								$flg2 = 0;
							}
						}
					}
					$flg2 = 0;  #0の時:2つめ以降のアンテナも処理
				}
			}
			elsif(m/\((.+)\)/i) {  # ( と ) の間を取得
			    if($1 > 200)  {
				print "over=" . ($1 - 200) . "\n";
				$over200 += ($1 - 200);
			    }
			    $sitecount += $1;
			}
		}
	}
}

($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime();
print $hour . " 時" . $min . "分 " . $sec . "秒\n";
print "url count=   " . $urlcount . "\n";
print "site count()=" . $sitecount . "\n";
print "over200=     " . $over200 . "\n";
print "             " . $sitecount - $urlcount . "\n";

print "</body>\n";
print "</html>\n";

はてなアンテナ - コンピュータ で、300人以上から登録されているページ