ニンテンドーDS Lite が発売になりました。ニンテンドーDSから機能的にはまったく変わらないにも関わらずものすごい人気のようです。
「ニンテンドーDS Lite」発売。秋葉原では2店舗に集中し、前夜から行列 - GAME Watch -
任天堂株式会社は3月2日、携帯ゲーム機「ニンテンドーDS」の上位バージョンとなる新機種「ニンテンドーDS Lite」を発売した。発売前から品薄が噂されていただけでなく、カラーバリエーションのアイスブルーとエナメルネイビーが発売直前になって11日に延期したこともあり、各店舗に問い合わせが寄せられ、各地で行列ができあがった。
この様子じゃ普通に買うのは無理っぽいですね。そんなに並んでもいられません。Amazonでも一昨日までは商品ページすらなかったのに、昨日はページが出現してました。でも買えない状態です。一瞬で売り切れてしまったのか、それともページができただけで販売は始めてないのか。
いずれにせよ、販売の再開を待つことにしましょう。以前作った
Amazonの予約開始監視スクリプトでは、予約可能の状態しかチェックしてませんでしたので、通常販売の状態になっても通知するように修正しました。変更箇所を赤字で示しています。前回も書いたように、Webページを解析して判定する、とってもアドホックで汎用性がまるでない、信頼性もないスクリプトです。あくまで使い捨てです。スクリプトの中身が理解できない人は実行しないでください。
#!/usr/bin/perl
my $usage = "usage: $0 ASIN-No mail-addresses";
use strict;
use LWP::UserAgent;
use Jcode;
# Amazon商品ページのURL
my $amazon_url = "http://www.amazon.co.jp/exec/obidos/ASIN/";
# HTTP用
my $proxy; # proxyが必要な場合はここで設定
# コマンドのパス
my $sendmail = "/usr/lib/sendmail";
my $nkf = "/usr/local/bin/nkf";
# 引数としてASIN、送信先アドレスを受け取る
die "$usage\n" if (@ARGV <= 1);
my $asin = $ARGV[0];
my $recipient = $ARGV[1];
# 商品ページのURLを組み立てる
my $request_url = $amazon_url . $asin;
# HTTPでページを取得する
my $ua = LWP::UserAgent->new;
$ua->proxy('http', $proxy) if ($proxy); # proxyを設定
my $res = $ua->get($request_url);
# SJISで記述されているので、EUCに変換。
my $doc = Jcode->new($res->content,'sjis')->euc;
# タイトルを取得する
my $title;
if ($doc =~ m|<title>(.*?)</title>|is) {
$title = $1;
}
# 予約注文可能かどうかを判定する
my $order = 0;
$order = 1 if ($doc =~ m/予約注文できます/);
$order = 1 if ($doc =~ m/pre-order-notched\.gif/);
$order = 1 if ($doc =~ m/add-to-cart-notched\.gif/);
# メールの内容
my $message = << "EOF";
Subject: Amazon予約/注文可能通知
To: $recipient
$titleが予約/注文可能です。
EOF
# 予約注文可能ならメッセージを表示する
if ($order) {
# 1度だけ送るようにするため、/var/tmp/[ASIN]にファイルを作る
my $filename = "/var/tmp/$asin";
if (! -e $filename) {
# メール送信
open F, "|$nkf|$sendmail $recipient";
print F $message;
print $message;
close F;
# 1度だけ送るようにするため、/var/tmp/[ASIN]にファイルを作る
system("touch $filename");
}
}
これをamazon-order.plという名前で保存して次のように起動すると、ASINのアイテムが予約もしくは注文可能であった場合に、指定したメールアドレスにメールを送信します。注文可能でなかった場合には何もしません。一度メールを送信したら、もう一度起動しても何もしません。
perl amazon-order.pl ASIN mail@address,k-tai@address
これをcrontabに入れて、適当な間隔で定期的に実行すると、注文可能になった時点でメールが来るというわけです。あまり頻繁に実行しないようにしましょう。また、用が済んだら手動でcrontabから削除し、/var/tmp にできたファイルを削除することを忘れないでください。
著者の方からOsaskWikiにてコメントを頂きました。
http://wiki.osask.jp/?HariboteOS%2Fcomments
ありがとうございます。