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 相关文章推荐
简单说明Python中的装饰器的用法
Apr 24 Python
python使用电子邮件模块smtplib的方法
Aug 28 Python
Python中shutil模块的学习笔记教程
Apr 04 Python
python模仿网页版微信发送消息功能
Feb 24 Python
浅谈Python中的私有变量
Feb 28 Python
Python实现的在特定目录下导入模块功能分析
Feb 11 Python
PyQt5实现让QScrollArea支持鼠标拖动的操作方法
Jun 19 Python
Django 数据库同步操作技巧详解
Jul 19 Python
Django rest framework jwt的使用方法详解
Aug 08 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
Jul 03 Python
python OpenCV学习笔记
Mar 31 Python
Python FuzzyWuzzy实现模糊匹配
Apr 28 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
PHP创建桌面快捷方式的实例代码
2014/02/17 PHP
PHP函数checkdnsrr用法详解(Windows平台用法)
2016/03/21 PHP
yii2.0实现创建简单widgets示例
2016/07/18 PHP
浅谈htmlentities 、htmlspecialchars、addslashes的使用方法
2016/12/09 PHP
取得一定长度的内容,处理中文
2006/12/20 Javascript
javascript 全角转换实现代码
2009/07/17 Javascript
基于jQuery实现表格数据的动态添加与统计的代码
2011/01/31 Javascript
JavaScript数组随机排列实现随机洗牌功能
2015/03/19 Javascript
使用iojs的jsdom库实现同步系统时间
2015/04/20 Javascript
jQuery+ajax实现无刷新级联菜单示例
2015/05/21 Javascript
jQuery实现仿百度帖吧头部固定导航效果
2015/08/07 Javascript
基于JavaScript实现通用tab选项卡(通用性强)
2016/01/07 Javascript
jquery 点击元素后,滚动条滚动至该元素位置的方法
2016/08/05 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
2016/08/27 Javascript
深入理解选择框脚本[推荐]
2016/12/13 Javascript
JS实现iframe自适应高度的方法示例
2017/01/07 Javascript
微信小程序页面传值实例分析
2017/04/19 Javascript
js canvas实现QQ拨打电话特效
2017/05/10 Javascript
js禁止表单重复提交
2017/08/29 Javascript
详解node字体压缩插件font-spider的用法
2018/09/28 Javascript
少女风vue组件库的制作全过程
2019/05/15 Javascript
详解Element-UI中上传的文件前端处理
2019/08/07 Javascript
Vue+abp微信扫码登录的实现代码示例
2020/01/06 Javascript
用Python编写脚本使IE实现代理上网的教程
2015/04/23 Python
Python中datetime常用时间处理方法
2015/06/15 Python
如何在mac环境中用python处理protobuf
2019/12/25 Python
浅谈JupyterNotebook导出pdf解决中文的问题
2020/04/22 Python
详解向scrapy中的spider传递参数的几种方法(2种)
2020/09/28 Python
简述索引存取方法的作用和建立索引的原则
2013/03/26 面试题
志愿者活动总结范文
2014/04/26 职场文书
2014最新开业庆典策划方案(5篇)
2014/09/15 职场文书
2014年大学生职业规划书:未来不是梦,只要勇敢冲!
2014/09/22 职场文书
2014年酒店工作总结范文
2014/11/17 职场文书
小学德育工作总结2015
2015/05/12 职场文书
python中subplot大小的设置步骤
2021/06/28 Python
JavaScript设计模式之原型模式详情
2022/06/21 Javascript