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 10 Python
Python在groupby分组后提取指定位置记录方法
Apr 20 Python
python selenium 对浏览器标签页进行关闭和切换的方法
May 21 Python
对Python中for复合语句的使用示例讲解
Nov 01 Python
对Python Pexpect 模块的使用说明详解
Feb 14 Python
使用celery执行Django串行异步任务的方法步骤
Jun 06 Python
深入浅析python3中的unicode和bytes问题
Jul 03 Python
详解Python中的分支和循环结构
Feb 11 Python
python爬虫可以爬什么
Jun 16 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
Feb 25 Python
Python爬虫数据的分类及json数据使用小结
Mar 29 Python
Python List remove()实例用法详解
Aug 02 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中获取文件扩展名的N种方法小结
2012/02/27 PHP
PHP字符串的编码问题的详细介绍
2013/04/27 PHP
基于php缓存的详解
2013/05/15 PHP
php过滤html中的其他网站链接的方法(域名白名单功能)
2014/04/24 PHP
ThinkPHP CURD方法之table方法详解
2014/06/18 PHP
laravel 解决Validator使用中出现的问题
2019/10/25 PHP
六款帮助你实现惊艳视差滚动效果的jQuery插件
2012/09/14 Javascript
Javascript Web Slider 焦点图示例源码
2013/10/10 Javascript
js定时调用方法成功后并停止调用示例
2014/04/08 Javascript
node.js中的emitter.emit方法使用说明
2014/12/10 Javascript
dedecms页面如何获取会员状态的实例代码
2016/03/15 Javascript
前端面试题及答案整理(二)
2016/08/26 Javascript
详解javascript表单的Ajax提交插件的使用
2016/12/29 Javascript
Angular.js中$resource高大上的数据交互详解
2017/07/30 Javascript
Vue实现typeahead组件功能(非常靠谱)
2017/08/26 Javascript
vue-infinite-loading2.0 中文文档详解
2018/04/08 Javascript
基于Vue 2.0 监听文本框内容变化及ref的使用说明介绍
2018/08/24 Javascript
node.js 模块和其下载资源的镜像设置的方法
2018/09/06 Javascript
仿vue-cli搭建属于自己的脚手架的方法步骤
2019/04/17 Javascript
[01:10:16]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第一局
2016/02/27 DOTA
python下函数参数的传递(参数带星号的说明)
2010/09/19 Python
Python中几种操作字符串的方法的介绍
2015/04/09 Python
在Django的通用视图中处理Context的方法
2015/07/21 Python
基于anaconda下强大的conda命令介绍
2018/06/11 Python
python获取中文字符串长度的方法
2018/11/14 Python
python面向对象法实现图书管理系统
2019/04/19 Python
Python 实现opencv所使用的图片格式与 base64 转换
2020/01/09 Python
快速解决Django关闭Debug模式无法加载media图片与static静态文件
2020/04/07 Python
python属于解释语言吗
2020/06/11 Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
2020/09/03 Python
利用CSS3的特性改变文本选中时的颜色
2013/09/11 HTML / CSS
详解CSS3中@media的实际使用
2015/08/04 HTML / CSS
详解CSS3的opacity属性设置透明效果的用法
2016/05/09 HTML / CSS
美国礼品卡商城: Gift Card Mall
2017/08/25 全球购物
优秀毕业生就业推荐信
2014/05/22 职场文书
600字作文之感受大自然
2019/11/27 职场文书