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-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