# 12306车票查询telegram通知 **Repository Path**: helpproject/12306-ticket-query ## Basic Information - **Project Name**: 12306车票查询telegram通知 - **Description**: 12306车票查询telegram通知 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-03-01 - **Last Updated**: 2024-04-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 12306车票查询telegram通知 #### 介绍 12306车票查询telegram通知 #### 使用说明 ``` #!/usr/bin/env python # coding: utf-8 def ticket_api(ticket_url): import re import requests from pprint import pprint url = 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.8971' # 发送get请求,不判断证书 response = requests.get(url) # 使用正则表达式提取所有的站点:汉字和大写代号 stations = dict(re.findall(u'([\u4e00-\u9fa5]+)\|([A-Z]+)', response.text)) # 转换成字典就是为了将汉字站点和字母代号分开且有一一对应关系:键-->值 # pprint(stations.keys()) # pprint(stations.values()) import requests from bs4 import BeautifulSoup import json # newsurl = 'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2019-04-13&leftTicketDTO.from_station=BJP&leftTicketDTO.to_station=TJP&purpose_codes=ADULT' res = requests.get(ticket_url) parsed_json = json.loads(res.text) result = parsed_json['data']['result'] ticket = [] for result in result: data_list = result.split('|') if data_list[30] != '无' and data_list[30]: ticket.append({ '车次': data_list[3], '出发站': list(stations.keys())[list(stations.values()).index(data_list[4])], '到达站': list(stations.keys())[list(stations.values()).index(data_list[7])], '出发时间': data_list[8], '到达时间': data_list[9], '历时': data_list[10], '一等座': data_list[31], '二等座': data_list[30], }) first_class_seat = '最近一次车票信息:\n【车次】'+ticket[0]['车次']+'\n【始发站】'+ticket[0]['出发站']+' --> '+ticket[0]['到达站']+'\n【始发时间】'+ticket[0]['出发时间']+' ~ '+ticket[0]['到达时间']+'\n【历时】'+ticket[0]['历时']+'\n【一等座】'+ticket[0]['一等座']+'\n【二等座】'+ticket[0]['二等座']+'' # import pandas # df = pandas.DataFrame(ticket) # cols=['车次', '出发站', '到达站', '出发时间', '到达时间', '历时', '一等座', '二等座'] # df=df.loc[:,cols] # df import requests token = 'XXXXX' chat_id = 'XXXXX' url = 'https://api.telegram.org/bot'+token+'/sendMessage' message = { 'chat_id': '-'+chat_id, 'text': first_class_seat, } proxies = { "http": "socks5://127.0.0.1:10801", "https": "socks5://127.0.0.1:10801" } response = requests.request('POST',url, data=message, proxies=proxies) print(response.text) import time import sqlite3 as lite with lite.connect('test.sqlite') as con: cur = con.cursor() cur.execute('select * from searche_ticket_list') data = cur.fetchall() for rec in data: if rec[4] >= time.time(): train_date = time.strftime("%Y-%m-%d", time.localtime(rec[4])) newsurl = 'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date='+train_date+'&leftTicketDTO.from_station='+stations[rec[0]]+'&leftTicketDTO.to_station='+stations[rec[1]]+'&purpose_codes=ADULT' ticket_api(newsurl)```