M.C.P.C.

―むり・くり―プラスコミュニケーション(更新終了)


| トップページ |

2008年3月19日 00:01

Yahooブックマークのブックマーク件数取得するスクリプト

このエントリーをはてなブックマークに追加 mixiチェック

livedoor クリップ クリップ件数取得 API

はてなブックマーク件数取得APIとは - はてなダイアリー
のように、プログラムからYahooブックマークのブックマーク件数を取得したいというミッション。

Yahooブックマークのhttp://num.bookmarks.yahoo.co.jp/ybmno.phpをrefererに対象URLをセットしてgetすると、

HTTP/1.1 200 OK
Cache-Control: no-store, no-cache, must-revalidate, max-age=0
Connection: close
Date: Tue, 18 Mar 2008 13:04:15 GMT
Content-Type: text/xml
Client-Date: Tue, 18 Mar 2008 13:04:11 GMT
Client-Peer: 124.83.151.228:80
Client-Response-Num: 1
Client-Transfer-Encoding: chunked
P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"
Set-Cookie: B=xxxxxxxxxxxxx&b=x&s=xx; expires=Tue, 02-Jun-2037 20:00:00 GMT; path=/; domain=.yahoo.co.jp
 
document.write('<a href="http://bookmarks.yahoo.co.jp/url?url=http%3A%2F%2Fblog.dtpwiki.jp%2Fdtp%2F">18')
<!-- bm-num04.ssearch.ogk.yahoo.co.jp uncompressed/chunked Tue Mar 18 22:04:15 JST 2008 -->

のような断片が出てきますので、これから数字をパクります。

Filename: get_yahoobookmarks.pl

#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
 
my $url = 'http://blog.dtpwiki.jp/dtp/';
my $count = get_sbm_yahoo( $url );
printf("%d\t%s\n", $count, $url);
 
exit;
 
sub get_sbm_yahoo {
  my $url = shift;
  my $ua = LWP::UserAgent->new();
  $ua->agent('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)');
  my $req = HTTP::Request->new(
    'GET',
    'http://num.bookmarks.yahoo.co.jp/ybmno.php',
  );
  $req->referer( $url );
  my $res = $ua->request($req);
  my $content = $res->content;
  my $count = 0;
  if ( $content =~ m|document.write\('<.+?">(\d+)| ) {
    $count = $1;
  }
  return $count;
}
 
__END__


後は、これにキャッシュ機構とかつけると完成です!

これは、MacIEだと、http://num.bookmarks.yahoo.co.jp/ybmno.phpから出てくるやつがうまく利用できないくさかったので作る羽目になりました。


(2008-03-20 17.27追記)

Yahoo!ブックマークのブックマーク数を取得するAPI - blog.katsuma.tv [blog.katsuma.tv]

SBMで被ブックマーク数を取得するときに、Y!ブックマークだけscriptタグでimg取得による方法しか見つからなかったのですが、どうにかテキストで取得できないかな、と考えてYahooツールバーのHTTPヘッダを見てたらなんとか分かりました。RESTなAPIがどうやら存在していた模様。こんな風に取得できます。

http://num.bookmarks.yahoo.co.jp/yjnostb.php?urls=調べたいURL

XMLで返ってくるとのこと。こっちの方がrefererむりくりセットしなくてもいいし、かっこいいよね。パースするの面倒だけど正規表現でいいよね。

投稿 大野 義貴 [Perl] | |

トラックバック(0)

トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/2411

コメントする