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保存字符串到文件的方法
Jul 01 Python
Python中的anydbm模版和shelve模版使用指南
Jul 09 Python
Python数据分析之真实IP请求Pandas详解
Nov 18 Python
Numpy数组转置的两种实现方法
Apr 17 Python
python 3.6.2 安装配置方法图文教程
Sep 18 Python
Python实现的特征提取操作示例
Dec 03 Python
python读出当前时间精度到秒的代码
Jul 05 Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
Feb 06 Python
keras中epoch,batch,loss,val_loss用法说明
Jul 02 Python
Python爬虫之Selenium鼠标事件的实现
Dec 04 Python
Django+Django-Celery+Celery的整合实战
Jan 20 Python
Python 带星号(* 或 **)的函数参数详解
Feb 23 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与MySQL交互使用详解
2006/10/09 PHP
PHP错误抑制符(@)导致引用传参失败Bug的分析
2011/05/02 PHP
解析htaccess伪静态的规则
2013/06/18 PHP
How to Auto Include a Javascript File
2007/02/02 Javascript
JavaScript修改css样式style
2008/04/15 Javascript
jQuery Dialog 弹出层对话框插件
2010/08/09 Javascript
浅谈JavaScript编程语言的编码规范
2011/10/21 Javascript
Javascript 面向对象(一)(共有方法,私有方法,特权方法)
2012/05/23 Javascript
IE中jquery.form中ajax提交没反应解决方法分享
2012/09/11 Javascript
使用js画图之圆、弧、扇形
2015/01/12 Javascript
JQuery选择器绑定事件及修改内容的方法
2015/01/23 Javascript
JS动态改变表格边框宽度的方法
2015/03/31 Javascript
JS+CSS3实现超炫的散列画廊特效
2016/07/16 Javascript
bootstrap使用validate实现简单校验功能
2016/12/02 Javascript
Angular之指令Directive用法详解
2017/03/01 Javascript
BootStrap注意事项小结(五)表单
2017/03/10 Javascript
jQuery UI Draggable + Sortable 结合使用(实例讲解)
2017/09/07 jQuery
Vue中的scoped实现原理及穿透方法
2018/05/15 Javascript
ES6学习笔记之字符串、数组、对象、函数新增知识点实例分析
2020/01/22 Javascript
js实现3D旋转相册
2020/08/02 Javascript
Vue双向数据绑定(MVVM)的原理
2020/10/03 Javascript
[06:43]2018DOTA2国际邀请赛寻真——VGJ.Thunder
2018/08/11 DOTA
python数字图像处理实现直方图与均衡化
2018/05/04 Python
python3将视频流保存为本地视频文件
2018/06/20 Python
简述 Python 的类和对象
2020/08/21 Python
python解包用法详解
2021/02/17 Python
adidas旗下高尔夫装备供应商:TaylorMade Golf(泰勒梅高尔夫)
2016/08/28 全球购物
日本食品网上商店:JaponShop.com
2017/11/28 全球购物
公司营业员的工作总结自我评价
2013/10/05 职场文书
个人自我鉴定
2013/11/07 职场文书
小学校长先进事迹材料
2014/05/13 职场文书
党员弘扬焦裕禄精神思想汇报
2014/09/10 职场文书
中国世界遗产导游词
2015/02/13 职场文书
2015年社区纪检工作总结
2015/04/21 职场文书
小学数学教师研修感悟
2015/11/18 职场文书
python如何正确使用yield
2021/05/21 Python