2014年9月11日星期四

免安裝Javascript版Apple Store iPhone 6 開賣Bot

唔洗講大家都知聽日係iPhone 6開賣日,高登討論區已經淪陷為Bot散貨場,當中是真是假我都唔知。
因為直至寫文呢個時間,Apple Store只更新iPhone 6訂購頁,但之後要填寫什麼都未知是否跟iPhone 5是一樣。
所以自動落單,自動填表的等媽媽餵奶流程是不是真的有用,我個人就很保留態度。



其實兩年前,我寫的Windows版 炒iPhone必備 Apple Store Checker - 開賣喇免費版,當時已經講過十個所謂監察App,相信九個都沒有太高深技術,純粹偵測一下Apple Store回應的Json就知道是否開賣。當時已經有一些無良開發者,竟然以如此低技術的程式,去收取$39.99的價錢,甚至比一些Office Apps或遊戲還要貴。

近日有人留言問我是否會更新那時的程式,其實程式的Source Code,我都好像刪除了。
不過今天看見網站流量突然爆升,全部都是衝著這個程式而來。
反正重寫都不會花太多時間,一個Lunch時間已經搞定,所以我就再重新寫一個。


不過這一次我為了快快搞掂,我以Javascript去實現,工作原理都是一樣,以GET方式檢查Json,有就出Alert,沒有就繼續StandBy,就是這麼簡單。
最簡單使用方法可以使用Browser上的Javascript Console如
除了Firefox之外,Chrome都已經內建。搞不懂就問問朋友或留言問我。

使用方法:
  1. 打開Browser先去 http://store.apple.com/hk-zh/buy-iphone/iphone6
  2. 按鍵盤F12,前往Console,把整段程式碼貼上執行就OK,之後程式每20秒就會對18個iPhone 6組合進行一次查詢。
  3. 想停止的話,可以輸入 stop()再按Enter就會停止(或者最直接就是重開瀏覽器),再開始就輸入run()按Enter。



當然我不能保証什麼,但在技術上或理論上,都是可靠的。
可惜近期我在工作上都很忙,恕我未能做到更好或解釋更多。m(~_~)m

下載Javascript檔
[開啟連結後,你會見到很長很嚇人的火星文,總之就直接按下Ctrl+A (全選), Ctrl+C (複製) , 再去Console Ctrl+V (貼上) , Enter, 右下角有提示出現就証明運作緊.]
https://dl.dropboxusercontent.com/u/19160547/Files/ip6.txt

Update#1 - 2014-09-12 00:16

呢段Script放左上網一發不可收拾,主要都是我Facebook的朋友用Chrome出現問題,
我自己都被訊息轟炸。而且他們執行上都覺得很困難,現在修正了一點地方,請重新再試。

Update#2 - 2014-09-12 01:40

程式原本設計是,任何一個組合開賣,就會出alert()提示,程式亦會停止(因為我怕同時彈出18個alert()視窗... ),但不能告之是什麼組合開賣(因程式已停止,餘下的組合不會再檢查),而且一不留神就會Miss左。
所以我再下苦功加入兩樣功能 -
1. 調用HTML5的Audio API做通知,開賣時,會有20秒的長Beep。
但不支援IE,即使是IE12,已查Mozilla文件証實。
2. 於Console Window顯示什麼組合開賣。

Update#3 - 2014-09-12 12:18

第三次更新,因為有人話自己在Office返工,唔可以打開Speaker,有聲都聽唔到。
所以我最後用了Chrome/Firefox的Notification功能去做提示,同時亦放棄支援IE。
記得第一次使用時,批准Browser的Permission,如下圖。

Chrome:

Firefox:

Update#4 - 2014-09-12 17:00

岩岩開賣時,好多人都不停Click個綠色選取制。
但我想講下,我都俾果個綠色制Fake左。
其實今次Apple果版做得好差,第一次按,有反應,但買唔到彈返轉頭果時,果個綠色制係會變到冇用的,
你再click佢,佢唔會send任何資料俾Apple,亦唔會做任何野動作。
一定要全版reload至得。
但今次我試左,自己呢段Script係Work的,再做左優化,大家一定要更新最新版本。

有很多人都說運行本Script後出現錯誤,最大原因是你的Firefox或Chrome沒有先前往http://store.apple.com/hk-zh/buy-iphone/iphone6就運行本Script。
若不懂用Chrome Developer Tool,有一段Youtube 上的Tutorial很簡單地教你怎用,由4:00開始睇就可以。


Source Code (只供其他開發者參考, 一般使用者請使用上面的DropBox連結):
/* =Script Start = */

var ip6 = new Array("http://store.apple.com/hk-zh/buyFlowSelectionSummary/IPHONE6?node=home/shop_iphone/family/iphone6&step=select&option.dimensionScreensize=4_7inch&option.dimensionColor=silver&option.dimensionCapacity=16gb&option.carrierModel=UNLOCKED%2FWW&carrierPolicyType=UNLOCKED",
"http://store.apple.com/hk-zh/buyFlowSelectionSummary/IPHONE6?node=home/shop_iphone/family/iphone6&step=select&option.dimensionScreensize=4_7inch&option.dimensionColor=silver&option.dimensionCapacity=64gb&option.carrierModel=UNLOCKED%2FWW&carrierPolicyType=UNLOCKED",
"http://store.apple.com/hk-zh/buyFlowSelectionSummary/IPHONE6?node=home/shop_iphone/family/iphone6&step=select&option.dimensionScreensize=4_7inch&option.dimensionColor=silver&option.dimensionCapacity=128gb&option.carrierModel=UNLOCKED%2FWW&carrierPolicyType=UNLOCKED",
"http://store.apple.com/hk-zh/buyFlowSelectionSummary/IPHONE6?node=home/shop_iphone/family/iphone6&step=select&option.dimensionScreensize=4_7inch&option.dimensionColor=gold&option.dimensionCapacity=16gb&option.carrierModel=UNLOCKED%2FWW&carrierPolicyType=UNLOCKED",
"http://store.apple.com/hk-zh/buyFlowSelectionSummary/IPHONE6?node=home/shop_iphone/family/iphone6&step=select&option.dimensionScreensize=4_7inch&option.dimensionColor=gold&option.dimensionCapacity=64gb&option.carrierModel=UNLOCKED%2FWW&carrierPolicyType=UNLOCKED",
"http://store.apple.com/hk-zh/buyFlowSelectionSummary/IPHONE6?node=home/shop_iphone/family/iphone6&step=select&option.dimensionScreensize=4_7inch&option.dimensionColor=gold&option.dimensionCapacity=128gb&option.carrierModel=UNLOCKED%2FWW&carrierPolicyType=UNLOCKED",
"http://store.apple.com/hk-zh/buyFlowSelectionSummary/IPHONE6?node=home/shop_iphone/family/iphone6&step=select&option.dimensionScreensize=4_7inch&option.dimensionColor=space_gray&option.dimensionCapacity=16gb&option.carrierModel=UNLOCKED%2FWW&carrierPolicyType=UNLOCKED",
"http://store.apple.com/hk-zh/buyFlowSelectionSummary/IPHONE6?node=home/shop_iphone/family/iphone6&step=select&option.dimensionScreensize=4_7inch&option.dimensionColor=space_gray&option.dimensionCapacity=64gb&option.carrierModel=UNLOCKED%2FWW&carrierPolicyType=UNLOCKED",
"http://store.apple.com/hk-zh/buyFlowSelectionSummary/IPHONE6?node=home/shop_iphone/family/iphone6&step=select&option.dimensionScreensize=4_7inch&option.dimensionColor=space_gray&option.dimensionCapacity=128gb&option.carrierModel=UNLOCKED%2FWW&carrierPolicyType=UNLOCKED");

var ip6plus = new Array("http://store.apple.com/hk-zh/buyFlowSelectionSummary/IPHONE6P?node=home/shop_iphone/family/iphone6&step=select&option.dimensionScreensize=5_5inch&option.dimensionColor=silver&option.dimensionCapacity=16gb&option.carrierModel=UNLOCKED%2FWW&carrierPolicyType=UNLOCKED",
"http://store.apple.com/hk-zh/buyFlowSelectionSummary/IPHONE6P?node=home/shop_iphone/family/iphone6&step=select&option.dimensionScreensize=5_5inch&option.dimensionColor=silver&option.dimensionCapacity=64gb&option.carrierModel=UNLOCKED%2FWW&carrierPolicyType=UNLOCKED",
"http://store.apple.com/hk-zh/buyFlowSelectionSummary/IPHONE6P?node=home/shop_iphone/family/iphone6&step=select&option.dimensionScreensize=5_5inch&option.dimensionColor=silver&option.dimensionCapacity=128gb&option.carrierModel=UNLOCKED%2FWW&carrierPolicyType=UNLOCKED",
"http://store.apple.com/hk-zh/buyFlowSelectionSummary/IPHONE6P?node=home/shop_iphone/family/iphone6&step=select&option.dimensionScreensize=5_5inch&option.dimensionColor=gold&option.dimensionCapacity=16gb&option.carrierModel=UNLOCKED%2FWW&carrierPolicyType=UNLOCKED",
"http://store.apple.com/hk-zh/buyFlowSelectionSummary/IPHONE6P?node=home/shop_iphone/family/iphone6&step=select&option.dimensionScreensize=5_5inch&option.dimensionColor=gold&option.dimensionCapacity=64gb&option.carrierModel=UNLOCKED%2FWW&carrierPolicyType=UNLOCKED",
"http://store.apple.com/hk-zh/buyFlowSelectionSummary/IPHONE6P?node=home/shop_iphone/family/iphone6&step=select&option.dimensionScreensize=5_5inch&option.dimensionColor=gold&option.dimensionCapacity=128gb&option.carrierModel=UNLOCKED%2FWW&carrierPolicyType=UNLOCKED",
"http://store.apple.com/hk-zh/buyFlowSelectionSummary/IPHONE6P?node=home/shop_iphone/family/iphone6&step=select&option.dimensionScreensize=5_5inch&option.dimensionColor=space_gray&option.dimensionCapacity=16gb&option.carrierModel=UNLOCKED%2FWW&carrierPolicyType=UNLOCKED",
"http://store.apple.com/hk-zh/buyFlowSelectionSummary/IPHONE6P?node=home/shop_iphone/family/iphone6&step=select&option.dimensionScreensize=5_5inch&option.dimensionColor=space_gray&option.dimensionCapacity=64gb&option.carrierModel=UNLOCKED%2FWW&carrierPolicyType=UNLOCKED",
"http://store.apple.com/hk-zh/buyFlowSelectionSummary/IPHONE6P?node=home/shop_iphone/family/iphone6&step=select&option.dimensionScreensize=5_5inch&option.dimensionColor=space_gray&option.dimensionCapacity=128gb&option.carrierModel=UNLOCKED%2FWW&carrierPolicyType=UNLOCKED");

var ipmerge = ip6.concat(ip6plus);
var ire = "https://reserve.cdn-apple.com/HK/zh_HK/reserve/iPhone/availability.json";

function notifyMe( title, message) {
   var iconurl = "http://lh3.googleusercontent.com/-xMhlBIup1rw/VBGWUL05nBI/AAAAAAAAc7U/rsMlNb-0g_M/s72/ic_appstore.png";
  if (!("Notification" in window)) {
    alert("This browser does not support desktop notification");
  }

  else if (Notification.permission === "granted") {
    var notification = new Notification(title , { body: message , icon: iconurl });
  }

  else if (Notification.permission !== 'denied') {
    Notification.requestPermission(function (permission) {

      if(!('permission' in Notification)) {
        Notification.permission = permission;
      }
      if (permission === "granted") {
        var notification = new Notification(title , { body: message , icon: iconurl });
      }
    });
  }
}

var beep = (function () {
 var AudioContext = window.AudioContext || window.webkitAudioContext;
 var ctx = new AudioContext();
    return function (duration, type, finishedCallback) {
        duration = +duration;
        // Only 0-4 are valid types.
        type = (type % 5) || 0;
        if (typeof finishedCallback != "function") {
            finishedCallback = function () {};
        }
        var osc = ctx.createOscillator();
        osc.type = type;
        osc.connect(ctx.destination);
        osc.start(0);
        setTimeout(function () {
            osc.stop(0);
            finishedCallback();
        }, duration);
    };
})();

function getNow() {
        var todayDate = new Date();
        todayDate = todayDate.getFullYear() + "-" +
                       ("0" + (todayDate.getMonth() + 1)).slice(-2) + "-" +
                       ("0" + todayDate.getDate()).slice(-2) + " " + ("0" + todayDate.getHours()).slice(-2) + ":" +
                       ("0" + todayDate.getMinutes()).slice(-2);
 
        return todayDate;
}

function queryString(url) {
    var qs = url.substring(url.indexOf('?') + 1).split('&');
    for(var i = 0, result = {}; i < qs.length; i++){
        qs[i] = qs[i].split('=');
        result[qs[i][0]] = decodeURIComponent(qs[i][1]);
    }
    return result;
}

function getJson(url) {
var r = "";
try {
 xmlhttp=new XMLHttpRequest();
 xmlhttp.open("GET", url ,false);
 xmlhttp.send();
 if (xmlhttp.status == 200)
  r =xmlhttp.responseText; 
}
catch(err) {
    console.log(err.message);
}
return r;
}

var isBeep = '';
var timeoutHandle;
if(timeoutHandle) stop(); //refresh the handler.

/* Stop manually */
function stop() {
 clearTimeout(timeoutHandle);
 timeoutHandle = null;
 console.log('The script is stop...');
}

function run() {
    timeoutHandle  = setTimeout(function () {
        // create a recursive loop.
        var json = "", model = "", t = "";
        console.clear();
   //Store
   for (var i= 0; i < ipmerge.length; i++) {
    json = getJson(ipmerge[i]);
       model =  'iPhone 6 ' + 
     queryString(ipmerge[i])['option.dimensionScreensize'].replace('_','.') + ' ' + 
     queryString(ipmerge[i])['option.dimensionColor'].replace('_',' ') + ' ' + 
     queryString(ipmerge[i])['option.dimensionCapacity'];
    t = getNow();
    console.log(t + ' - Checking... ' + model + ' success.');
    if (json != "" && json.indexOf("\"isBuyable\":true") > 0) {
      notifyMe("開賣喇!" + ' - ' + t, model);
         if (isBeep == '') beep(20000, 1, function () {isBeep = 'done'; });
         stop();
     }
   }
   //IR, NOT WORK.
   /*json = getJson(ire);
   if (json != "" && json.length > 10){
      notifyMe("iReserve接受預訂喇!!");
         if (isBeep == '') beep(20000, 1, function () {isBeep = 'done'; });
         stop();
   }*/
   json = null;
        run();
    }, 20000); 
}

/* Start */
run();  //Change to stop() , to stop the service.
notifyMe("The script is start!" , "Running...");

/* = End of the Script =*/

144 則留言:

  1. 請問是否將Javascript檔內的source code paste to Console, 然後close 左個development tool就ok?
    但我再開console,裡而就無唒剛剛copy既source code....
    係咪我有野做錯左?

    回覆刪除
    回覆
    1. 再試多一次,console 出現左幾百條紅色"Refused to set unsafe header "Referer" 同"Refused to set unsafe header "Host"

      刪除
    2. yes,開住個browser,run佢就會自動detect到你熄browser.
      咁奇怪?你試試delete呢兩行, 應該冇影響的.
      xmlhttp.setRequestHeader("Host", "store.apple.com");
      xmlhttp.setRequestHeader("Referer", "http://store.apple.com/hk-zh/buy-iphone/iphone6");

      刪除
    3. del完都係UNDEFINED.

      刪除
    4. Thanks! It works!
      One more question: The browser has to be kept open to run the service and will prompt me once the sales start?

      刪除
    5. 沒錯,要開住,情況有如一般chrome/firefox extension咁.

      刪除
    6. http://applestore.iphone4hongkong.com/ireserve
      條式可唔可以係呢度用 宜家佢其實轉左玩法
      每日都登入到,個程式碼好似廢左
      可唔可以測到幾時有貨就通知

      刪除
  2. 你好,如果要成功使用程式然後抽到,是否要在開售前(9月16號早上8點前)run定個program? 如果成功抽中的話,是否會自動進入填寫資料的版面?感謝

    回覆刪除
    回覆
    1. 唔會自動填資料,因為我認為要check login左apple store未, 又搞一輪, 填form或信用卡又搞一輪.
      而且我本身即使windows app,都唔想去記低其他人既信用卡資料. 亦唔想日後有咩令我負上懷疑盜用信用卡既時候...本身我係code for food, code for fun.

      刪除
  3. 試過用CHROME同IE RUN段CODE
    但係都係UNDEFINED....

    回覆刪除
  4. 係咪出現幾百條紅色"Refused to set unsafe header "Referer" 同"Refused to set unsafe header "Host"
    就係OK?

    回覆刪除
    回覆
    1. 唔OK的~我之前既code問題~我fixed左了,thanks

      刪除
  5. 一樣幾百條紅線

    回覆刪除
  6. 神啊,永遠follow無私巴打

    回覆刪除
  7. 對唔住咁多位@_@ 我太懶之前冇試過用Chrome同IE , 只用firefox試. 岩岩修改過証實firefox ,chrome,IE 都work.
    只要到時Apple唔好玩野亂改response既json就OK~~

    回覆刪除
  8. CHROME 測試成功 THX

    回覆刪除
  9. Script終於沒錯誤 不過誰能說到底是什麼效果 看上去沒分別 +_+

    回覆刪除
    回覆
    1. 當然,,,,如果而家彈出開賣了,就程式錯誤~_~" 任何bot,script 都要等到真係賣至知龍定蟲~

      刪除
    2. 我MAC機CHROME就出現開賣了.... T___T

      刪除
  10. 2014-09-12 00:52 - Checking...iPhone 6 4.7inch silver 16gb success.
    出現以上呢句是什麼意思?

    回覆刪除
    回覆
    1. 即係話已經成功由apple server取得資料, 但不代表賣緊. 如果真係賣, 就會出現 (iPhone 6 4.7inch silver 16gb開賣喇!!)

      刪除
  11. UNDEFINED 姐係用唔到?

    回覆刪除
  12. 按鍵盤F12,前往Console,把整段程式碼貼上 , 但邊度按執行sorry新手= =

    回覆刪除
  13. 2014-09-12 05:04 - Checking... iPhone 6 5.5inch gold 128gb success. VM221:111

    16號 FOR THIS, 如果真係仲有貨 128GB GOLD 佢會出現開賣中,
    但係...係唔係都要自己手動禁 4.7/5.5 / 色,/ GB, 呢3個STEP?
    定自動幫你選晒COLOUR, 自動入填資料畫面?~~

    THANK U VERY MUCH !~~好勁CHING

    回覆刪除
  14. 樓上的,仲有一個問題, 聽日PREORDER , 用呢個程式前, LOG IN左APPLE ACC~~先RUN?~~
    3:00前log in 加run定programme~? thanks

    回覆刪除
    回覆
    1. 其實今日3:00pm, 用bot作用唔大. 因為Apple已講明3:00pm賣, Login好,準時買仲有效, 情況好似搶紅米咁.

      刪除
  15. pls help!
    出現以下這句

    GET http://store.apple.com/hk-zh/buyFlowSelectionSummary/IPHONE6P?node=home/sho…apacity=128gb&option.carrierModel=UNLOCKED%2FWW&carrierPolicyType=UNLOCKED 503 (Service Unavailable)

    回覆刪除
  16. APPLE 網出現這句 We'll be back

    回覆刪除
    回覆
    1. 我會更進一下,之後佢有改到咩野。

      刪除
    2. source code need update?
      Thank you!

      刪除
  17. 謝謝分享!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    請問....APPLE 依家出左WE'LL BE BACK...請問有測試到佢幾時更新完有得賣的提示嗎? 謝謝!!!!!!!!!!!!!!!!!!!

    回覆刪除
  18. 會有update sources code?
    Thank you!

    回覆刪除
  19. 請問, 可唔可以整個自動選型號然後自動不停按選取嘅script

    回覆刪除
    回覆
    1. 我明你意思,岩岩我都俾果個綠色制Fake鳩左。其實今次Apple果版做得好差,第一次按,有反應,但買唔到彈返轉頭果時,果個綠色制係變到冇用的,你click佢,佢唔會send任何資料,唔會做任何野。一定要全版reload至得。所以整自動click解決唔到。

      刪除
  20. 但今次我試左,自己呢段Script係Work的,再做左優化,大家一定要更新最新版...?
    最新版是什麼..

    回覆刪除
  21. 無限感激師兄!!!!!!!!!!!!!!

    回覆刪除
  22. 到16號 時會唔會有改變???

    回覆刪除
    回覆
    1. 呢個要問Apple了,但照以往睇,係唔會.

      刪除
    2. 即係照用呢個sources code就OK?

      刪除
  23. 16號iReserve我估應該唔同玩法

    回覆刪除
  24. 請問有CLICK"選取" 之後既WEBPAGE的SOURCE CODE嗎

    回覆刪除
  25. Copy 左,但paste 不到入console,應該什様做(新手)

    回覆刪除
  26. 其他國家有ireverse page 了..............
    樓主 有冇方法整到............入第2版

    回覆刪除
    回覆
    1. 第2版意思係揀完model/色/GB之後果版?

      刪除
  27. 直入第2版先最重要,反正D人8點都會不停F5

    回覆刪除
  28. 樓主可以做一個自動提醒我們有ireserve的程式嗎?

    香港的ireserve:
    https://reserve-hk.apple.com/HK/en_HK/reserve/iPhone/availability

    回覆刪除
    回覆
    1. Hmm, the page you’re looking for can’t be found.
      未入到,有可以睇下整唔整到. (印象中iphone5時係得的)

      刪除
  29. https://reserve-hk.apple.com/HK/en_HK/reserve/iPhone/availability
    暫定的? 未入到

    回覆刪除
  30. 請問有沒研究Au/JP iReverse既玩法?
    容易做到iReverse既check stock方法
    但係類似click選取send request去買機既話,有咩javascript/json/keyword可以search到類似既post method?

    (soryy有D1999,希望你明啦)

    回覆刪除
    回覆
    1. iReverse 如果我冇記錯,ip5時,果版唔係經json check stock,佢好似真係有就有,冇就唔俾禁果隻.
      我記得當時我做法係直頭全版HTML拎再check string.
      慢少少,低技術,但一樣有效.
      不過聽朝8:00am, 都係準時8:00am F5F5F5F5喇~

      到到之後,再用我既Script 或者我再研究一下iReverse.

      刪除
    2. 能私下給你聯繫嗎=]
      sneaker_broker@yahoo.com.hk

      刪除
  31. 大家,我從其他消息知道這條link才堅啊!希望大家都抽到
    https://reserve-hk.apple.com/HK/zh_HK/reserve/iPhone/

    回覆刪除
    回覆
    1. 請問你是從什麼消息知道的呢?我按裡面的link 會去到英國的網頁啊

      刪除
  32. 回覆
    1. 我? 冇乜,本身唔係職業炒家, 我信用卡都係得一張,頂多立兩部,
      暫在技術立場亦覺得冇乜值得研究,基本上是但一個IVE讀IT既人,甚至中學生都做到,只係有冇人做咁解。

      刪除
  33. ir:
    $('[name=xxxx]').val('xxxx').click();
    可否指教一下點解揀完佢唔識trigger下一個section彈出黎既?
    thx !!

    回覆刪除
    回覆
    1. 下一個section即係咩?

      刪除
    2. 比如,我揀左ifc,佢個box係跳左去ifc,不過就唔識跳下個section比我揀6 or 6 plus,之後到揀完顏色又係咁....btw我冇讀過的,全自研 haha

      刪除
    3. 照今日個IR, 揀左IFC已經係login apple id, 再send sms俾apple la wor.
      要拎晒code至揀model.
      而且click之前,唔洗val

      刪除
    4. 但box入面3間分店唔用value點define佢?

      刪除
    5. btw如果有個html唔知大大寫唔寫到sms後果版直接loop揀有貨的機果一part呢? 因為名電話果d跟apple id的,只需揀證件類別同no.就完成

      刪除
    6. @哦,你想select index,咁你岩。

      @"sms後果版直接loop揀有貨", 邏輯上work,但唔會太有效用。
      如果你收SMS, 你都可以即刻人手打去之後果版,打埋ID no,講真果一刻應該都坐定定起電腦前,人手同電腦做唔差得遠。而且今朝經驗問題係SMS收發唔到,或者打完verify code呆等至去到打ID。
      起一個apple server network唔穩定情況下,有時用script/bot做,反而適得其反.


      刪除
    7. 姐係要留名等高手bypass sms....

      刪除
  34. 唉!抽不到,D人太快了,要靠師兄幫忙寫個script輔助下

    回覆刪除
    回覆
    1. 我8:00入到去,8:02 send SMS, 等到8:20都未收返SMS.
      有script有bot都冇用,bypass唔到SMS果一步, 今次問題係SMS果度.

      刪除
  35. 個script ge 通知欄一直都顯示"runnung...",但搶IPhone 時一直都無咩野變化,一直就話running,其實係唔係我install錯D咩野,定係我誤解左呢個script GE用途? 其實O係我搶時,個script點幫我?

    回覆刪除
    回覆
    1. 樓上,果個script不是for今次iReserve的,它是用於12號開賣果天

      刪除
  36. firefox 如何弄,,? 3Q

    回覆刪除
  37. CHING有才,可以幫忙寫個script給我們,等大家也有機會訂到iphone嗎?
    http://www.hkepc.com/forum/viewthread.php?tid=2122862&extra=page%3D1&page=1

    回覆刪除
    回覆
    1. 冇乜用,佢o的link同Part number一早已知。

      刪除
    2. 因為我吾識,所以給ching你睇吓,原來如此........

      刪除
    3. 想問問ming ching,如果想學寫bot,應該邊種script比較適合,php, python 定javascript呀? 謝謝

      刪除
    4. php,python,javascript都不是,最好係用DESKTOP類如.NET / J2SE, 因為你需要用如webclient, httprequest/response之類 + 多工(threading, async etc)去做。

      刪除
    5. Ming ching真害利,我最多系學過dos batch,尼d對於我來講實在太深奧了,可能學到出iphon6s都未識,哈哈,話時話,Ching訂到嗎﹖有冇寫bot呀?

      刪除
  38. 唔知有冇人有reserve果幾版SOURCE CODE?
    想做一個SCRIPT去SELECT同AUTOFILL
    人手撳實輸俾內地人的BOT...

    回覆刪除
    回覆
    1. 我有一個... 點share?

      刪除
    2. please share.... i have all source codes of those ireserve pages...

      刪除
    3. 我想問下...其他地方既ireserve (AU, GB...)同HK既source code係咪都一樣? (除左product code 同shop code之外)

      刪除
    4. language file都唔同, IR係用underscore.js既templeate (http://underscorejs.org/#template)

      刪除
    5. share 埋比我可以嗎?想訂部5.5自用都咁難, 棍波唔夠bot黎, 比佢地玩哂。

      刪除
    6. 師兄 share 埋比我可以嗎?

      刪除
  39. 想問有無人save低左搵到ireserve source code?
    求求求...................

    回覆刪除
  40. Ming ching, 如果 AOS 開賣有冇可能做到 send email 出去通知 ?

    回覆刪除
  41. Ming ching
    會唔會整iReserve有貨通知

    回覆刪除
    回覆
    1. 會~但兩次朝早有開賣,我都冇拎所需既資料. 其實好多人誤會,用view source拎html, 其實果堆HTML 唔係raw data.

      刪除
  42. bypass唔到SMS果一步......

    回覆刪除
  43. Ming ching, I-reserve 有貨通知, 可唔可以整埋?

    回覆刪除
  44. 你好!

    想問下你有無寫過python版既iphone sale checking?因為我剩係識python同埋一啲唔關事既science用既language,而我無做過web auto既野,如果有你既python code比我參考下我諗我學起上黎會事半功倍。

    如果你無寫過,有無啲咩package係用開比python用黎做web auto可以推薦?

    Thanks!
    JL

    回覆刪除
    回覆
    1. 冇寫過python, 但其實任何language運作方式都90%類似.
      download json之後check下 , 就係咁簡單.
      唔係好明你所指既web auto係乜, 但如果你指macro或automate如web ui test,係冇需要用到的.

      刪除
  45. 我有朋友在星期二的預訂中,到最後揀了預訂時段後,網頁說他所選的取機時段已滿,因而泡湯.希望版主能再下一城,寫一個有顯示各店已滿時段的程式,並放在網頁版面,以供我們可用手機看到通知.謝!

    回覆刪除
  46. 沒有聲音通知,右側圖示也沒有改變............

    回覆刪除
  47. 可唔可以出個有聲版,等大家多個選擇

    回覆刪除
  48. 嗨...其實我唔多識.點裝法..
    我用開chrome 可唔可以教我點裝?

    回覆刪除
  49. 我先入左 https://reserve.cdn-apple.com/HK/zh_HK/reserve/iPhone/availability,打左code ,但respond

    The page at 'https://reserve.cdn-apple.com/HK/zh_HK/reserve/iPhone/availability' was loaded over HTTPS, but displayed insecure content from 'http://store.apple.com/hk-zh/buyFlowSelectionSummary/IPHONE6P?node=home/sho…apacity=128gb&option.carrierModel=UNLOCKED%2FWW&carrierPolicyType=UNLOCKED': this content should also be loaded over HTTPS.

    想問下正常嗎?謝謝

    回覆刪除
    回覆
    1. 應該係我程式上有問題,暫時還是不要用起reserve版面。

      刪除
    2. 謝謝!雖然唔得,但感謝分享!

      刪除
  50. 新手一問, 請問http://store.apple.com/hk-zh/buyFlowSelectionSummary/IPHONE6?node...... 這組你是用什麼方法找取的?

    回覆刪除
    回覆
    1. 其實Store果版,每一個產品組合都會background拎一個json, json當中isbuyable就係代表果個產品有冇開賣.
      而ireserve, 背後都會拎一個叫availability.json既檔案去做之後既事.

      一般.NET/Java 有好簡單既webclient已經可以download到. ireserve道理亦一樣.

      不過javascript版本要用xmlhttprequest, 亦同樣產生cross-domain限制問題 (store同ireserve domain唔同).
      當然我自己用就冇問題,因為我自己同時開store+ireserve版面去用.

      但我又懶得打教學,
      其實user角度我都覺得,如果用我段script係好煩.
      (當然時至現在,4.7吋一部賺得一千幾百,更加令我唔太進取去修改)

      刪除
    2. 當然我自己用就冇問題,因為我自己同時開store+ireserve版面去用. ---> 請問是否指,同時開兩個畫面,然後系sotre 到打code?

      刪除
    3. 聰明! 冇錯,一個store,一個ir 。ignore果o的error, 因為現在原本應該要分開運行既script,我放埋一齊。
      一開始我都冇諗過有cross-domain呢個問題。

      刪除
    4. 姐係同時開ireserve 同store兩頁, 各自打code之後run? 定係去store度打完一次就ok?

      刪除
    5. QQ Chan,全對。
      現在10:46 IR網都開左,但有度我可能要修正係,IR而家冇開貨,佢都長開,唔知Apple係咪又改左戰略。

      刪除
    6. 但係唔係我用法有問題?我係IR COPY CODE 落去有一大堆ERROR

      刪除
    7. THANKS你極速回覆哈哈,

      想知IR係邊頁度打code先岩? login page定係? 可唔可以俾條link我.

      同埋試左, 一run條IR code, 佢就會話"ireserve接受預訂喇!!", 想問下係咪有bug~

      many thanks!

      刪除
    8. QQ Chan,我program原先只係check佢有冇開而判斷有冇開賣。但正如岩岩所講, IR網而家似乎轉左係長開,睇下最後apple決定係點,咁就要改改。

      刪除
    9. 明白哂 咁唔怪得之一RUN就會有提示!!
      而家APPLE玩法係長開, 但會突然有貨, 姐係師兄你又要改啦! 哈哈.
      努力呀 等你UPDATE 我自己都想識多樣野!

      刪除
    10. 岩岩Golden睇到,咁就收$15一位。。。幾好搵
      http://sillywingwing.blogspot.hk/2014/09/hong-kong-apple-reservse-notification.html

      刪除
    11. 我都見到, 但可信性高咩?

      刪除
    12. 都高既, 根本全香港所謂開賣通知,做法都係一樣,全部都係parse同一條資料源頭 (json)。
      但bot就唔可信,我岩岩研究過IR入完SMS果版,同樣地係用一隻叫underscore.js既運作,以一般bot黎講,好難去操控果版面。

      刪除
    13. 好高深, 師兄你要加油, $15想俾你都唔想俾佢地d高登友
      姐係bot其實唔太可以運用係IR度?

      等你UPDATE

      刪除
    14. 等你update! 希望唔駛再不斷咁F5

      刪除
    15. 會唔會考慮整個page 3 autofill 的script?
      難整嗎? 我有上年5s的script,不過而家轉晒野, 用唔到.

      刪除
    16. 我唔知可唔可以咁,先check Irserve 有無開,然後再check 每行,如果有其中一個slot 有貨就 通知

      刪除
  51. 我想請教段 script 點行?

    回覆刪除
  52. ireserve只知道幾時開賣?但邊個model邊舖有貨就check唔到??

    回覆刪除
  53. 見你的code只是check store.apple.com 有無貨. 現在https://reserve.cdn-apple.com/HK/zh_HK/reserve/iPhone/availability有貨時是唔是store.apple.com唔會出現有貨!?

    回覆刪除
  54. 認同 !雖然我今年一部都抽唔到 , 但iphone 年年有 , 假期留在家中為左抽賺過少少錢 , 不如去支持一班站在最前線手無寸鐵的學生
    為未來民主努力的學生 , 或許數年之後你會發現賺少幾千的遺憾遠比今天企出來的少 .

    回覆刪除
    回覆
    1. 冇錯,賺多呢一千幾百,唔會因此就安居樂業,香港難得一次咁團結,要支援!

      刪除
  55. Ming, would you mind sharing your script to me?

    回覆刪除
  56. if (json != "" && json.length != 1432){

    notifyMe("iReserve接受預訂喇!!");

    回覆刪除
  57. 請問點找出 要check型號的link? 我識少少html, javascript, 想試下自己改link抽新model用. 多謝

    回覆刪除