楽天市場の中身がガラッと変わりました

楽天の自動購入ツールを作ったのは、BOT制作し始めの時期だった2017年にまで遡ります。

楽天市場のHTMLを見ると、サーバサイドがJavaで書かれていてサーバサイド主導のコードで、SPAフレームワーク(React、Angular、Vue.js)が使われていない、単純なDOM構造をしているサイトでした。これまでは細かな変更はあるものの、一度も大きな修正はありませんでした。

1~2年前ぐらいからログイン画面が変わって、いよいよ変わり始めるのかな?と思っていたのですが、それでもログインは従来と変わらずPostリクエストで通信できていたので、BOT開発側としては修正する必要が無くホッとしていたものでした。

楽天スーパーセールで破竹の勢いだった時代もあったのですが、とある仕様を楽天も気が付いたのか蓋を塞がれてしまい、それ以降はスピード重視をしたところで確実に取れるというものでは無くなってしまいました。

Emperor AIOの利用数も減ってきていたので、また楽天自動購入BOTとして単品販売を考えていた矢先のこと、Emperor購入希望者からの問い合わせで「楽天は動きますか?」と言われて、ただ単に利用者が減ったから使われていないだけだと思い「動きますよ!」と答えたのですが、いざ動かしてみるとカート画面から先に遷移できなくなっていました。

勿論、動くことを目的として購入して頂いているので対応する必要があるので、すぐさま調査したのですが、SPAフレームワーク(React、Angular、Vue.js)の構造に変わっており、HTTP通信だけで何とかなるものでは無くなっていました。

ログインも見た目は1~2年前と変わらないですが、中身は全然別物です。というよりもブラウザで動かす部分は既に変わっていたのかもしれませんが、もう今はPostリクエスト(ログインIDとパスワードをHTTP通信で送信)でログインできる代物では無くなっていました。

今の流行りはSPAフレームワークであるし、構造も複雑になっているので、BOT対策としても有効なので、これからも増えていくと思います。今後は、BOT開発もSPAフレームワークに寄り添ったものが主流になっていくのだと思います。

来週には楽天スーパーセールも始まるので、それまでには楽天市場の処理だけでも完成させますが、BOTを使ったスーパーセールでどこまで結果を出せるのか気になるところではあります。

2025/09/02追記
おととい新仕様に対応したBOTを動かしたユーザからの問い合わせで、動かないと言われて調べたところ、前の仕様に戻っていました。なのでBOTも前のバージョンに戻したら動きました(笑)

楽天、何してんだろ??

ローチケとぴあのアップデート

ローチケは、以下の画面の券種に完全対応ではないですが、対応しました。このページはスマホのみの販売である点と、

スマホの場合は、イベント参加券というのが購入途中しか見えないので、おおよその対応となっています。

必要のない券種については、0を指定してください。

ぴあのアップデートは、本体ではなくチケット大相撲の方です。

自動ログイン処理を改修しました。

ちゃんと動きますので、是非購入ください!

必死で作っています(やっと終わった)

以前もEmperor AIOと連携するAndroidアプリのOTP連携ツールを作っていましたが、新型を作成しています。

自動動作におけるOne Time Passwordの連携をこのAndroidアプリが担ってくれます。

iOS版も開発予定ですが、iOSの制約で全自動はできないようで、ワンタップは必要なようです。Androidアプリをリリース後に投入します。

近々、Relief Ticket自動購入を投入予定です。お楽しみに!!

2025/8/10追記
Google Play公開のための審査動画に使用した動画を公開します。
アプリは前面で起動している状態で、画面OFFになっている状態からSMSを受信したときにOTPを抽出したことを現しています。

2025/8/11更新
Googleの承認が下りました。今後は12人以上にクローズドテストを14日間以上行って頂くことで公開アプリの要件をを満たすことができます。

そこでテスターになって頂ける方を募集します。メールアドレスをこちらでテスター登録すると、下記リンクからアプリをインストールできます。起動したらhideさせておけば起動していることになりますのでそのまま14日以上経過させてください。hide状態のときは、アプリはsuspended状態で停止しています。Androidのみの対応となっています。

https://play.google.com/store/apps/details?id=org.qtproject.UsefulTools
※テスター登録を行わないとアクセスできません

2025/8/14追記
Chromiumのバージョンアップと共に、私が愛用していたQtとの共存が不可能になりました。やり方はあるのかもしれないが、私なりに色々試した結果の結論です。
Chromium v138からそれまでの設計思想から破壊的仕様変更が行われたことが原因ですが、詳細が良く分からず、そこに時間を掛けてまでしてQtを使い続けるか自問自答していましたが、遂に諦める決意をしました。
他の仕事ではC#を使っているのですが、進化が凄く過ぎて、一昔前に今のコードを見たとき、この書き方はどうやって処理されるコードなの?と疑問になるぐらい書き方が変わってしまっています。でもコードの書き方も便利になっていることは確かなので、今後はC# with Chromium Engineを使ってアプリ開発を行っていきます。
但し、当面は認証がきついサイトのみの使用となります。RELIEF TICKETは認証がきついために最新のブラウザを使う必要があるため最新のChromium Versionを使用するためにC#アプリを使います。

2025/8/17追記
C#版のベースとなるアプリが完成しました。
処理速度はC++版に比べれば多少は劣ると思いますが、人間の目では分からない程のものです。これを使うのはreCAPTCHA v2 or v3、その他CAPTCHAを使うサイトに対して有効なものであり、全てのBOTがC#に移行する訳ではありません。
https://github.com/zattu1/CefSharp

2025/8/27追記
Googleより審査結果に違反があるとの通知を受けました。
Android15でSMS受信時にアプリを起動できる権限なのですが、無効と判断されてしまいました。

これに連動しているようで、Googleが本アプリの権限をリモート操作で不可にされてしまったようで、SMS受信時にアプリが起動できなくなってしました。(開発時は起動していたのを確認できていたのですが。。。)
そのため、本アプリを利用するときは、開発者オプションでスリープモードにしないを設定して、電源をつけっぱなしの状態にするほかありません。

2025/9/11追記
上記の設定は不要になりました。スリープ中でもSMSは受信するので、そのときにUIは表示せずにJava層だけでTCP送信する仕組みに変えたことで、スマホの画面が復帰しなくてもOTPを受け取ることができるようになりました。

このRELIEF-TICKETサイトは、購入の手続きは異様に多く、
1.日時選択画面
2.携帯電話番号認証画面
3.携帯電話番号入力画面
4.購入に関する注意事項画面
5.同行者情報の登録画面(2人チケットの場合のみ)
6.クレジットカードの指定画面
7.Confirm画面(まだ見たことが無い)
8.恐らくComplete画面
とやることがめちゃくちゃ多い。

SMSのOTP連携を経て、やっとここまで来ました。
試す機会が極端に少ないから開発の進捗が遅くなってしまう。。。

2025/09/16
テスト購入しました。
リセールのリセールはできないので、経費で落とすのみです。

2025/09/18追記
ついに自動購入動作が完結することが確認できました。
3Dセキュア画面に遷移するときのファイアウォールブロックの許可メッセージは、最初のみ出現します。
OTP(ワンタイムパスワード)認証については、iPhoneのをお持ちの場合は、BOT内のブラウザから手動入力を行ってください。
購入枚数は、1枚のみ、2枚のみ、1枚 or 2枚のときで選択できます。
購入動作に入った時点で、座席確保状態になっているので、恐らくOTP認証の5分間の猶予中に購入が完了できれば問題ありません。

今回は、Chromiumを使ったアプリを今までのC++からC#に変えたことで、ほぼほぼコードを書き換えた点、Androidアプリのバックグラウンドの動作や挙動の調査に時間が掛かった点、RELIEF-TICKETサイトにPostリクエストを完全に同じデータを送っても失敗してしまうため(違うところがCookieぐらいしか残っていないが全てのコード解析は厳しいので)、やむを得ずブラウザの自動操作に切り替えた点、当社のライセンス認証回りのコードの移植に時間が掛かってしまった点、なかなかリストックされない点などなどがあり、1か月半の時間が掛かってしまいました。

Androidアプリを利用時に、1点だけ注意点があります。
Androidアプリは、SMSからOTP受信すると、RELIEF TICKET自動購入ツールがAndroidアプリに接続しに行き、OTPの受信を待つことになります。Android側のIPアドレスが変わると、RELIEF TICKET自動購入ツールが接続できなくなりOTP連携が出来なくなるため、IPアドレスを固定にする必要があります。
以下の設定から、IP設定をDHCPから静的に切り替えてください。

次に、赤枠部分がOTPサーバのIPアドレスになります。これをRELIEF TICKET自動購入のIPアドレス欄に入力します。
そして、青枠が「サーバー停止」の状態になっていることを確認してください。「サーバー開始」の場合は繋げることができません。

また、「サーバー開始」ボタンを押下してもエラーが表示される場合は、以下の「アプリ終了」ボタンにて終了してから、再度OTP連携アプリを開いてください。

購入動作を開始する前に必ずOTP連携アプリと接続ができることを確認するようにしてください。確認が出来たら切断してください。

当社製のAndroidアプリを世に出したいので、興味がある方は以下にアクセスしてボタンを押下してください。
https://play.google.com/apps/testing/org.qtproject.UsefulTools

このアプリは、Android側からPCに接続するのではなく、PCからAndroidに接続する形態を取っているため、複数のPCアプリから受け付けることを想定した設計になっており、SMSを受信してから10秒以内にAndroidアプリに接続してきたPCに対してのみOTP連携する仕様になっています。そのため、SMS認証が同時に発生する事がまず起きない状況であれば、「1:多=Android:PC」という環境にて動作させることが可能です。