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求素数示例分享
Feb 16 Python
python3实现抓取网页资源的 N 种方法
May 02 Python
Python中浅拷贝copy与深拷贝deepcopy的简单理解
Oct 26 Python
python爬虫超时的处理的实例
Dec 19 Python
pyqt5实现登录界面的模板
May 30 Python
Pyqt5实现英文学习词典
Jun 24 Python
Python tkinter 下拉日历控件代码
Mar 04 Python
python 两个一样的字符串用==结果为false问题的解决
Mar 12 Python
python如何写try语句
Jul 14 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
Sep 16 Python
Python文件名匹配与文件复制的实现
Dec 11 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
Jan 24 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 ftp文件上传函数(基础版)
2010/06/03 PHP
php设计模式 DAO(数据访问对象模式)
2011/06/26 PHP
php 模拟post_验证页面的返回状态(实例讲解)
2013/10/28 PHP
php实例分享之html转为rtf格式
2014/06/02 PHP
WordPress中is_singular()函数简介
2015/02/05 PHP
实现PHP中session存储及删除变量
2018/10/15 PHP
Windows Live的@live.com域名注册漏洞 利用代码
2006/12/27 Javascript
如何设置iframe高度自适应在跨域情况下的可用方法
2013/09/06 Javascript
js格式化时间小结
2014/11/03 Javascript
Bootstrap Modal遮罩弹出层代码分享
2016/11/21 Javascript
在js代码拼接dom对象到页面上去的模板总结(必看)
2017/02/14 Javascript
JavaScript实现类似淘宝的购物车效果
2017/03/16 Javascript
微信小程序 实现动态显示和隐藏某个控件
2017/04/27 Javascript
快速解决Vue项目在IE浏览器中显示空白的问题
2018/09/04 Javascript
详解Vue组件插槽的使用以及调用组件内的方法
2018/11/13 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
2018/11/21 Javascript
vue界面发送表情的实现代码
2020/09/11 Javascript
如何实现vue的tree组件
2020/12/03 Vue.js
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
2018/07/30 Python
Python3.6.x中内置函数总结及讲解
2019/02/22 Python
python正则-re的用法详解
2019/07/28 Python
python turtle 绘制太极图的实例
2019/12/18 Python
Pycharm+Python工程,引用子模块的实现
2020/03/09 Python
Django分组聚合查询实例分享
2020/04/29 Python
HTML5中如何显示视频呢 HTML5视频播放demo
2013/06/08 HTML / CSS
NIHAOMARKET官方海外旗舰店:意大利你好华人超市
2018/01/27 全球购物
北京某科技有限公司C# .net笔试题
2014/09/27 面试题
大学生怎样进行自我评价
2013/12/07 职场文书
外贸专业求职信
2014/03/09 职场文书
周年庆典主持词
2014/04/02 职场文书
车间安全生产标语
2014/06/06 职场文书
医院领导班子四风对照检查材料
2014/09/27 职场文书
四风自我剖析材料
2014/09/30 职场文书
2015年班干部工作总结
2015/04/29 职场文书
因工资原因离职的辞职信范文
2015/05/12 职场文书
JS前端宏任务微任务及Event Loop使用详解
2022/07/23 Javascript