打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Python打造12306火车票预定系统直播教程

当你想查询一下火车票信息的时候,你还在上 12306 官网吗?或是打开你手机里的 APP?下面让我们来用 Python 写一个命令行版的火车票查看器, 只要在命令行敲一行命令就能获得你想要的火车票信息!如果你刚掌握了 Python 基础,这将是个不错的小练习。(注意:由于 12306 的接口经常变化,课程内容可能很快过期,如果遇到接口问题,需要根据最新的接口对代码进行适当修改才可以完成实验。)


1、知识点:


  • Python 基础知识的综合运用

  • Urllib,urllib2,json,cookielib库的使用

  • setuptools 的使用


2、效果截图:



3、部分代码(查询功能):


  • “2效果图”运用docopt、requests、colorama 及 prettytable 库,而今晚我们将为你讲述Urllib,urllib2,json,cookielib库的使用

# coding: utf-8  

'''命令行火车票查看器   Usage:      tickets [-dgktz]   Options:      -h, --help 查看帮助      -d         动车      -g         高铁      -k         快速      -t         特快      -z         直达   Examples:      tickets 上海 北京 2017-5-10      tickets -dg 成都 南京 2017-5-10   '''  

import requests   from docopt import docopt   from prettytable import PrettyTable   from colorama import init, Fore   from stations import stations   init()   class TrainsCollection:      header = '车次 车站 时间 历时 一等 二等 软卧 硬卧 硬座 无座'.split()    def __init__(self, available_trains, options):
  '''查询到的火车班次集合          :param available_trains: 一个列表, 包含可获得的火车班次, 每个                                   火车班次是一个字典          :param options: 查询的选项, 如高铁, 动车, etc...  
       '''
         self.available_trains = available_trains          self.options = options   def _get_duration(self, raw_train):          duration = raw_train.get('lishi').replace(':', '小时') + '分'

       if duration.startswith('00'):                  return duration[4:]          if duration.startswith('0'):                  return duration[1:]          return duration      @property
 
def trains(self):
  for raw_train in self.available_trains:              train_no = raw_train['station_train_code']              initial = train_no[0].lower()              if not self.options or initial in self.options:                  train = [                      train_no,           '\n'.join([Fore.GREEN + raw_train['from_station_name'] + Fore.RESET,                                 Fore.RED + raw_train['to_station_name'] + Fore.RESET]),                      '\n'.join([Fore.GREEN + raw_train['start_time'] + Fore.RESET,                                 Fore.RED + raw_train['arrive_time'] + Fore.RESET]),                      self._get_duration(raw_train),                      raw_train['zy_num'],                      raw_train['ze_num'],                      raw_train['rw_num'],                      raw_train['yw_num'],                      raw_train['yz_num'],                      raw_train['wz_num'],                  ]   yield train      def pretty_print(self):          pt = PrettyTable()          pt._set_field_names(self.header)   for train in self.trains:              pt.add_row(train)          print(pt)   def cli():
  '''Command-line interface'''      arguments = docopt(__doc__)      from_station = stations.get(arguments[''])      to_station = stations.get(arguments[''])      date = arguments['']      url = ('https://kyfw.12306.cn/otn/lcxxcx/query?'             'purpose_codes=ADULT&queryDate={}&'             'from_station={}&to_station={}').format(                  date, from_station, to_station             )      options = ''.join([          key for key, value in arguments.items() if value is True      ])      r = requests.get(url, verify=False)      available_trains = r.json()['data']['datas']      TrainsCollection(available_trains, options).pretty_print()   if __name__ == '__main__':   cli()

查询实现思路及预定功能如何实现,就在今晚(2017.4.28星期五) 20:30 - 23:00 在线免费直播课,为你讲述。


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python3 实现火车票查询工具
Python脚本实现12306火车票查询系统
教你在网上订购火车票
12306官方火车票Api接口
手把手教你使用Python网络爬虫获取B站视频选集内容(附源码)
Django框架(二十二)—— Django rest_framework-频率组件
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服