一下代码是用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
转载于:https://blog.51cto.com/kinda22/1581656