smashmedia

« 24(シーズン2) | メイン | 24のday2を見終わった »

オトナ買いチェッカー(を作りたい)

自分で作ろうと思ったんだけど作れなかったので、ヘルプをお願いします!

いずれはちゃんと予算を取ってサイトの機能として提供するつもりなんだけど、自分が今すぐほしくてしょうがないので。

要は、オトナ買いで全部揃ったら(メールかRSSで)アラートを飛ばしてくれるツールです。

ブックオフオンラインではオトナ買いのページに必ずこういう感じで購入可能冊数の表示があります。

boo_zaiko

HTMLのソースではこんなふうになってます。

<!--在庫数-->
<div class="GroupSummary"><div class="zaikoleft">在庫あり  17点/全19点</div></div>
<!--//在庫数//-->

だからここをスクレイピングで切り取って、在庫数と全冊数の比較を行ない、同じ(つまり全部揃ってれば)メールやRSSで通知するといいんじゃないかと思ってます。
もちろん定期的にチェックしないといけないので、どっかのサーバからcronで動かさないといけないですね。RSSだとCGI経由で呼び出せばキックするのはクライアント側でできるかな。

とりあえず見よう見まねで Web::Scraper を使って書いてみたんだけど、正規表現で判定するところが動かないんですよね。日本語のままだからだと思うんだけど。

以下、ソースです(注:まるで動かないです)。

use Web::Scraper;
use URI;

my $scraper = scraper {
  process 'div.zaikoleft', 'zaiko' => 'TEXT';
};

my $uri = new URI('http://www.bookoffonline.co.jp/disp/BSfGroupSearchDetail.jsp?groupId=1053%20%20%20%20%20%20');

my $res = $scraper->scrape($uri);

if ($res->{zaiko} =~ /.+ (\d+)点/全(\d+)点+/) {
  $zaiko = $1;
  $all = $2;

  print "zaiko => $zaiko \n";
  print "all => $all \n";

  if ($zaiko == $all) {
    print "You can buy!!";
    # send mail...
  }
}

exit;

「F」のオトナ買いがしたいんだけど、毎日チェックするのはめんどくさくて。きっと他のお客さんも同じだと思うとホントに申し訳ないです。

こうやれば動くよって教えていただけると助かります。

[追記]
iwazerさんに教えていただいて、以下のようにすれば動きました。

otona_checker.pl(UTF-8で保存してください)。

use Web::Scraper;
use URI;
use utf8;

my $scraper = scraper {
  process 'div.zaikoleft', 'zaiko' => 'TEXT';
};

my $uri = new URI('http://www.bookoffonline.co.jp/disp/BSfGroupSearchDetail.jsp?groupId=1053%20%20%20%20%20%20');

my $res = $scraper->scrape($uri);

if ($res->{zaiko} =~ /.+\s+(\d+)点/全(\d+)点/) {
  $zaiko = $1;
  $all = $2;

  print "zaiko => $zaiko \n";
  print "all => $all \n";

  if ($zaiko == $all) {
    print "You can buy!!";
    # send mail...
  }
}

exit;

実行すると、

[admin@sv1 test]$ perl otona_checker.pl
zaiko => 17
all => 19

となります。あとはURL(というかオトナ買いの商品ID)を引数にしてCGIで起動してRSSとして受け取れるようにしたり、あらかじめ登録しておいて毎朝cronでチェックするようにすれば目当てのモノはできると思います!

感想メール

感想を送る感想をメールで送る

トラックバック

この記事のトラックバックURL:

コメント(4件)[コメントだけのRSS]

お久しぶりです。
動作環境が分からないので外しているかもしれませんが、上記のパターンだけでしたら、正規表現を
$res->{zaiko} =~ /(\d+)[^\d]+(\d+)/
こう書けば、目的は達せられるかと。

実行環境がutf-8であれば頭で
use utf8;
と書いておいてスクリプトをUTF-8で保存して、正規表現を
$res->{zaiko} =~ /.+\s+(\d+)点/全(\d+)点/
の様にちょっとだけ直してもいけるかと。

Windowsでしたら、
use shiftjis;
なのかな?これは私のところでは、すぐに確認できないので未検証です(^^;

iwazerさん、ありがとうございます!
動きました!!
これでなんとかなりそうです。本当にありがとうございます!

「F」って六田登のですか?文庫版じゃないですけど、うちに全巻あります。ブックオフで買うぜ!というのならアレですけど、いりますか?

そうそう、六田登の「F」です。昔は持ってたんですけどね。
文庫版で買い直そうかなと思ってます!

コメントを投稿(SPAM以外なら大歓迎です!)

この情報を登録しますか?
コメントへの返信をメールで通知しますか?

(コメント投稿に少し時間がかかることがありますが、クリックは一度だけでOKです)

※質問は掲示板でも受付けています。

関連記事

去年のいま頃に書いた記事(なつかしい!)

Facebookページ

ブログに書くほどでもないこと(とりわけウェブ上のニュースについての感想や評価のコメントなど)はFacebookページに書いています。よろしければこちらもどうぞ。

« 24(シーズン2) | メイン | 24のday2を見終わった »

最近のエントリー

カテゴリー別アーカイブ

月別アーカイブ

過去のダイジェスト(オススメ記事)

  • あわせて読みたい
  • TwitterCounter for @smashmedia
  • track feed
  • この日記のはてなブックマーク数
  • 人気ブログランキング - smashmedia
Related Posts with Thumbnails