python提取首字符 判断火车票座位_Python实现自动查取火车票余量,并发送邮件...

这个是之前在学校是真的闲的要吐的时候,自己做着玩的,也算是对Python的一次练习吧,里面全是一些字符串操作,没什么技术含量,各位大佬请让路啦~~嘻嘻

然后,代码长这样:

import requests

import json

import datetime

import time

import smtplib

from email.mime.text import MIMEText

from email.header import Header

def main():

# 输入要获取的车票信息

train_date_in=input("乘车日期(eg:2222-02-02):")

from_station=input("出发站:")

to_station=input("到达站:")

# 调用getStationCode()函数,将城市转化为对应代码

from_station = getStationCode(from_station)

to_station = getStationCode(to_station)

# url拼接

url = 'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date='+train_date_in+'&leftTicketDTO.from_station='+from_station+'&leftTicketDTO.to_station='+to_station+'&purpose_codes=ADULT'

train_info = requests.get(url).text

# 将获得的数据保存在data.json文件内

f = open('data.json','w',encoding='utf-8')

f.write(train_info)

f.close()

# 将获得的数据转化为json格式

before = open('data.json','r',encoding='utf-8')

data = json.load(before)

before.close()

print(type(data))

# 从json数据中取出map(城市和对应的代码)、result(各车次车票信息)

data = data['data']

map_ = data['map']

result = data['result']

# 调用getTrainInfo()函数,获得各车次信息

train_date = train_date_in[0:4] + train_date_in[5:7]

TICKET = train_date_in + '\n' + getTrainInfo(result,map_,train_date)

# 将车票信息发送到本人邮箱

sendEmail(TICKET)

while(True):

try:

# 定时发送,可以自定义邮件发送得时间,我这里设置的是整点发送

if(datetime.datetime.now().minute == 0):

sendEmail(TICKET)

time.sleep(20)

except Exception:

# print("出现异常,继续运行")

continue

else:

# print("没有异常")

continue

def getStationCode(station):

search = open('12306city_code.txt','r',encoding = 'utf-8')

lines = search.readlines()

for line in lines:

if(station in line):

station = line[-4:-1]

search.close()

return station

def getTrainInfo(result,map_,train_date):

count = 1

TICKET = ''

for i in result:

print(count)

if("列车运行图调整,暂停发售" in i):

print("列车运行图调整,暂停发售,再看看别的吧@_@")

elif("暂售至" in i):

print("您选择的时间段暂时还没有开售哦^-^")

elif("预订" not in i):

print("抱歉,该班车暂时不能预定3333...")

else:

# 获得班车号

train_name = i.find('|') + 1

train_name = i.find('|',train_name) + 1

train_name_start = i.find('|',train_name) + 1

train_name_end = i.find('|',train_name_start)

train_name = i[train_name_start:train_name_end]

print(train_name)

# 获得班车出发站-到达站信息

train_station = i.find('|',train_name_end) + 1

train_station = i.find('|',train_station) + 1

train_station = i.find('|',train_station) + 1

# 获得出发站名字

# print(i[train_station:train_station+3])

train_station_from = map_[i[train_station:train_station+3]]

print(train_station_from)

train_station = i.find('|',train_station) + 1

# 获得到达站名字

# print(i[train_station:train_station+3])

train_station_to = map_[i[train_station:train_station+3]]

print(train_station_to)

# 获得班车时间信息

train_time = i.find('|',train_station) + 1

# 获得列车发车时间

train_time_run = i[train_time:train_time+5]

print(train_time_run)

# 获得列车到站时间

train_time_stop = i[train_time+6:train_time+11]

print(train_time_stop)

# 拿到列车车票信息

ticket_info = i[i.find(train_date):]

print(ticket_info)

# 根据列车首字母获得不同类型列车的车票信息

# 查找K字头列车车票

if(train_name[0] == 'K'):

K_TICKET = getTrainTicket_K(ticket_info)

if(len(K_TICKET)>0):

TICKET = TICKET + '\n' + train_name + '\n' + train_station_from + '-' + train_station_to + '\n' + train_time_run + '-' + train_time_stop + '\n' + K_TICKET

# 查找T字头列车车票

if(train_name[0] == 'T'):

T_TICKET = getTrainTicket_T(ticket_info)

if(len(T_TICKET)>0):

TICKET = TICKET + '\n' + train_name + '\n' + train_station_from + '-' + train_station_to + '\n' + train_time_run + '-' + train_time_stop + '\n' + T_TICKET

# 查找D字头列车车票

if(train_name[0] == 'D'):

D_TICKET = getTrainTicket_D(ticket_info)

if(len(D_TICKET)>0):

TICKET = TICKET + '\n' + train_name + '\n' + train_station_from + '-' + train_station_to + '\n' + train_time_run + '-' + train_time_stop + '\n' + D_TICKET

# 查找Z字头列车车票

if(train_name[0] == 'Z'):

Z_TICKET = getTrainTicket_Z(ticket_info)

if(len(Z_TICKET)>0):

TICKET = TICKET + '\n' + train_name + '\n' + train_station_from + '-' + train_station_to + '\n' + train_time_run + '-' + train_time_stop + '\n' + Z_TICKET

# 查找G字头列车车票

if(train_name[0] == 'G'):

G_TICKET = getTrainTicket_G(ticket_info)

if(len(G_TICKET)>0):

TICKET = TICKET + '\n' + train_name + '\n' + train_station_from + '-' + train_station_to + '\n' + train_time_run + '-' + train_time_stop + '\n' + G_TICKET

print("\n\n")

count += 1

TICKET = TICKET + '\n'

print(TICKET)

return TICKET

def getTrainTicket_K(ticket_info):

K_TICKET = ''

# 拿到软卧车票信息

soft_sleeper_start = 27

soft_sleeper_end = ticket_info.find('|',soft_sleeper_start)

soft_sleeper = ticket_info[soft_sleeper_start:soft_sleeper_end]

if(len(soft_sleeper)>0):

soft_sleeper_ticket = "软卧:" + soft_sleeper

K_TICKET = K_TICKET + soft_sleeper_ticket

# 获得无座车票信息

no_seat_start = soft_sleeper_end + 3

no_seat_end = ticket_info.find('|',no_seat_start)

no_seat = ticket_info[no_seat_start:no_seat_end]

if(len(no_seat)>0):

no_seat_ticket = "无座:" + no_seat

K_TICKET = K_TICKET + '\n' + no_seat_ticket

# 获得硬卧车票信息

hard_sleeper_start = no_seat_end + 2

hard_sleeper_end = ticket_info.find('|',hard_sleeper_start)

hard_sleeper = ticket_info[hard_sleeper_start:hard_sleeper_end]

if(len(hard_sleeper)>0):

hard_sleeper_ticket = "硬卧:" + hard_sleeper

K_TICKET = K_TICKET + '\n' + hard_sleeper_ticket

# 获得硬座车票信息

hard_seat_start = hard_sleeper_end + 1

hard_seat_end = ticket_info.find('|',hard_seat_start)

hard_seat = ticket_info[hard_seat_start:hard_seat_end]

if(len(hard_seat)>0):

hard_seat_ticket = "硬座:" + hard_seat

K_TICKET = K_TICKET + '\n' + hard_seat_ticket

return K_TICKET

def getTrainTicket_T(ticket_info):

T_TICKET = ''

# 获得高级软卧车票信息

special_soft_sleeper_start = 25

special_soft_sleeper_end = ticket_info.find('|',special_soft_sleeper_start)

special_soft_sleeper = ticket_info[special_soft_sleeper_start:special_soft_sleeper_end]

if(len(special_soft_sleeper)>0):

special_soft_sleeper_ticket = "高级软卧:" + special_soft_sleeper

T_TICKET = T_TICKET + special_soft_sleeper_ticket

# 获得其他信息

other_start = special_soft_sleeper_end + 1

other_end = ticket_info.find('|',other_start)

other = ticket_info[other_start:other_end]

if(len(other)>0):

other_ticket = "其他:" + other

T_TICKET = T_TICKET + '\n' + other_ticket

# 获得软卧车票信息

soft_sleeper_start = other_end + 1

soft_sleeper_end = ticket_info.find('|',soft_sleeper_start)

soft_sleeper = ticket_info[soft_sleeper_start:soft_sleeper_end]

soft_sleeper_ticket = "软卧:" + soft_sleeper

T_TICKET = T_TICKET + '\n' + soft_sleeper_ticket

# 获得无座车票信息

no_seat_start = soft_sleeper_end + 3

no_seat_end = ticket_info.find('|',no_seat_start)

no_seat = ticket_info[no_seat_start:no_seat_end]

no_seat_ticket = "无座:" + no_seat

T_TICKET = T_TICKET + '\n' + no_seat_ticket

# 获得硬卧车票信息

hard_sleeper_start = no_seat_end + 2

hard_sleeper_end = ticket_info.find('|',hard_sleeper_start)

hard_sleeper = ticket_info[hard_sleeper_start:hard_sleeper_end]

hard_sleeper_ticket = "硬卧:" + hard_sleeper

T_TICKET = T_TICKET + '\n' + hard_sleeper_ticket

# 获得硬座车票信息

hard_seat_start = hard_sleeper_end + 1

hard_seat_end = ticket_info.find('|',hard_seat_start)

hard_seat = ticket_info[hard_seat_start:hard_seat_end]

hard_seat_ticket = "硬座:" + hard_seat

T_TICKET = T_TICKET + '\n' + hard_seat_ticket

return T_TICKET

def getTrainTicket_D(ticket_info):

D_TICKET = ''

# 20180820|3|H6|03|09|1|0||无|||||无||||无|||无|A0F0O0O0|AFOO|0

# 获取高级软卧车票

special_soft_sleeper_start = 26

special_soft_sleeper_end = ticket_info.find('|',special_soft_sleeper_start)

special_soft_sleeper = ticket_info[special_soft_sleeper_start:special_soft_sleeper_end]

if(len(special_soft_sleeper)>0):

special_soft_sleeper_ticket = "高级软卧:" + special_soft_sleeper

D_TICKET = D_TICKET + special_soft_sleeper_ticket

# 获得软卧车票信息

soft_sleeper_start = special_soft_sleeper_end + 2

soft_sleeper_end = ticket_info.find('|',soft_sleeper_start)

soft_sleeper = ticket_info[soft_sleeper_start:soft_sleeper_end]

if(len(soft_sleeper)>0):

soft_sleeper_ticket = "软卧:" + soft_sleeper

D_TICKET = D_TICKET + '\n' + soft_sleeper_ticket

# 获得无座车票信息

no_seat_start = soft_sleeper_end + 2

no_seat_end = ticket_info.find('|',no_seat_start)

no_seat = ticket_info[no_seat_start:no_seat_end]

if(len(no_seat)>0):

no_seat_ticket = "无座:" + no_seat

D_TICKET = D_TICKET + '\n' + no_seat_ticket

# 获得二等座车票信息

second_seat_start = no_seat_end + 4

second_seat_end = ticket_info.find('|',second_seat_start)

second_seat = ticket_info[second_seat_start:second_seat_end]

if(len(second_seat)>0):

second_seat_ticket = "二等座:" + second_seat

D_TICKET = D_TICKET + '\n' + second_seat_ticket

# 获得一等座车票信息

first_seat_start = second_seat_end + 1

first_seat_end = ticket_info.find('|',first_seat_start)

first_seat = ticket_info[first_seat_start:first_seat_end]

if(len(first_seat)>0):

first_seat_ticket = "一等座:" + first_seat

D_TICKET = D_TICKET + '\n' + first_seat_ticket

# 获取动卧车票信息

D_sleeper_start = first_seat_end + 2

D_sleeper_end = ticket_info.find('|',D_sleeper_start)

D_sleeper = ticket_info[D_sleeper_start:D_sleeper_end]

if(len(D_sleeper)>0):

D_sleeper_ticket = "动卧:" + D_sleeper

D_TICKET = D_TICKET + '\n' + D_sleeper_ticket

return D_TICKET

def getTrainTicket_Z(ticket_info):

Z_TICKET = ''

# 获取高级软卧车票

special_soft_sleeper_start = 25

special_soft_sleeper_end = ticket_info.find('|',special_soft_sleeper_start)

special_soft_sleeper = ticket_info[special_soft_sleeper_start:special_soft_sleeper_end]

if(len(special_soft_sleeper)>0):

special_soft_sleeper_ticket = "高级软卧:" + special_soft_sleeper

Z_TICKET = Z_TICKET + special_soft_sleeper_ticket

print(special_soft_sleeper_ticket)

# 获得软卧车票信息

soft_sleeper_start = special_soft_sleeper_end + 2

# hard_sleeper_start = 27

soft_sleeper_end = ticket_info.find('|',soft_sleeper_start)

soft_sleeper = ticket_info[soft_sleeper_start:soft_sleeper_end]

if(len(soft_sleeper)>0):

soft_sleeper_ticket = "软卧:" + soft_sleeper

Z_TICKET = Z_TICKET + '\n' + soft_sleeper_ticket

# 获得软座车票信息

soft_seat_start = soft_sleeper_end + 1

soft_seat_end = ticket_info.find('|',soft_seat_start)

soft_seat = ticket_info[soft_seat_start:soft_seat_end]

if(len(soft_seat)>0):

soft_seat_ticket = "软座:" + soft_seat

Z_TICKET = Z_TICKET + '\n' + soft_seat_ticket

# 获得无座车票信息

no_seat_start = soft_seat_end + 2

no_seat_end = ticket_info.find('|',no_seat_start)

no_seat = ticket_info[no_seat_start:no_seat_end]

if(len(no_seat)>0):

no_seat_ticket = "无座:" + no_seat

Z_TICKET = Z_TICKET + '\n' + no_seat_ticket

# 获得硬卧车票信息

hard_sleeper_start = no_seat_end + 2

hard_sleeper_end = ticket_info.find('|',hard_sleeper_start)

hard_sleeper = ticket_info[hard_sleeper_start:hard_sleeper_end]

if(len(hard_sleeper)):

hard_sleeper_ticket = "硬卧:" + hard_sleeper

Z_TICKET = Z_TICKET + '\n' + hard_sleeper_ticket

# 获得硬座车票信息

hard_seat_start = hard_sleeper_end + 1

hard_seat_end = ticket_info.find('|',hard_seat_start)

hard_seat = ticket_info[hard_seat_start:hard_seat_end]

if(len(hard_seat)>0):

hard_seat_ticket = "硬座:" + hard_seat

Z_TICKET = Z_TICKET + '\n' + hard_seat_ticket

return Z_TICKET

def getTrainTicket_G(ticket_info):

G_TICKET = ''

# 获得二等座车票信息

second_seat_start = 34

second_seat_end = ticket_info.find('|',second_seat_start)

second_seat = ticket_info[second_seat_start:second_seat_end]

if(len(second_seat)>0):

second_seat_ticket = "二等座:" + second_seat

G_TICKET = G_TICKET + second_seat_ticket

else:

second_seat_ticket = "二等座:" + '-'

G_TICKET = G_TICKET + second_seat_ticket

# 获得一等座车票信息

first_seat_start = second_seat_end + 1

first_seat_end = ticket_info.find('|',first_seat_start)

first_seat = ticket_info[first_seat_start:first_seat_end]

first_seat_ticket = "一等座:" + first_seat

G_TICKET = G_TICKET + '\n' + first_seat_ticket

# 获得商务座/特等座车票信息

special_seat_start = first_seat_end + 1

special_seat_end = ticket_info.find('|',special_seat_start)

special_seat = ticket_info[special_seat_start:special_seat_end]

special_seat_ticket = "商务座:" + special_seat

G_TICKET = G_TICKET + '\n' + special_seat_ticket

return G_TICKET

# 邮件发送模块

def sendEmail(message):

# 这是原版

'''

mail_host = "smtp.qq.com"

mail_user = "" # 发送邮箱

mail_pass = "" # 发送邮箱对应的POP3/SMTP服务授权码

receivers = [] # 收件人可以有多个,以列表形式存放

# 在text中传入要发送的内容

text=message

#三个参数:第一个为内容第二个是文本格式第三个是utf-8编码

message = MIMEText(text, 'plain', 'utf-8')

message['From'] = '' # 邮件发送者

message['To'] = '' # 邮件接受者

subject = "Python"

message['Subject'] = Header(subject, 'utf-8')

try:

smtpObj = smtplib.SMTP()

smtpObj.connect(mail_host, 25) # 25 为 SMTP 端口号

smtpObj.ehlo()

smtpObj.starttls()

smtpObj.login(mail_user,mail_pass)

smtpObj.sendmail(sender, receivers, message.as_string())

print ("邮件发送成功")

except Exception:

print ("邮件发送失败")

time.sleep(60)

'''

# 这是简化版

user = "2917919207@qq.com"

pwd = "tnggxargxcoxecca"

mail_host = "smtp.qq.com"

# 这里得收件人可以有多个

receivers = ['2917919207@qq.com']

# 在text中传入要发送的内容

text=message

# 三个参数:第一个为内容第二个是文本格式第三个是utf-8编码

message = MIMEText(text, 'plain', 'utf-8')

# 发件人

message['From'] = user

# 收件人

message['To'] = "all users"

# 邮件标题

subject = "乘风查票小助手"

message['Subject'] = Header(subject, 'utf-8')

try:

smtpObj = smtplib.SMTP()

smtpObj.connect(mail_host, 25) # 25 为 SMTP 端口号

smtpObj.ehlo()

smtpObj.starttls()

smtpObj.login(user,pwd)

smtpObj.sendmail(user, receivers, message.as_string())

print ("邮件发送成功")

except Exception:

print ("邮件发送失败")

time.sleep(60)

if __name__ == '__main__':

main()

代码可以直接复制粘贴,把邮箱数据改成自己的就可以正常运行

依赖库的安装可以去请教度娘,我就不再废话了

发送邮件的邮箱需要打开POP3/SMTP服务,我这边做一个演示,这个只针对不懂得人,知道的可以忽略这一坨。。。。

1、打开QQ邮箱

2、打开“设置”里面的“账号”

3、然后找到这个POP3/SMTP服务的设置的地方

4、点击开启之后:

5、最后

最后,把这一堆字母复制到上面的发送模块的"pwd"里面,user是对应的邮箱账号,然后运行程序即可

程序运行之后,它会先发送一条当前查询到的车票信息,之后到了整点你也会收到它帮你查到的车票信息,嘿嘿。

哦对了,12306里面有自己的一套车站代码,要做12306车票余量查询必须要用到那个东西,但是那个东西稍微大一点,这里不好放,有兴趣的同学可以去公众号【AAAAA小世界】回复12306拿到车站代码

哦还有,要把拿到的车站代码txt文件和这个Python文件放在同一个文件夹下才可以哦。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值