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) 見れたサイトまとめ
編集

2012-03-25

全記事のURLリストを取得2

| 全記事のURLリストを取得2 - Perlメモ を含むブックマーク はてなブックマーク - 全記事のURLリストを取得2 - Perlメモ 全記事のURLリストを取得2 - Perlメモ のブックマークコメント

#!/usr/local/bin/perl
#記事URLのリストを表示

use strict;
use lib qw(./mylib);
use LWP::Simple;
use Encode;
use LWP;
use Web::Scraper;
use URI;

printURLList();  

sub printURLList {
	my $start = 1;
	my $lastPage =  3;  #最終ページを指定
	my $baseUrl = 'http://ameblo.jp/hiroyuki12/';

	for(my $i=$start; $i<=$lastPage; $i++)
	{
		my %hash;

		my $itemnumber = $i;
		my $url = $baseUrl . 'page-' . $itemnumber . '.html#main';

		# WEBページ取得して変数に格納
		my @data = split(/\n/, get($url));  #改行で分解して @dataへいれる
	
		foreach ( @data ) {
			if(/URL<.a>/ && /$baseUrl/) {
				s/<a href=.*?"//g;  #<a href= から " まで除去
				s/".*?a>//g;  #" から a> まで除去
				#print $_ . "\n";  #URLを表示 debug

				# 記事タイトルを myTitle という名前で取るスクレイパーを作成
				my $scraper = scraper {
					process 'h3.title', 'myTitle' => 'TEXT';
				};

				# 記事ページのURLオブジェクトを、
				my $uri = new URI($_);

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

				print encode('utf-8', $res->{myTitle} . "," . $_ . "\n");  #タイトルとURL
			}
		}
	}
	
	return 0;
}

sub Header {
	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>hatenaidea</title>\n";
	print "</head>\n";
	print "<body bgcolor=\"#ffcccc\">\n";
	
	return 0;
}

sub Footer {
	print "</body>\n";
	print "</html>\n";

	return 0;
}

$ perl a.pl

2011-09-21

全記事のURLリストを取得

| 全記事のURLリストを取得 - Perlメモ を含むブックマーク はてなブックマーク - 全記事のURLリストを取得 - Perlメモ 全記事のURLリストを取得 - Perlメモ のブックマークコメント


#!/usr/local/bin/perl
#記事URLのリストを表示

use strict;
use lib qw(./mylib);
use LWP::Simple;
use Encode;
use LWP;

printURLList();  

sub printURLList {
	my $start = 0;
	my $page =  2;  #最終ページを指定

	my $ua = LWP::UserAgent->new();
	for(my $i=$start; $i<$page; $i++)
	{
		my %hash;

		my $itemnumber = $i;
		my $url = 'http://ameblo.jp/hiroyuki12/page-' . $itemnumber . '.html#main';

		# WEBページ取得して変数に格納
		my @data = split(/\n/, get($url));  #改行で分解して @dataへいれる
		
		foreach ( @data ) {
			if(/URL/) {
				s/<a href=.*?"//g;  #<a href= から " まで除去
				s/".*?a>//g;  #" から a> まで除去
				#print $_ . "\n";  #URLを表示

				my $res = $ua->get($_);
				if($res->is_success){
					my $title=$res->title;
					my $len = length($title);
					my $lenBlogName = 29;  #Vine Linux 6(あめぶろ)
					$title = substr($title,0, $len - $lenBlogName);
					print $title . "," . $_ . "\n";  #タイトル

					#$hash{$title} = $_;  #ハッシュに代入

					#print $hash{$title} . "\n";  #URL
				} else {
					print $res->status_line;
				}
			}
		}
	
		

	}
	
	return 0;
}

sub Header {
	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>hatenaidea</title>\n";
	print "</head>\n";
	print "<body bgcolor=\"#ffcccc\">\n";
	
	return 0;
}

sub Footer {
	print "</body>\n";
	print "</html>\n";

	return 0;
}

$ perl a.pl > a.txt

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

最新処理済みアイデア100件のサービスごとの件数

| 最新処理済みアイデア100件のサービスごとの件数 - Perlメモ を含むブックマーク はてなブックマーク - 最新処理済みアイデア100件のサービスごとの件数 - Perlメモ 最新処理済みアイデア100件のサービスごとの件数 - Perlメモ のブックマークコメント

はてなアイデア


はてなアイデア - すべて(実装済 更新順)  終了

#!/usr/local/bin/perl
#最新?件のサービスごとの実装アイデア件数

use strict;
use lib qw(./mylib);
use LWP::Simple;

&Header();  #ヘッダー表示
&printCount();  #サービスごとの実装アイデア件数表示
&Footer();  #フッター表示

sub printCount {
	my $max = 100;  #カウントする処理済みアイデア件数
	my @count;    #それぞれのサービスの処理済件数
	my $page =  $max / 20;
	for(my $i=0; $i<$page; $i++)
	{
		my $itemnumber = $i * 20;
		my $url = 'http://i.hatena.ne.jp/idealist?of=' . $itemnumber . '&st=modified%20desc&status=implemented';
    #print $url . "\n";

		# 取得して変数に格納
		my @data = split(/\n/, get($url));  #改行で分解して @dataへいれる

		my $did;  #サービスの種類
		
		foreach ( @data ) {
			if(/<td class="icon line-left">/) {
				s/<td class=.*?>//g;  #<td class= から > まで除去
				s/<div class=.*?>//g;  #<div class= から > まで除去
				s/&status=.*>//g;  #&status=より後ろを除去
				s/<a href="\?did=//g;  #<a href="\?did=を除去  didの数字だけになる
				$count[$_]++;
				#print $_ . "\n";  #処理済みのアイデアのdidを表示
				#@updates = /\((....-.*?)\)/g;  #配列に日付取得 (????-*)の内側  2008-03-07 03:40:30
			}
		}

		if($i == $page- 1)
		{
			print "最新";
			print $itemnumber + 20;
			print "件のサービスごとの実装アイデア件数<br><br>\n";
			
			my @servicename = ('','','2人力検索サイトはてな','3はてなアンテナ','4はてなダイアリー','5はてなカウンター','6はてなグループ','7はてな検索',
						'8はてなフォトライフ','9はてなブックマーク',
						'10はてなアイデア',	'11はてなツールバー', '12はてな全般', '13はてなウェブサービス(開発者)', '14新サービス', '15はてなRSS', 
						'16はてなグリースモンキー', '17はてなマップ', '18はてなグラフ' , '19はてなリング', '20はてラボ', 
						'21はてなスクリーンショット', '22はてな以外', '23はてなスター', '24はてなメッセージ', '25ポケットはてな', '26はてなハイク', 
						'27はてなワールド', '28はてなキーワード','29新はてなブックマーク',
						'30うごメモはてな', '31新はてなツールバー',
						'32はてなスクリーンショット拡張', '33はてなモノリス', '34はてなココ', 
						'35はてなランド', '36ブログパーツ(ダイアリー・グループ)'	) ;
			
			print "<table>";
			for(my $j=2; $j<37; $j++)
			{
				print "<tr><td>" . $servicename[$j] . "</td>";
				print "<td>" . $count[$j] . "</td>\n";
				print "<td>";
				if($count[$j] > 100)
				{
					for(my $k=0; $k<100; $k++)  {
						print "*";
					}
					print "以下省略";
				}
				else
				{
					for(my $k=0; $k<$count[$j]; $k++)  {
						print "*";
					}
				}
				print "</td></tr>"
				
				#print $servicename[$j] . "<br>\n";
			}
			print "</table><br>\n";
		}
	}
	
	return 0;
}

sub Header {
	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>hatenaidea</title>\n";
	print "</head>\n";
	print "<body bgcolor=\"#ffcccc\">\n";
	
	return 0;
}

sub Footer {
	print "</body>\n";
	print "</html>\n";

	return 0;
}

perl a.pl > a.html

f:id:fedora9:20080920102115p:image