写一段大麦网抢票的python程序
时间: 2023-09-02 22:12:05 浏览: 144
抢票程序需要先通过登录获取cookie和token,然后再发送请求进行抢票。
首先,需要导入requests和json库。
```
import requests
import json
```
然后,定义请求头和登录信息。
```
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36',
'Referer': 'https://www.damai.cn/',
'Origin': 'https://www.damai.cn/',
'Content-Type': 'application/json;charset=UTF-8'
}
login_data = {
"username": "your_username",
"password": "your_password"
}
```
接着,使用session模拟登录,获取cookie和token。
```
session = requests.session()
# 登录
login_url = 'https://secure.damai.cn/login?ru=https%3A%2F%2Fwww.damai.cn%2F'
session.post(login_url, headers=headers, data=json.dumps(login_data))
# 获取cookie和token
cookie = session.cookies.get_dict()
token_url = 'https://www.damai.cn/ajax/getToken.html'
token_data = {'t': '0.5479031191044676'}
token_res = session.post(token_url, headers=headers, data=json.dumps(token_data))
token = token_res.json()['token']
```
接下来,定义抢票的请求信息。
```
order_data = {
"buyNum": 1,
"chooseSeats": "",
"chooseSeatr": "",
"chooseFriends": "",
"addFriends": "",
"buyChannels": "",
"coupons": "",
"discount": "",
"eticket": "",
"invoice": "",
"invoiceTitle": "",
"memberCard": "",
"payChannels": "",
"presaleToken": "",
"price": "",
"project_id": "",
"quantity": 1,
"skuId": "",
"spm": "",
"ticketCode": "",
"ticketPriceId": "",
"ticketStatus": "",
"tickets": "",
"traceId": "",
"token": token
}
```
其中,需要填写的信息有:
- buyNum:购买数量
- chooseSeats:选座信息
- quantity:购买数量
- token:刚刚获取到的token
最后,定义抢票的函数。
```
def buy_ticket(project_id, sku_id, quantity):
# 订单请求信息
order_data['project_id'] = project_id
order_data['skuId'] = sku_id
order_data['quantity'] = quantity
# 发送抢票请求
order_url = 'https://piao.damai.cn/quickbuy.htm'
order_res = session.post(order_url, headers=headers, data=json.dumps(order_data), cookies=cookie)
order_result = order_res.json()
# 判断是否抢票成功
if order_result['success']:
print('抢票成功!订单号为:{}'.format(order_result['order']['orderId']))
else:
print('抢票失败,原因:{}'.format(order_result['errorMsg']))
```
使用方法:
```
buy_ticket('123456', '7890123', 2)
```
其中,第一个参数为活动的ID,第二个参数为票品的ID,第三个参数为购买数量。