Python实现抢购IPhone手机


Posted in Python onFebruary 07, 2018

要买IPhone7主要有三个途径吧,一是官网下单;二是官网预约,直营店取货;三是第三方渠道。第一个渠道需要等3-4周,而且是直接快递过来,方便是方便,缺点主要是对物流不放心和怕遇到瑕疵机器退换货麻烦,优点是可以信用卡12期免息付款。第三个渠道加价且不放心。预约去直营店取机就是唯一选择。

预约是唯一的问题,官网上的预约号是不定时发放,基本刚出来几分钟就被抢走。编程改变世界,于是我用python写了一个查询脚本,在苹果放票的第一时间通过蜂鸣器通知抢预约。

python代码如下

#!/usr/bin/env python3
#encoding=utf8
import pycurl
import certifi
import json
import time
import ctypes
from io import BytesIO

def link(url, b):
 # print pycurl.version_info()
 # 这个函数创建一个同 libcurl中的CURL处理器相对应的Curl对象.Curl对象自动的设置CURLOPT_VERBOSE为0, CURLOPT_NOPROGRESS为1,提供一个默认的CURLOPT_USERAGENT和设置CURLOPT_ERRORBUFFER指向一个私有的错误缓冲区.
 c = pycurl.Curl() # 创建一个同libcurl中的CURL处理器相对应的Curl对象
 c.setopt(pycurl.CAINFO, certifi.where())
 c.setopt(pycurl.URL, url) # 设置要访问的网址 url = "http://www.cnn.com"
 # 写的回调
 c.setopt(pycurl.WRITEFUNCTION, b.write)
 c.setopt(pycurl.FOLLOWLOCATION, 1) # 参数有1、2
 # 最大重定向次数,可以预防重定向陷阱
 c.setopt(pycurl.MAXREDIRS, 5)
 # 连接超时设置
 c.setopt(pycurl.CONNECTTIMEOUT, 60) # 链接超时
 c.setopt(pycurl.TIMEOUT, 300) # 下载超时
 c.setopt(pycurl.HEADER, True)
 c.setopt(c.HTTPHEADER, ["Content-Type: application/x-www-form-urlencoded", "X-Requested-With:XMLHttpRequest",
       "Cookie:__cfduid=d27e1cfd61fd81d21d02b1da9fe4a72411473259699; 227c9_lastfid=0; 227c9_lastvisit=0%091473553135%09%2Fread.php%3Ftid%3D2063828; CNZZDATA950900=cnzz_eid%3D823435929-1473550264-%26ntime%3D1473550264"])
 # 模拟浏览器
 c.setopt(pycurl.USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)")
 c.setopt(pycurl.AUTOREFERER, 1)
 c.setopt(c.REFERER, url)
 #设置http代理
 #c.setopt(pycurl.PROXY, 'http://10.237.28.11:8080')
 return c

def search():
 player = ctypes.windll.kernel32
 targetType = "MNFR2CH/A"#金色iphone7 plus
 storeList = [{'R401': '环贸'}, {'R581': '"五角场"'}, {'R359': '南京东路'}, {'R389': '浦东'},
     {'R683': '环球港'}, {'R390': '香港广场'}]
 url = "https://reserve.cdn-apple.com/CN/zh_CN/reserve/iPhone/availability.json"
 b = BytesIO()
 c = link(url, b)
 count = 1
 while True:
  print("第",count,"次请求")
  c.setopt(pycurl.URL, url)
  c.perform() #执行上述访问网址的操作
  jsonStr = b.getvalue().decode('utf-8')
  jsonList = jsonStr.split("\r\n")
  decodejson = json.loads(jsonList[-1])
  for store in storeList:
   for (k, v) in store.items():
    if decodejson[k][targetType] != "NONE":
     print(v, decodejson[k][targetType])
     print("https://reserve-cn.apple.com/CN/zh_CN/reserve/iPhone?partNumber="+targetType+"&channel=1&rv=&path=&sourceID=&iPP=false&appleCare=&iUID=&iuToken=&carrier=&store="+k)
     player.Beep(1000, 1000)
  time.sleep(5)
  count += 1
 b.close()
 c.close()
 print("完成")

if __name__ == "__main__":
 search()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用go和python递归删除.ds store文件的方法
Jan 22 Python
Tensorflow简单验证码识别应用
May 25 Python
Python 实现在文件中的每一行添加一个逗号
Apr 29 Python
Django Web开发中django-debug-toolbar的配置以及使用
May 06 Python
使用Python画股票的K线图的方法步骤
Jun 28 Python
python机器学习实现决策树
Nov 11 Python
PyCharm 2019.3发布增加了新功能一览
Dec 08 Python
python飞机大战pygame游戏框架搭建操作详解
Dec 17 Python
翻转数列python实现,求前n项和,并能输出整个数列的案例
May 03 Python
Python函数参数定义及传递方式解析
Jun 10 Python
keras Lambda自定义层实现数据的切片方式,Lambda传参数
Jun 11 Python
python读取mat文件生成h5文件的实现
Jul 15 Python
浅谈python可视化包Bokeh
Feb 07 #Python
详解tensorflow训练自己的数据集实现CNN图像分类
Feb 07 #Python
全面分析Python的优点和缺点
Feb 07 #Python
Tensorflow环境搭建的方法步骤
Feb 07 #Python
Python pandas常用函数详解
Feb 07 #Python
详解python字节码
Feb 07 #Python
Tensorflow之构建自己的图片数据集TFrecords的方法
Feb 07 #Python
You might like
在任意字符集下正常显示网页的方法二(续)
2007/04/01 PHP
ThinkPHP实现跨模块调用操作方法概述
2014/06/20 PHP
php封装的mysqli类完整实例
2016/10/18 PHP
为何说PHP引用是个坑,要慎用
2018/04/02 PHP
php 调用百度sms来发送短信的实现示例
2018/11/02 PHP
JQuery下拉框应用示例介绍
2014/04/23 Javascript
angularjs封装bootstrap时间插件datetimepicker
2016/06/20 Javascript
给easyui datebox扩展一个清空的实例
2016/11/09 Javascript
vuejs使用axios异步访问时用get和post的实例讲解
2018/08/09 Javascript
JavaScript创建对象方法实例小结
2018/09/03 Javascript
nodejs 使用nodejs-websocket模块实现点对点实时通讯
2018/11/28 NodeJs
在JavaScript中如何访问暂未存在的嵌套对象
2019/06/18 Javascript
JavaScript 反射和属性赋值实例解析
2019/10/28 Javascript
[01:41]DOTA2超级联赛专访YYF 称一辈子难忘TI2
2013/05/28 DOTA
[51:30]OG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/30 DOTA
[51:50]完美世界DOTA2联赛 Magma vs GXR 第一场 11.07
2020/11/10 DOTA
在Python下使用Txt2Html实现网页过滤代理的教程
2015/04/11 Python
python扫描proxy并获取可用代理ip的实例
2017/08/07 Python
python3使用scrapy生成csv文件代码示例
2017/12/28 Python
浅谈Pandas中map, applymap and apply的区别
2018/04/10 Python
Python FTP两个文件夹间的同步实例代码
2018/05/25 Python
python如何利用Mitmproxy抓包
2020/10/10 Python
荷兰度假屋租赁网站:Aan Zee
2020/02/28 全球购物
伦敦新晋轻奢耳饰潮牌:Tada & Toy
2020/05/25 全球购物
数组越界问题
2015/10/21 面试题
高级技校毕业生自荐信
2013/11/18 职场文书
售后服务承诺书
2014/03/26 职场文书
政风行风建设责任书
2014/07/23 职场文书
企业党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
公司向个人借款协议书范本
2014/10/09 职场文书
2015年食品安全工作总结
2015/05/15 职场文书
第一书记观后感
2015/06/08 职场文书
高中生军训感言
2015/08/01 职场文书
Python list去重且保持原顺序不变的方法
2021/04/03 Python
VUE中的v-if与v-show区别介绍
2022/03/13 Vue.js
Spring Cloud OAuth2实现自定义token返回格式
2022/06/25 Java/Android