준비
WWW::Google::PageRank
Web::Query
두개의 Perl 모듈
1. Blogger 에서 BlogID 얻어내기
Google 에서 제공하는 Blogger API 를 보면, 각 Blogger 블로그에 대한 feed를 얻기 위해, blogID를 알아야 한다. 이를 확인 하는 방법은 아래 두가지를 꼽아 볼 수 있다.
a) 디폴트 feed 페이지( http://blog-name.blogspot.com/feeds/posts/default )에서 id 태그에 blog-'blogID' 형태로 삽입된 blogID 를 얻어내는 방법
b) feedburner 등으로 디폴트 feed 페이지를 변경하여 a) 방법이 불가능한 경우, 블로그 대문 html 파일 하에 item-action 클래스로 묶인 태그 하의 링크 주소에 blogID='blogID' 형태로 삽입된 blogID를 읽어오는 방법
위 두가지 방법으로 이 블로그의 blogID 를 얻어내는 코드는 아래와 같다.
# Blogger계정의 블로그 feed 주소 ( goldbio 부분에 자신의 블로그 주소 앞부분을 넣으면 된다 )
my $blog_add=qq|http://goldbio.blogspot.com/feeds/posts/default|;
# a 방법
wq($blog_add)->find('id')->text=~/blog-(\d+)/;my $id=$1;
# b 방법
wq($blog_add)->find('.item-action')->find('a')->attr('href')=~/blogID=(\d+)/;my $id=$1;
위의 코드에는 Web::Query 를 이용해 html 페이지를 파싱했는데, 이 모듈은 jQuery와 같은 방식으로 태그 이름, 클래스 이름 등을 사용해 간편하게 html 페이지 요소에 접근할 수 있도록 하는데, 같은 기능을 하는 모듈로 pQuery 라는 모듈도 있다. ( 이 모듈은 올해 진행되는 서울 펄 크리스마스 트리에 언급되어 알게 되었는데, jQuery 를 최근에 많이 쓰다보니 다른 모듈들 보다 훨씬 편한 느낌^^)
2. 각 블로그 글의 PageRank 얻어내기
blogID 를 얻어낸 후엔 이를 이용해 해당 블로그의 feed를 아래 주소를 통해 접근할 수 있다.
이 주소로는 대문 페이지에 보이는 글들만 얻어올 수 있기에, 한해 동안의 블로그 글을 얻어내려면 옵션을 추가해야 한다.
&published-min=2011-01-01-T00:00:00 을 위의 feed 주소 뒤에 붙이면 2011년 1월 1일 0시 부터 쓴 모든 글들에 접근할 수 있다. 2011년에 쓴 글들이 꾀나 많다면 &max-results=100000 과 같이 적당한 최대 검색값을 덧붙인다.
www.blogger.com/feeds/$id/posts/default?published-min=2011-01-01T00:00:00&max-results=100000000
위의 주소로 접근하면 이 블로그에 2011년 한 해 동안 업데이트된 글들이 모두 포함된 feed 를 확인할 수 있다. 이제 각 글들의 Pagerank 를 확인하면 된다. 먼저 각 글들의 URL 을 얻어내고, 얻어진 URL 을 WWW::Google::PageRank 를 이용해 확인하면 된다.
글의 URL 은 아래와 같은 형태로 각 블로그 글 마다 삽입되어 있는데,
<link rel='alternate' type='text/html' href='http://goldbio.blogspot.com/2011/09/jquery.html' title='jQuery::이미지 크기 동적으로 변경'/>
여기서 href 아래 주소만 Web::Query 를 이용해 얻어내는 코드는
$feed->find('link')->attr('href') 와 같이 쓸 수 있다. $feed에는 이와 같은 link 가 블로그 글 숫자 만큼 들어 있고, 이를 모두 얻어내야 하므로 코드는
$feed->find('link')->each ( sub {my $i=shift;my $post_link=$_->attr('href');});
와 같이 쓸 수 있다.
주어진 URL 에 대해 아래와 같은 코드로 pagerank를 확인할 수 있다.
my $pagerank=WWW::Google::PageRank->new;
my $pagerank= scalar( $pagerank->get( URL ) ) ;
최종적으로 Feed 페이지를 Web::Query 모듈을 이용해 파싱하여 각 블로그 글들의 URL 을 얻고, 해당 URL 을 이용 Pagerank 를 얻어내는 코드를 종합해 보면 아래와 같이 쓸 수 있다.
## 2011년 블로그 Feed 주소
my $blogger_API=qq|http://www.blogger.com/feeds/$id/posts/default?published-min=2011-01-01T00:00:00&max-results=100000000|;
## 각 블로그 글에 해당하는 Google Pagerank 출력
my $q=Web::Query->new( $blogger_API );
$q->find('link')->each( sub{
my $i=shift;
next if $_->attr('rel')!~/alternate/;
my $post_link=$_->attr('href');
my $post_title=$_->attr('title');
my $post_pagerank=scalar( $pr->get($post_link) );
print "$post_title\t$post_link\t$post_pagerank\n" ;
});
3. 종합
인기 블로거가 아닌 이상, 각 블로그 글들은 아마 대부분의 글의 Pagerank 가 0 일 것이다. (참고로 이 블로그의 모든 글 108개 중 pagerank 가 1 이상인 글은 2개 뿐이다 -pagerank 는 10점이 최고 점수) 그러니 결론적으로 블로그 글 인기순위 메기기에 pagerank 는 부적합해 보인다. 따라서 다른 용도로 pagerank 수치를 적절하게 결합해서 사용하는 것을 추천!