AppleStoreから在庫状況を取得する

TL;DR

https://www.apple.com/jp/shop/retail/pickup-message?parts.0={製品の型番} でjson形式で取得できます。

はじめに

どうしてもPowerbeatsProが発売日当日に欲しかった

Apple傘下のBeats by Dreから7月19日Powerbeats Proという完全ワイヤレスイヤホンが発売されました。 特徴としては、
  • 左右独立Bluetooth接続のイヤホン
  • 専用ケースに入れるだけで充電(24時間持つ)
  • 新型AirPodsと同じチップを採用している
  • iPhone・iPad・Apple TVなどに瞬時に接続・切り替えができる
  • カナル型
  • 色が黒
などなど…AirPodsの個人的購入躊躇ポイント(色が白、カナル型じゃない)を克服してなおかつBeatsの新作イヤホンなのでこれは発売まで待つぞ待つぞ待つぞという感じで1ヶ月以上ウォッチしてたわけです。 そして発売日に先駆けた、1週間前の7月12日に大手家電量販店(ビックカメラ・ヨドバシカメラなど)で予約が開始されたのですが…
人気すぎて家電量販店経由は「メーカーに問い合わせ中」、AppleStore経由でも注文してから3週間待ちと大変な状態になっていたのです。(そもそも海外の品薄の影響を受けて日本の発売が2ヶ月延期されてた) しかし、Apple製品には「ピックアップ」というどんなに人気でも発売日当日に手に入る謎制度が存在します。
これは、発売日当日の朝にAppleStore(Web)に突然在庫が降ってきて、それをAppleStore受け取りにすると他の人の予約をすっ飛ばして当日に手に入るというものです。
このピックアップの在庫というのはかなり少ないらしく、6週間待ちだった「AirPods」の発売日には3分で無くなったとかなんとか。
なんでか分からないけど発売日当日に欲しかった僕は、なんとかして在庫の情報を瞬時に入手して当日に入手したかったのです。

取得方法

APIがあったのでそのまま使いました。
(Chromeの開発者ツールでNetworkのタブを眺めてたら見つけた) https://www.apple.com/jp/shop/retail/pickup-message?parts.0=MV6Y2PA%2FA&searchNearby=true&store=R224 parts.0=MV6Y2PA%2FAが製品の型番(MV6Y2PA/A)、searchNearby=trueが周辺のストアの情報も一緒に取得するかどうか、store=R224がAppleStore表参道のストアIDです。 あとはこれをごにょごにょしてtraQ(サークル内の独自SNS)にwebhookで投稿するようにしたら在庫が監視できますね。
Rubyで15分くらいで書きました。 あとはこれを自鯖のcronで定期的(5分おきとか)に実行するだけです。

実践

ピックアップの在庫更新は6時ぐらい説と8時ぐらい説と10時ぐらい説があったので、頑張って発売日当日の5時50分に起きて監視してました。
転機があったのは7時50分ごろ、三週間待ち(8月10日)だった在庫が本日になりました。

(Twitterでは同じくウォッチしてる人がいたりしてちょっとしたお祭りになってた。)
11時あたりから元に戻りはじめ、12時には通常状態(3週間待ち)に戻りました。

結果

果たしてピックアップで当日分の在庫を無事に確保できたのかというと… AppleStoreで買ってません() 実は予約開始日にすばやく予約を済ませてたおかげで、発売日当日に届くことが当日6時の段階で判明したからです。
(あと2時間予約が遅かったら「メーカーに問い合わせ中」になってたらしい…) というわけで別にこんなことしなくても発売日当日に手に入ったとさ。
おしまい。