12306对接接口及获取地区简写

# 获取12306地区简写
# coding=gbk

"""命令行火车票查看器
Usage:
  tickets [-gdtkz] <from> <to> <date>

Options:
  -h --help     Show help screen.
  -v,--version     0.0.1.
  --g           高铁.
  --d           动车.
  --t           特快.
  --k           快速.
  --z           直达.

Example:
    tickets 北京 上海 2016-10-10
    tickets -dg 成都 南京 2016-10-10
"""
from docopt import docopt
import requests
import re
from pprint import pprint

# 获取站点名的简称
def get_stationName_abb():
    url = 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.8988'
    # 添加verify=False参数不验证证书
    response = requests.get(url, verify=False)
    # [\u4e00-\u9fa5]匹配中文
    # [('北京北', 'VAP', 'beijingbei', 'bjb'), ('北京东', 'BOP', 'beijingdong', 'bjd'),
    stations = re.findall(u'([\u4e00-\u9fa5]+)\|([A-Z]+)\|([a-z]+)\|([a-z]+)', response.text)
    # [('北京北', 'VAP', 'beijingbei', 'bjb', '0'), ('北京东', 'BOP', 'beijingdong', 'bjd', '1'),
    # stations = re.findall(u'([\u4e00-\u9fa5]+)\|([A-Z]+)\|([a-z]+)\|([a-z]+)\|(\d)', response.text)

    # 入库操作
    for i in stations:
        # print(i[0],i[1],i[2],i[3])
        sql = "insert into address_12306(address,address_yw,qc,jx) values('%s','%s','%s','%s')"%(i[0],i[1],i[2],i[3])
        print(sql)
        db1.insert(sql)

    print(stations)

if __name__ == '__main__':
    # arguments = docopt(__doc__)
    get_stationName_abb()

对接12306火车票查询接口

# coding=gbk
import requests
train_date = '2023-03-19'   #出发日期
from_station = 'BJP'   # 出发地简称缩写
to_station = 'SHH'     #  目的地简称缩写
purpose_codes = 'ADULT'                     #乘客类型(成儿&学生),ADULT是成人,学生是0X00


# res = requests.get("https://kyfw.12306.cn/otn/leftTicket/log?leftTicketDTO.train_date='%s'&leftTicketDTO.from_station='%s'&leftTicketDTO.to_station='%s'&purpose_codes='%s'"%(train_date,from_station,to_station,purpose_codes))
# print(res.text)


res = requests.get("https://kyfw.12306.cn/otn/leftTicketPrice/query?leftTicketDTO.train_date=2022-03-18&leftTicketDTO.from_station=SHH&leftTicketDTO.to_station=BJP&leftTicketDTO.ticket_type=1&randCode=stzh")
print(res.json()['data'])

data数据

项目中使用

class Addresss(Resource):
    def post(self):
        parser = reqparse.RequestParser()
        # 添加验证参数id
        parser.add_argument('from_station', type=str, help='出发地')
        parser.add_argument('purpose_codes', type=str, help='成人还是学生')
        parser.add_argument('to_station', type=str, help='目的地')
        parser.add_argument('train_date', type=str, help='出发时间')

        # 启动检验处理
        args = parser.parse_args()



        # 查询出发地  和目的地是否存在
        sql = "select address_yw from address_12306 where address='%s'" % (args['from_station'])
        res = db1.find(sql)
        if res:
            # 查询目的地是否存在
            sql = "select address_yw from address_12306 where address='%s'" % (args['to_station'])
            res1 = db1.find(sql)
            if res1:
                if args['purpose_codes']:
                    if args['train_date'] == None:
                        return jsonify({'code': 403, 'msg': '请选择出发时间'})
                    else:
                        # 12306发起请求
                        print(args)
                        data = {'leftTicketDTO.train_date': args['train_date'], 'leftTicketDTO.from_station': res['address_yw'],
                                'leftTicketDTO.to_station':res1['address_yw'] , 'purpose_codes': args['purpose_codes']}
                        res =requests.get("https://kyfw.12306.cn/otn/leftTicketPrice/query?",params=data)
                        return jsonify({'code': 200, 'list': res.json()['data'],'msg':'查询成功'})
                else:
                    return jsonify({'code': 403, 'msg': '请选择票种'})
            else:
                return jsonify({'code': 403, 'msg': '目的地不存在'})
        else:
            return jsonify({'code': 403, 'msg': '出发地不存在'})




api.add_resource(Addresss, '/address_12306')

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值