listen_12306.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #!/usr/bin/env python
  2. # -*- encoding: utf-8 -*-
  3. '''
  4. @Author : liuyuqi
  5. @Contact : liuyuqi.gov@msn.cn
  6. @Time : 2019/11/18 03:21:04
  7. @Version : 1.0
  8. @License : (C)Copyright 2019
  9. @Desc : 12306余票查询
  10. '''
  11. import requests
  12. import json
  13. import smtplib
  14. import sys
  15. import time
  16. from random import randint
  17. from email.mime.text import MIMEText
  18. from email.header import Header
  19. class tl12306:
  20. def __init__(self):
  21. self.num = 1
  22. # 替换为你要查询的url地址
  23. self.url = 'https://kyfw.12306.cn/otn/leftTicket/queryA?leftTicketDTO.train_date=2018-09-30&leftTicketDTO.from_station=IZQ&leftTicketDTO.to_station=CBQ&purpose_codes=ADULT'
  24. def getlist(self):
  25. try:
  26. r = requests.get(self.url)
  27. if r.status_code == 200:
  28. j = json.loads(r.text)
  29. k = j['data']
  30. str1 = ""
  31. strData = ["G6305","D7501","G6325","D7521","D7533","D7529","D2381","G6337","D7525","G6321","D7513","G6313","G1607","G6309","D7533","D7517","G6329","D7505","G6345","G6341"]
  32. for r in k['result']:
  33. for cs in strData:
  34. if "|" + cs+"|" in r:
  35. if r.split('|')[-7] != '无': #二等座
  36. str1 = str1 + cs + ',有票啦~~\n'
  37. if len(str1)>5:
  38. print(str1)
  39. self.send_mail(str1)
  40. sys.stdout.write('\r')
  41. sys.stdout.write('已查询%d次~' % self.num)
  42. sys.stdout.flush()
  43. self.num+=1
  44. else:
  45. msg = '获取车票信息失败~~'
  46. print(msg)
  47. self.send_mail(msg)
  48. except Exception as e:
  49. print(e)
  50. def send_mail(self,str):
  51. # 第三方 SMTP 服务
  52. mail_host = "smtp.qq.com" # 设置服务器
  53. mail_user = "********@qq.com" # 用户名 发送者的邮箱
  54. mail_pass = "****************" # 口令 登录邮箱开启POP3/SMTP服务,输入授权码
  55. sender = '********@qq.com' # 发送者的邮箱
  56. receivers = ['********@qq.com'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
  57. message = MIMEText(str, 'plain', 'utf-8')
  58. message['From'] = Header("肥肥", 'utf-8')
  59. message['To'] = Header("圆圆", 'utf-8')
  60. message['Subject'] = Header("余票提醒", 'utf-8')
  61. try:
  62. smtpObj = smtplib.SMTP()
  63. smtpObj.connect(mail_host, 25) # 25 为 SMTP 端口号
  64. smtpObj.login(mail_user, mail_pass)
  65. smtpObj.sendmail(sender, receivers, message.as_string())
  66. print("邮件发送成功")
  67. except smtplib.SMTPException:
  68. print("Error: 无法发送邮件")
  69. if __name__ == '__main__':
  70. c = tl12306()
  71. print('监控中~')
  72. while True:
  73. c.getlist()
  74. time.sleep(randint(5,10))