代码拉取完成,页面将自动刷新
同步操作将从 crossin/snippet 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#-*- coding: utf-8 -*-
#
# 访问12306网站上某天某条线路上的车次信息
# 如果有自己关注的票,就发邮件通知
# 该程序只访问一次,实际使用时可通过 crontab 或计划任务定时执行
#
# 欢迎关注
# 微信公众号:Crossin的编程教室
# 微信号:crossincode
# 论坛:bbs.crossincode.com
import urllib2
import json
import smtplib
import time
import codecs
from email.mime.text import MIMEText
# 记录日志
def log(content):
t = time.strftime('%Y-%m-%d %H:%M:%S')
f = codecs.open('watcher.log', 'a', 'utf-8')
f.write('[%s]%s\n' % (t, content))
f.close()
# 发送邮件
def send_mail(content):
to_list=['xxx@gmail.com'] # 接收通知的邮箱
mail_host = 'smtp.163.com' #, 587 #设置服务器
mail_user = 'username' #替换为发件邮箱用户名
mail_pass = 'password' #替换为发件邮箱口令
mail_postfix = '163.com' #发件箱的后缀
me = "TicketsWatcher"+"<"+mail_user+"@"+mail_postfix+">"
msg = MIMEText(content,_subtype='plain',_charset='gb2312')
msg['Subject'] = 'There are some tickets you need.'
msg['From'] = me
msg['To'] = ";".join(to_list)
server = smtplib.SMTP()
server.connect(mail_host)
server.ehlo()
server.starttls()
server.login(mail_user,mail_pass)
server.sendmail(me, to_list, msg.as_string())
server.close()
log('sent mail successfully')
try:
# 请求地址根据实际要抓取的页面修改,参数包括日期、出发站、到达站
resp = urllib2.urlopen("https://kyfw.12306.cn/otn/lcxxcx/query?purpose_codes=ADULT&queryDate=2016-06-03&from_station=NJH&to_station=SHH")
result = resp.read()
data = json.loads(result)
datas = data['data']['datas']
for d in datas:
if d['station_train_code'] == 'Z39': # 设置关注的车次
content = 'tickes for hard seat of %s: %s' % (d['station_train_code'], d['yz_num'])
log(content)
if unicode(d['yz_num']) != u"无":
send_mail(content) # 如果不是“无”就发邮件通知
break
except Exception, e:
content = 'somethings wrong with the program:\n' + str(e)
log(content)
send_mail(content) # 出错时也发邮件
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。