Week17は、Cross Box Logo Tee(クロスボックスロゴTシャツ)のリリースがありました。その他にMariah Carey Tee(マライア・キャリーTシャツ)、Chucky Doll(チャッキー人形)がリリースされました。StockXを確認すると、どれもプレ値になっている状態でした。
個人的には、クロスボックスロゴのTシャツ、チャッキーあたりが欲しいと思いました。
前回からの改良
前回も「High Traffic」エラーによって失敗となりました。今回は大幅に改良し、モバイル型、リクエスト型の実装おこなって挑戦です。モバイル型への対応は現在のPC型を流用できるため、それほど手間はかかりませんでしたが、リクエスト型の実装が厄介でした。
リクエストを直接送る方法となると、最後のチェックアウト画面のreCAPTCHAをバイパスする必要があります。もちろん、reCAPTCHAをすり抜ける方法などなく、認証おこなってトークンを取得する必要があります。Googleアカウントにログインすることで、認証が表示されづらくなりますが、これも結局はGoogleのreCAPTCHAサーバにアクセスし、トークンが取得されています。
そこで必要になったのは、チェックアウトリクエストを送る際に、reCAPTCHAトークンを動的に取得するプログラムです。まず、reCAPTCHAの仕組みを説明すると、Supremeなどサイト毎にサイトキーというユニークなキーが割り当てられており、このキーと現在表示しているサイトのドメインを判別し、トークンが取得されます。reCAPTCHAトークンを取得するには、ブラウザからのアクセスが必須になるということですね。
そうなるとプログラム上から動的にトークンの取得をおこなうことが難しいため、ブラウザを制御し、トークンを取得する必要があります。その他にreCAPTCHAを解決するためのサービスを利用することになります。有名なのは、2Captchaというサービスです。これはreCAPTCHAのサイトキーとURLを送るだけで、人力で誰かが認証を突破してくれて、トークンが返ってくるサービスです。
もちろん人力で解決しているため、送ってからトークンが返ってくるまで数十秒かかりますので、必要なときに呼び出すのでは使いものになりません。
ではどうするかということ、reCAPTCHAトークンの有効期限は2分間あるため、事前に解決したトークンを保存しておき、2分毎に取得し直すという方法が良いと思いました。ということで、今回reCAPTCHAトークンを取得する2種類の方法を実装しました。
- ブラウザを制御し、reCAPTCHAの認証を自動化する。ただし、繰り返しているとBot認定され画像認証が必要になるため、手動も必要となる。
- 2Captchaを利用し、事前に取得したトークンをストックしておく。
ブラウザ型でトークンを取得しつつ、2Captchaで取得したトークンも同時にストックしていくイメージですね。
リクエスト型の実装もなんとかギリギリ終えましたが、突貫工事の内容となったので、かなりあやしいですね…。直前でのテストでは無事オーダーは通りましたが、アクセスが集中したときにどうなるか未知数です。今週は、Supremeの抽選Botの改良も必要となり、結構バタバタしてしまいました。
今回の結果
結果は、PC型のBotはいつものように「High Traffic」エラーが連発し、買うことはできませんでした。しかし、今回実装したモバイル型で、チャッキー2体、クロスボックスロゴTシャツ3枚を買うことができました。リクエスト型は動作が安定せず、上手く動作させることができませんでした。一部リクエストが通っておりましたが、503エラー、「High Traffic」エラーとなっていました。
モバイル型もリトライエラーでバグがあり、強制終了してしまったので、初動以外で動作させることができませんでしたが、上手くリトライ処理が動いていれば、もう少し買えたかもしれません。今後は、安定化と希少サイズも買えるようにもっと改良していきたいです。
しかし、これで沼からようやく抜け出せた気がします。モバイルの方が買いやすいというのは間違いないようです。今後また対策されるかもしれませんが、PC型、モバイル型、リクエスト型を並行で動かして様子見です。
現状だとモバイルサイトの方が買いやすいため、手動でチャレンジしている方は、モバイルサイト経由で購入することをおすすめします。ちなみにPCからモバイルサイトにアクセスするURLは、https://www.supremenewyork.com/mobile のような感じで後ろに「mobile」を付けると良いです。また、白い画面になった場合、アクセス集中で503エラーになったためだと思われるので、リロードを繰り返せば表示されるのではないかと。
自分の分は、チャッキー1体となり、頼まれた分のクロスボックスロゴTシャツのみ買えた状態でした。今回はテストのためすべて無料で代行いたしました。店舗抽選に当選していたため、まだ間に合いそうなので、久しぶりに店舗に行ってみることにしました。順番は、全体の真ん中あたりで微妙です。Tシャツで数が多そうだったのでいけるかと思いましたが、白・黄・赤が残っている状態で、サイズも欠けていました。それほど多くなかったようです。
店に入るとちょうど雪が降ってきて、スタッフがはしゃいでおりました。噂通り接客もだいぶ良くなってましたね…。
「High Traffic」エラーでかなり悩まされていましたが、少し考えすぎだったようです。もっと早く今回のような対応をしていれば、時間を無駄にせず済みました…。
reCAPTCHA対応のプログラムも出来たので、これからはもっと対応サイトの幅も広げていけそうです。とりあえずは、汎用性の高いShopifyあたりに力入れたいところです。あとは、Electronが面白そうなので、試しにアプリ化したNew BalanceのBotを販売しようか検討中です。需要があるかは謎ですが…。
コメント
初めまして、私も今期から自分用に趣味と勉強がてら自作 bot の開発に挑戦していて、最近この開発日記を見つけて興味深く読ませて頂いております。
自分の場合は完全に自分用で仮想環境やプロキシなどは全然考えていないオレオレ環境なので遠く及びませんが、リクエスト型の処理の話や “Due to high traffic …” の話などは全く同じようなタイミングと境遇だったのですごく共感できました。
私もいつかは仮想環境やプロキシに挑戦したいなと思っているので、もしよかったらそういうノウハウを記事にしてもらえると大変嬉しいです。とはいえ、記事を書くのも大変かつ企業秘密な部分もあると思いますので一読者の要望として軽く受け止めてもらえたらと思います(笑)
自分はこれから reCAPTCHA対応を検討しようと思っていて、この記事の手法も参考にさせて頂こうと思います。
これからも楽しく拝見させて頂きますので引き続き開発頑張って下さい!
はじめまして、読んでいただきましてありがとうございます!
high trafficの問題は多くの方が悩まされている問題ですよね…。
仮想環境、プロキシの話になるとかなり専門的な内容になってしまいますが、プロキシ構築を自動化する方法なども紹介できればと思います。
記事にしてしまうと自分に影響が出てしまうこと意外は書いていくつもりですので、これからもよろしくお願いいたします_(._.)_
ありがとうございます、記事楽しみにしています!
私の bot 作成のモチベーションは買いたい商品を自力で買えるようにするというだけなので、usagi-bot さんのように開発だけでなく、代行を請け負ったり、記事にまとめたりしているのはちゃんとしててすごいなって思います。
自作の方が鳴かず飛ばずな状況の際は代行依頼させて頂くと思うので、今後も応援してます!