构造时间参数以及下单购票

  • 1. 构造时间参数
  • 2. 下单购票
  • 3. 组织运行逻辑

学习目标

  1. 了解 构造时间参数
  2. 了解 下单购票逻辑

1. 构造时间参数

# 12306.utils.parse_dateimport datetimedef parseDate(train_date):""":param train_date: '2017-12-12':return:"""week_name = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]month_name = "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split()y, m, d = map(int, train_date.split("-"))weekday = datetime.datetime(y, m, d).weekday()# Fri Nov 24 2017 00:00:00 GMT+0800 (中国标准时间)return "{0} {1} {2} {3} 00:00:00 GMT+0800 (中国标准时间)".format(week_name[weekday], month_name[m - 1], d, y)

2. 下单购票

# 12306.funk12306.Funk12306.buy_ticket# 提交订单,并获取排队人数,和车票的真实余数url = 'https://kyfw.12306.cn/otn/confirmPassenger/getQueueCount'data = {'train_date': parseDate(train_date),  # Fri Nov 24 2017 00:00:00 GMT+0800 (中国标准时间)'train_no': train_info_dict['train_no'],  # 6c0000G31205'stationTrainCode': train_info_dict['stationTrainCode'],  # G312'seatType': seat_type,  # 席别'fromStationTelecode': train_info_dict['from_station'],  # one_train[6]'toStationTelecode': train_info_dict['to_station'],  # ? one_train[7]'leftTicket': train_info_dict['leftTicket'],  # one_train[12]'purpose_codes': '00','train_location': train_info_dict['train_location'],  # one_train[15]'_json_att': '','REPEAT_SUBMIT_TOKEN': repeat_submit_token}resp = self.s.post(url, data=data)print(resp.text)print('此时排队买票的人数为:{}'.format(json.loads(resp.text)['data']['count']))ticket = json.loads(resp.text)['data']['ticket']print('此时该车次的余票数量为:{}'.format(ticket))if ticket == '0':print('没有余票,购票失败')return '没有余票,购票失败'# 确认订单,进行扣票 需要 key_check_isChangeurl = 'https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue'data = {'passengerTicketStr': passengerTicketStr.encode('utf-8'),'oldPassengerStr': oldPassengerStr.encode('utf-8'),'randCode': '','purpose_codes': '00','key_check_isChange': key_check_isChange,'leftTicketStr': leftTicket,'train_location': train_location,  # one_train[15]'choose_seats': '',  # 选择坐席 ABCDEF 上中下铺 默认为空不选'seatDetailType': '000','whatsSelect': '1','roomType': '00','dwAll': 'N',  # ?'_json_att': '','REPEAT_SUBMIT_TOKEN': repeat_submit_token}resp = self.s.post(url, data=data)print(json.loads(resp.text))if json.loads(resp.text)['status'] == False or json.loads(resp.text)['data']['submitStatus'] == False:print('扣票失败')return '扣票失败'# 排队等待 返回waittime  获取 requestID 和 orderIDtimestamp = str(int(time.time() * 1000))  # str(time.time() * 1000)[:-4]url = 'https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime?random=%s&tourFlag=dc&_json_att=&REPEAT_SUBMIT_TOKEN=%s' % (timestamp, repeat_submit_token)resp = self.s.get(url)print(resp.text)try:orderID = json.loads(resp.text)['data']['orderId']except:# 排队等待 返回waittime  获取 requestID 和 orderIDtimestamp = str(int(time.time() * 1000)) # str(time.time() * 1000)[:-4]url = 'https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime?random=%s&tourFlag=dc&_json_att=&REPEAT_SUBMIT_TOKEN=%s' % (timestamp, repeat_submit_token)resp = self.s.get(url)print(resp.text)try:orderID = json.loads(resp.text)['data']['orderId']except:return '购票失败'# 订单结果url = 'https://kyfw.12306.cn/otn/confirmPassenger/resultOrderForDcQueue'data = {'orderSequence_no': orderID,'_json_att': '','REPEAT_SUBMIT_TOKEN': repeat_submit_token}resp = self.s.post(url, data=data)print(resp.text)

3. 组织运行逻辑

# 12306.funk12306.Funk12306.rundef run(self):# 登录 获取cookiesself.get_cookies()# 买票self.buy_ticket()if __name__ == '__main__':username = input('请输入12306账号:')password = input('请输入12306密码:')funk = Funk12306(username, password)funk.run()

小结

  1. 了解 构造时间参数
  2. 了解 下单购票逻辑

【12306购票】构造时间参数以及下单购票相关推荐

  1. 12306官方服务器不稳定,12306官方再次出现服务器故障 无法购票

    中关村在线消息:今天中午,有网友在微博称目前12306官网疑似出现服务器故障,多人出现加载失败.无法购票等问题,已无法顺利完成购票操作,目前官方还未对此回应. 12306官网出现故障 无法购买车票 据 ...

  2. 为什么只能取出购票信息单_如何换取购票信息单 取票取出的是购票信息单

    最近这两年关于火车票的购买和换取都发生了很大的变化,现在购买火车票可以使用火车票候补功能,不用再去抢票软件上付费抢票了,现在火车票进入无纸化时代,不用取火车票也能上车,这得益于电子客票的出现.不过很多 ...

  3. 全国各地12306订票时间大集合

    全国各地12306订票时间大集合,12306什么时候放票一查便知道!本12306订票时间汇总是摘自12306官网最新时间表,买票之前,先看12306什么时候放票才能增加第一时间买票.想看各地12306 ...

  4. find指定具体时间参数-newermt

    之前在写一个文件处理脚本的时候,需要查找在某个具体时间段内生成的批量文件,第一时间想到的是"find -mtime",但是这种查找的时间单位是天,怎么精确到分钟呢?或者说按照时间戳 ...

  5. Spring Cloud【Finchley】-07Feign构造多参数GET/POST请求

    文章目录 概述 调用顺序 Feign构造多参数GET请求 url参数和方法参数一一对应 map接收 Feign构造多参数POST请求 源码 概述 Spring Cloud-06服务消费者整合Feign ...

  6. ElementUI中使用el-time-picker向SpringBoot传输24小时制时间参数以及数据库中怎样存储

    场景 前端需要获取24小时制的时间参数并传递到后台存储到数据库. 在数据库中存储的是 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道 ...

  7. 前后端传递时间参数偶遇参数类型转换异常

    org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert val ...

  8. NXP(I.MX6uLL)DDR3实验——DDR3重要时间参数、时钟配置与原理图简析

    目录 DDR3 内存时间参数 传输速率 tRCD 参数 CL 参数 AL 参数 tRC 参数 tRAS 参数 I.MX6U MMDC内存控制器简介 MMDC内存控制器简介 MMDC内存控制器信号引脚 ...

  9. 双代号网络图节点时间参数_管理和实务都考!快速学会单代号与双代号参数计算...

    工程网络计划是二级建造师<建设工程施工管理>科目每年均会进行考核的高频考点,重点在双代号.单代号网络计划的概念及应用.主要题型为通过网络图或文字描述计算相关网络参数或确定关键线路,本篇就双 ...

最新文章

  1. java.sql.SQLException: The server time zone value ‘Öйú±ê׼ʱ¼ 解决方案
  2. 存储过程,触发器,函数
  3. C++ lambda表达式
  4. python连接oracle
  5. 在 Java 项目中打印错误日志的正确姿势,排查问题更方便,非常实用!
  6. 这些 Linux 的“自动化”技巧,教你轻松完成任务
  7. java的源代码文件扩展名_【单选题】Java 的源代码文件具有( )的扩展名 (5.0分) A. .c B. .class C...
  8. 11.10 chkconfig:管理开机服务
  9. C中关于存储类的理解
  10. Docker之DockerFile讲解
  11. Python使用UDP协议打造在线时间服务器
  12. Jqurey 得到url参数 getUrlParam
  13. Oracle数据库-建库、建表空间,建用户
  14. 图片验证码获取及验证
  15. html5 blockquote,HTML5 Blockquote引用区块使用实例
  16. 怎么将自己的头像p到特定的背景图_怎么把自己的头像和背景分离出来:用ps抠图...
  17. 用静息态fMRI映射人脑多巴胺能影像
  18. 活动并发测试-1000个不同用户同时并发请求报名笔记
  19. python 绕过国科大教务系统获取所有学生成绩
  20. python word转excel_看Python如何无缝转换Word和Excel

热门文章

  1. TP关闭调试模式后报错
  2. Android 截屏与 WebView 长图分享经验总结
  3. ThinkPHP5 : 分页paginate()
  4. 分享88个ASP.NET企业网站源码,总有一款适合您
  5. python实现excel筛选功能
  6. 【转】UILabel上显示笑脸符号 赞一个(超酷)
  7. 下载文件safari会变成.exe
  8. 【论文笔记_目标检测_2022】POLYLOSS: A POLYNOMIAL EXPANSION PERSPECTIVE OF CLASSIFICATION LOSS FUNCTIONS
  9. ES 8.x 系列教程:ES 8.0 服务安装(可能是最详细的ES 8教程)
  10. Flink实战 - 统计每个店铺每日GMV