From fb92dbaece5ef0f9343b6ade9494e9c4191780bc Mon Sep 17 00:00:00 2001 From: wenxianping <931128603@qq.com> Date: Sat, 13 Jan 2018 23:08:03 +0800 Subject: [PATCH] =?UTF-8?q?=E9=AA=8C=E8=AF=81=E7=A0=81=E8=AF=86=E5=88=AB?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E5=A2=9E=E5=8A=A0=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E9=82=AE=E7=AE=B1=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 12 ++++++++++ config/emailConf.py | 42 +++++++++++++++++++++++++++++++++ config/ticket_config.yaml | 47 ++++++++++++++++++++++++------------- init/select_ticket_info.py | 16 ++++++++----- tkcode | Bin 13646 -> 14901 bytes 5 files changed, 95 insertions(+), 22 deletions(-) create mode 100644 config/emailConf.py diff --git a/README.md b/README.md index 3d6d4f1..5e166d1 100644 --- a/README.md +++ b/README.md @@ -74,3 +74,15 @@ - 2018.1.12更新 - 优化抢票页面逻辑 -增强代码稳定性 + +- 2018.1.13更新 + - 修改下单验证码功能 + - 增加邮箱功能 + ``` + #is_email: 是否需要邮件通知 ex: True or False 切记,邮箱加完一定要到config目录下测试emailConf功能是否正常 + #email: 发送的邮箱地址 ex: 1@qq.com + #notice_email_list: 被通知人邮箱 ex: 2@qq.com + #username: 邮箱账号 + #password: 邮箱密码 + #host: 邮箱地址 + ``` diff --git a/config/emailConf.py b/config/emailConf.py new file mode 100644 index 0000000..2a5f8fb --- /dev/null +++ b/config/emailConf.py @@ -0,0 +1,42 @@ +# -*- coding: utf8 -*- +__author__ = 'MR.wen' +from email.header import Header +from email.mime.text import MIMEText +from config.ticketConf import _get_yaml +import smtplib + + +def sendEmail(msg): + """ + 邮件通知 + :param str: email content + :return: + """ + email_conf = _get_yaml() + is_email = email_conf["email_conf"]["is_email"] + if is_email: + sender = email_conf["email_conf"]["email"] + receiver = email_conf["email_conf"]["notice_email_list"] + subject = '恭喜,您已订票成功' + username = email_conf["email_conf"]["username"] + password = email_conf["email_conf"]["password"] + host = email_conf["email_conf"]["host"] + s = "{0}".format(msg) + + msg = MIMEText(s, 'text', 'utf-8') # 中文需参数‘utf-8’,单字节字符不需要 + msg['Subject'] = Header(subject, 'utf-8') + msg['From'] = sender + msg['To'] = receiver + + smtp = smtplib.SMTP() + smtp.connect(host) + smtp.login(username, password) + smtp.sendmail(sender, receiver.split(","), msg.as_string()) + smtp.quit() + print("邮件已通知, 请查收") + else: + pass + + +if __name__ == '__main__': + sendEmail(1) \ No newline at end of file diff --git a/config/ticket_config.yaml b/config/ticket_config.yaml index ea44fb3..ecdd254 100644 --- a/config/ticket_config.yaml +++ b/config/ticket_config.yaml @@ -22,34 +22,40 @@ #ticke_peoples: 乘客 #damatu:打码兔账号,用于自动登录 #is_aotu_code是否自动打码,如果选择Ture,则调用打码兔打码,默认不使用打码兔 +#is_email: 是否需要邮件通知 ex: True or False 切记,邮箱加完一定要到config目录下测试emailConf功能是否正常 +#email: 发送的邮箱地址 ex: 1@qq.com +#notice_email_list: 被通知人邮箱 ex: 2@qq.com +#username: 邮箱账号 +#password: 邮箱密码 +#host: 邮箱地址 + + set: - station_date: "2018-02-10" + station_date: "2018-02-07" station_trains: - - "T17" - - "T297" -# - "G2365" -# - "G1371" -# - "G1377" -# - "G1329" -# - "G1305" + - "G4741" + - "G2365" + - "G1371" + - "G1377" + - "G4933" # - "G1359" # - "G1361" # - "G1373" # - "G1363" # - "G4933" - from_station: "北京" - to_station: "牡丹江" + from_station: "上海" + to_station: "长沙" set_type: - - "硬卧" + - "一等座" is_more_ticket: True ticke_peoples: - - "" - - "" + - "宋倩倩" +# - "彭淑杰" 12306count: # - uesr: "" -# - pwd: "649823049lilymin" - - uesr: "@qq.com" - - pwd: "QWERTY" +# - pwd: "apple1995" + - uesr: "" + - pwd: "songyu1995" select_refresh_interval: 0.1 expect_refresh_interval: 0.3 @@ -61,5 +67,14 @@ damatu: uesr: "" pwd: "wen1995" +email_conf: + is_email: True + email: "" + notice_email_list: "" + username: ".wen" + password: "!" + host: "mail..com" + + diff --git a/init/select_ticket_info.py b/init/select_ticket_info.py index 1df7955..902f2ff 100644 --- a/init/select_ticket_info.py +++ b/init/select_ticket_info.py @@ -10,6 +10,7 @@ import sys import time from collections import OrderedDict +from config.emailConf import sendEmail from config.ticketConf import _get_yaml from damatuCode.damatuWeb import DamatuApi from myException.PassengerUserException import PassengerUserException @@ -457,7 +458,7 @@ class select: if is_node_code: print("正在使用自动识别验证码功能") randurl = 'https://kyfw.12306.cn/otn/passcodeNew/checkRandCodeAnsyn' - codeimg = 'https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=passenger&rand=sjrand&%s' % random.random() + codeimg = 'https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=passenger&rand=randp&%s' % random.random() result = myurllib2.get(codeimg) img_path = './tkcode' open(img_path, 'wb').write(result) @@ -471,16 +472,16 @@ class select: } fresult = json.loads(myurllib2.Post(randurl, randData), encoding='utf8') # 校验验证码是否正确 checkcode = fresult['data']['msg'] - if checkcode == 'FALSE': - print ("验证码有误,第{}次尝试重试".format(i)) - else: + if checkcode == 'TRUE': print("验证码通过,正在提交订单") data['randCode'] = randCode break + else: + print ("验证码有误, 接口返回{0} 第{1}次尝试重试".format(fresult, i)) else: print("不需要验证码") break - print("".join(data)) + # print("".join(data)) checkQueueOrderResult = json.loads(myurllib2.Post(checkQueueOrderUrl, data)) if "status" in checkQueueOrderResult and checkQueueOrderResult["status"]: c_data = checkQueueOrderResult["data"] if "data" in checkQueueOrderResult else {} @@ -526,6 +527,7 @@ class select: if queryOrderWaitTimeResult: if "status" in queryOrderWaitTimeResult and queryOrderWaitTimeResult["status"]: if "orderId" in queryOrderWaitTimeResult["data"] and queryOrderWaitTimeResult["data"]["orderId"] is not None: + sendEmail("恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306,访问‘未完成订单’,在30分钟内完成支付!".format(queryOrderWaitTimeResult["data"]["orderId"])) raise ticketIsExitsException("恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306,访问‘未完成订单’,在30分钟内完成支付!".format(queryOrderWaitTimeResult["data"]["orderId"])) elif "msg" in queryOrderWaitTimeResult["data"] and queryOrderWaitTimeResult["data"]["msg"]: print queryOrderWaitTimeResult["data"]["msg"] @@ -540,10 +542,12 @@ class select: print("第{}次排队中,请耐心等待".format(num)) else: print("排队中") - time.sleep(2) + time.sleep(1) order_id = self.queryMyOrderNoComplete() # 尝试查看订单列表,如果有订单,则判断成功,不过一般可能性不大 if order_id: + sendEmail("恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306,访问‘未完成订单’,在30分钟内完成支付!".format(order_id)) raise ticketIsExitsException("恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306,访问‘未完成订单’,在30分钟内完成支付!".format(order_id)) + else: print(ticketNumOutException("订单提交失败!,正在重新刷票")) diff --git a/tkcode b/tkcode index e6b6ab7f2e25f08fce5a385a9c2465828a07cec9..9407e6e5fc76f68d507ac4f3746e668079ac84e5 100644 GIT binary patch delta 13805 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 X{4?PQJ;@3oCGKbDM$qd5GV=cb66r`N delta 12545 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