一下代码是用ruby写的用于监控苹果ip6的可预约状态...

在ruby1.8.7下完美运行...,

只要修改要监控的苹果商店和在sn中选择要监控的型号。。

在最下面设置最后的触发动作就ok了。 在代码中已有注释..

#!/usr/bin/ruby
$KCODE = 'utf8'
require 'open-uri'
require 'json'
require 'pp'
require 'yaml'
require 'time'

ftime = Time.now.strftime('%F_%H-%M-%S')
time = Time.now.strftime('%F %X')

uri = 'https://reserve.cdn-apple.com/JP/ja_JP/reserve/iPhone/availability.json'
availability = open(uri) {|http| JSON.parse http.read}
if ! availability.empty?




uri = 'https://reserve.cdn-apple.com/JP/ja_JP/reserve/iPhone/stores.json'
stores = open(uri) {|http| JSON.parse http.read}

sn = { 
       'MG4A2J/A' => 'iP Gray   128G',  #
       'MG4C2J/A' => 'iP Silver 128G',  #
       'MG4E2J/A' => 'iP Gold   128G',  #
       'MG4F2J/A' => 'iP Gray    64G',  #
       'MG4H2J/A' => 'iP Silver  64G', 
       'MG4J2J/A' => 'iP Gold    64G',  #  
       'MGAC2J/A' => 'iP+ Gray   128G',
       'MGAE2J/A' => 'iP+ Silver 128G', #
       'MGAF2J/A' => 'iP+ Gold   128G', #
       'MGAH2J/A' => 'iP+ Gray    64G',
       'MGAJ2J/A' => 'iP+ Silver  64G',
       'MGAK2J/A' => 'iP+ Gold    64G',
  }

stores['stores'].each do |ss|
  if ss['storeName'] =~ /这里填要监控的苹果商店在上面的stores中查看/ 
    data = {'storeName' => ss['storeName'], 'storeEnabled' => ss['storeEnabled'], 'availability' => {} }
    sn.each do |k,v|
      if availability[ss['storeNumber']].include?(k)
        if availability[ss['storeNumber']][k]
          data['availability']["#{v}"] = 'yes'
        else
          data['availability']["#{v}"] = 'no'
        end
      end
    end
    if ! File.exists?("last" + "_" + ss['storeNumber'])
      File.open("last" + "_" + ss['storeNumber'],'w') { |f| f.puts(data.to_yaml) }
      File.open(ftime + "_" + ss['storeNumber'],'w') { |f| f.puts(data.to_yaml) }
    end

    fdata = YAML.load_file("last" + "_" + ss['storeNumber'])
    if data == fdata
      puts "#{time}  #{ss['storeName']}\t#{ss['storeNumber']}\t 无变化" 
    else
      puts "#{time}  #{ss['storeName']}\t#{ss['storeNumber']}\t 发生变化" 
      File.open("last" + "_" + ss['storeNumber'],'w') { |f| f.puts(data.to_yaml) }

      
      data['availability'].each do |k,v|
        if fdata['availability'][k] != v
          puts "#{time}  #{ss['storeName']}\t#{k} status:#{v}"
          #在这里可以增加发邮件或短信的动作..
        end
      end
      File.open(ftime + "_" + ss['storeNumber'],'w') { |f| f.puts(data.to_yaml) }
    end
  end
end
puts "----------------------------------------------"


else
  puts "全部货源抓取为空"
end