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算法学习之桶排序算法实例(分块排序)
Dec 18 Python
Python中规范定义命名空间的一些建议
Jun 04 Python
python使用turtle库绘制时钟
Mar 25 Python
python实现归并排序算法
Nov 22 Python
Python Django的安装配置教程图文详解
Jul 17 Python
Django时区详解
Jul 24 Python
Pytorch 实现自定义参数层的例子
Aug 17 Python
Python PyInstaller安装和使用教程详解
Jan 08 Python
python中Ansible模块的Playbook的具体使用
May 28 Python
Python xmltodict模块安装及代码实例
Oct 05 Python
python爬虫中的url下载器用法详解
Nov 30 Python
python not运算符的实例用法
Jun 30 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 mssql 数据库分页SQL语句
2008/12/16 PHP
PHP中使用CURL获取页面title例子
2015/01/07 PHP
Opcache导致php-fpm崩溃nginx返回502
2015/03/02 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
Code:findPosX 和 findPosY
2006/12/20 Javascript
一个简单的瀑布流效果(主体形式自写)
2013/05/27 Javascript
禁止选中文字兼容IE、Chrome、FF等
2013/09/04 Javascript
自定义ExtJS控件之下拉树和下拉表格附源码
2013/10/15 Javascript
jquery统计复选框选中示例
2013/11/05 Javascript
当json键为数字时的取值方法解析
2013/11/15 Javascript
JS控制弹出新页面窗口位置和大小的方法
2015/03/02 Javascript
js通过classname来获取元素的方法
2016/11/24 Javascript
Vue from-validate 表单验证的示例代码
2017/09/26 Javascript
解析Vue2 dist 目录下各个文件的区别
2017/11/22 Javascript
Vue 路由切换时页面内容没有重新加载的解决方法
2018/09/01 Javascript
微信小程序用户授权、位置授权及获取微信绑定手机号
2019/07/18 Javascript
vue实现滑动到底部加载更多效果
2020/10/27 Javascript
基于layui框架响应式布局的一些使用详解
2019/09/16 Javascript
Vue父子传递实例讲解
2020/02/14 Javascript
vue 页面回退mounted函数不执行的解决方案
2020/07/26 Javascript
vue npm install 安装某个指定的版本操作
2020/08/11 Javascript
javascript实现雪花飘落效果
2020/08/19 Javascript
[44:15]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第二局
2016/03/06 DOTA
[01:07:41]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python获取当前日期和时间的方法
2015/04/30 Python
python通过get,post方式发送http请求和接收http响应的方法
2015/05/26 Python
python制作企业邮箱的爆破脚本
2016/10/05 Python
python返回数组的索引实例
2019/11/28 Python
python中Ansible模块的Playbook的具体使用
2020/05/28 Python
Python读取Excel一列并计算所有对象出现次数的方法
2020/09/04 Python
协程Python 中实现多任务耗资源最小的方式
2020/10/19 Python
俄罗斯便宜的在线服装商店:GroupPrice
2020/04/10 全球购物
高中地理教学反思
2014/01/29 职场文书
拓展策划方案
2014/06/03 职场文书
股份转让协议书范本
2015/01/27 职场文书
校本培训个人总结
2015/02/28 职场文书