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获取linux主机ip的简单实现方法
Apr 18 Python
深入解答关于Python的11道基本面试题
Apr 01 Python
在Python web中实现验证码图片代码分享
Nov 09 Python
python 中if else 语句的作用及示例代码
Mar 05 Python
python微信公众号开发简单流程
Mar 23 Python
python中itertools模块zip_longest函数详解
Jun 12 Python
Python实现获取系统临时目录及临时文件的方法示例
Jun 26 Python
Python进阶之使用selenium爬取淘宝商品信息功能示例
Sep 16 Python
pycharm显示远程图片的实现
Nov 04 Python
简单了解django文件下载方式
Feb 10 Python
Python使用grequests并发发送请求的示例
Nov 05 Python
如何利用python创作字符画
Jun 25 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
短波收音机简介
2021/03/01 无线电
php使用sql server验证连接数据库的方法
2014/12/25 PHP
php数据结构之顺序链表与链式线性表示例
2018/01/22 PHP
jquery之Document元素选择器篇
2008/08/14 Javascript
javascript instanceof 与typeof使用说明
2010/01/11 Javascript
jquery选择器之层级过滤选择器详解
2014/01/27 Javascript
jquery的ajax跨域请求原理和示例
2014/05/08 Javascript
使用jquery.qrcode生成彩色二维码实例
2014/08/08 Javascript
如何解决ligerUI布局时Center中的Tab高度大小
2015/11/24 Javascript
简要了解jQuery移动web开发的响应式布局设计
2015/12/04 Javascript
IE6-IE9使用JSON、table.innerHTML所引发的问题
2015/12/22 Javascript
详解JavaScript的AngularJS框架中的作用域与数据绑定
2016/03/04 Javascript
轻松5句话解决JavaScript的作用域
2016/07/15 Javascript
图解prototype、proto和constructor的三角关系
2016/07/31 Javascript
jQuery中常用动画效果函数(日常整理)
2016/09/17 Javascript
微信小程序技巧之show内容展示,上传文件编码问题
2017/01/23 Javascript
Bootstrap路径导航与分页学习使用
2017/02/08 Javascript
angularjs实现多张图片上传并预览功能
2017/02/24 Javascript
深入理解Vue 的条件渲染和列表渲染
2017/09/01 Javascript
详解vue 单页应用(spa)前端路由实现原理
2018/04/04 Javascript
vue中 this.$set的用法详解
2019/09/06 Javascript
jQuery实现轮播图效果
2019/11/26 jQuery
OpenLayers3实现地图鹰眼以及地图比例尺的添加
2020/09/25 Javascript
Python对文件操作知识汇总
2016/05/15 Python
Python对切片命名的实现方法
2018/10/16 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
python算法题 链表反转详解
2019/07/02 Python
使用python的turtle绘画滑稽脸实例
2019/11/21 Python
OpenCV 表盘指针自动读数的示例代码
2020/04/10 Python
python中selenium库的基本使用详解
2020/07/31 Python
html5简介及新增功能介绍
2020/05/18 HTML / CSS
激励口号大全
2014/06/17 职场文书
学习型党组织心得体会
2014/09/12 职场文书
销售辞职信范文
2015/03/02 职场文书
市场督导岗位职责
2015/04/10 职场文书
关于SpringBoot 使用 Redis 分布式锁解决并发问题
2021/11/17 Redis