前言

全城熱炒的 iPhone,每次 Apple 一放貨出來,不用三十秒便已被人訂光,不用自動化程式去遞交基本上沒有機會訂到。其實這類自動化程式不太難寫,因為只是模擬 html request 而已。我們來研究一下吧。

要求

開始前,建議你對 html get/post 有基本認識,也要對 programming 有基本底子。另外由於 Reserve 需用到 SMS,我們會用 Android 來寫此程式,所以你最好對 Android App development 有所了解。

基本流程

要寫 bot,當然要了解整個流程,如有幾多個頁面,每頁之間要交換的資料等。

如你已買過一次,應該也知道整個預訂流程,現在整理一下:

  1. 瀏覽第一頁
  2. 用戶在輸入 apple ID 、密碼和驗證碼 captcha,按遞交
  3. 第二頁會顯示 SMS 的碼
  4. 用戶用手機將 SMS 碼以 SMS 形式寄到 Apple 電話,等待回覆
  5. Apple 回覆 SMS 預訂號碼
  6. 用戶到第二頁輸入發送 SMS 的手機號碼和 SMS 預訂號碼,遞交
  7. 用戶選擇 Apple Store、iPhone Model 、容量大小和 Contract type
  8. 如有存貨,用戶可輸入姓名、電話、身份證明號碼和時間後,遞交
  9. 預訂成功/失敗

Developer Tools

要獲得這些資料,以前可能要自行分析網頁設計,所幸現在的 browser 非常先進,內置 developer tools,可以方便的查看 html form 遞交的資訊,要了解整個流程真是簡單得行。

以下以 Firefox 為示範,Google Chrome 內置的 Developer tools 同樣可以做到,不過我個人喜歡 Firefox 多一點。

用 Firefox 的話,請先安裝 Firebug extension。安裝後,開一新 Private Window,用 Private Window 是排除蘋果網站種下 cookie 影響測試結果。

按 F12 開啟 Firebug,Firebug 有幾個 tab ,我們會用到的主要是 Net,enable 它後,開啟 Persist 設定,這樣所有網絡的 request 和 response 都會記錄下來。

準備好後瀏覽:

https://reserve-hk.apple.com/HK/en_HK/reserve/iPhone

可以看到所有圖片、js、css 的所有 request 都有記錄。讓我們來看看第一頁的情況:

第一頁的 request

接下來是偵探遊戲,要找找那一個 request 是有用的。JPG/PNG、javascript、css 的相關 request 都可以不理,慢慢的看會發現類似 request:

Captcha request

https://signin.apple.com/IDMSWebAuth/imageCaptcha/942#XXXXXXX

看一下 response 便會發現是 captcha 圖片,由此可以知道此便是 captcha 的 request。除非你有所謂的「大法」,不然的話 bot 必須完整模擬整個預訂過程。所以先記住此 URL,到實際寫 bot 時會用到的。

現在輸入 apple ID 密碼和 captcha 再 submit, 在 firebug 便可看到一個 post request,點選即可查看遞交了的 paramters

Post request

點擊一下便可查看遞交的 parameters:

Parameters

其他頁面的做法相同,只要自己試一次預訂便可知道所有相關的資料了。

沒有存貨?

但在最後一版若沒有存貨可以怎試? 可用 html tab 的 mouse (1)

最後一頁

再點選其中一個 iPhone Model 後,在 html tab 可看到有很多隱藏的 li, 先揀其中一個 (2), 再 disable hidden style (3), 便可在網頁揀選一個 iPhone Model 繼續了。

若沒 timeslot 的話,便點擊 timeslot box 後用 edit function 自行加一個 option 進去, value 隨便打的便可以,畢竟我們的目的是測試和記錄所有 parameter,只要可以遞交便行。

完整流程

如果你完整的記錄整個步驟的話, 便會發覺網頁在看不見的地方也做了些 data loading, 來看看完整的步驟:

  1. 在第一頁
  2. 網頁會下載驗證碼 captcha
  3. 用戶在輸入 apple ID 、密碼和 驗證碼 captcha,按遞交
  4. 在第二頁會用 ajax 下載顯示 SMS 的碼
  5. 用戶用手機將 SMS 碼以 SMS 形式寄到 Apple 電話,等待回覆
  6. Apple 回覆 SMS code
  7. 用戶到第二頁輸入發送 SMS 的手機號碼和 SMS 回覆碼,遞交
  8. 在第三頁網頁會自動下載你的個人資訊
  9. 用戶選擇 Apple Store
  10. 網頁會下載 Apple Store 的 timeslot 資料
  11. 用戶選擇 iPhone Model 、大小和 Contract type 後
  12. 網頁會下載存貨資料
  13. 如有存貨,用戶可輸入姓名、電話、身份證明號碼,遞交
  14. 預訂成功/失敗

知道需要的資料後,下一步便是實際寫 bot


Apple iPhone Reserve Bot 教學 - 首頁