From 6fafdaa52815821b080bc385f24eebd46ba19188 Mon Sep 17 00:00:00 2001 From: cycz <838143144@qq.com> Date: Fri, 7 Feb 2020 21:53:17 +0800 Subject: [PATCH] =?UTF-8?q?windows=20=E8=B7=AF=E5=BE=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AreaTool.py | 4 ++-- README.md | 2 ++ config.py | 23 +++++++++++++++++++++++ jdBuyMask.py | 4 ++-- jdBuyMask_V2.py | 6 +++--- jdBuyMask_V3.py | 6 +++--- jdEmail.py | 41 +++++++++++++++++++++++++++++++++++++++++ jdlogger.py | 26 ++++++++++++++++++++++++++ message.py | 29 +++++++++++++++++++++++++++++ wechat_ftqq.py | 31 +++++++++++++++++++++++++++++++ 10 files changed, 162 insertions(+), 10 deletions(-) create mode 100644 config.py create mode 100644 jdEmail.py create mode 100644 jdlogger.py create mode 100644 message.py create mode 100644 wechat_ftqq.py diff --git a/AreaTool.py b/AreaTool.py index f767e7d..6166545 100644 --- a/AreaTool.py +++ b/AreaTool.py @@ -1,10 +1,10 @@ # -*- coding=utf-8 -*- -from log.jdlogger import logger +from jdlogger import logger ''' 找一条第一个版本的url ''' -url = 'https://c0.3.cn/stock?skuId=1336984&area=19_1607_4773_0&venderId=1000078145&buyNum=1&choseSuitSkuIds=&cat=9192,12190,1517&extraParam={%22originid%22:%221%22}&fqsp=0&pdpin=jd_7c3992aa27d1a&pduid=1580535906442142991701&ch=1&callback=jQuery6715489' +url = 'https://c0.3.cn/stock?skuId=100003406321&area=19_1607_4773_0&venderId=1000000946&buyNum=1&choseSuitSkuIds=&cat=9192,9197,12588&extraParam={%22originid%22:%221%22}&fqsp=0&pdpin=jd_7c3992aa27d1a&pduid=1580535906442142991701&ch=1&callback=jQuery4291064' skuId = url.split('skuId=')[1].split('&')[0] area = url.split('area=')[1].split('&')[0] logger.info('你的area是[ %s ],链接的商品id是[ %s ]', area, skuId) diff --git a/README.md b/README.md index 9424d69..abaf356 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,8 @@ ˵̰ãv3汾µ죨V3ûԹ˺µ࣬Ҫ֤ˣԹͬѧԷһ +˷windows·⣬Ѵ붼һĿ¼ˡ + Զһֻһ V2汾 ҪurlֻҪƷididˢ¸Ƶ졣 diff --git a/config.py b/config.py new file mode 100644 index 0000000..2c730a6 --- /dev/null +++ b/config.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +import os +import configparser + + +class Config(object): + def __init__(self, config_file='configDemo.ini'): + self._path = os.path.join(os.getcwd(), config_file) + if not os.path.exists(self._path): + raise FileNotFoundError("No such file: config.ini") + self._config = configparser.ConfigParser() + self._config.read(self._path, encoding='utf-8-sig') + self._configRaw = configparser.RawConfigParser() + self._configRaw.read(self._path, encoding='utf-8-sig') + + def get(self, section, name): + return self._config.get(section, name) + + def getRaw(self, section, name): + return self._configRaw.get(section, name) + + +global_config = Config() diff --git a/jdBuyMask.py b/jdBuyMask.py index eae74a1..5f18248 100644 --- a/jdBuyMask.py +++ b/jdBuyMask.py @@ -8,8 +8,8 @@ import json import sys import random from bs4 import BeautifulSoup -from log.jdlogger import logger -from message.message import message +from jdlogger import logger +from message import message import traceback ''' diff --git a/jdBuyMask_V2.py b/jdBuyMask_V2.py index 24edbc0..8248a12 100644 --- a/jdBuyMask_V2.py +++ b/jdBuyMask_V2.py @@ -9,9 +9,9 @@ import json import sys import random from bs4 import BeautifulSoup -from log.jdlogger import logger -from config.config import global_config -from message.message import message +from jdlogger import logger +from config import global_config +from message import message import traceback ''' diff --git a/jdBuyMask_V3.py b/jdBuyMask_V3.py index 74c370a..74dd691 100644 --- a/jdBuyMask_V3.py +++ b/jdBuyMask_V3.py @@ -9,9 +9,9 @@ import json import sys import random from bs4 import BeautifulSoup -from log.jdlogger import logger -from config.config import global_config -from message.message import message +from jdlogger import logger +from config import global_config +from message import message ''' 需要修改 diff --git a/jdEmail.py b/jdEmail.py new file mode 100644 index 0000000..292c80f --- /dev/null +++ b/jdEmail.py @@ -0,0 +1,41 @@ +# -*- coding=utf-8 -*- +''' +发送邮件模块 +''' +import traceback + + +def sendMail(mail, msgtext): + try: + import smtplib + from email.mime.text import MIMEText + # email 用于构建邮件内容 + from email.header import Header + + # 用于构建邮件头 + # 发信方的信息:发信邮箱,QQ 邮箱授权码 + from_addr = 'jdbuymask@163.com' + password = 'alpsneahcyz123' + + # 收信方邮箱 + to_addr = mail + # 发信服务器 + smtp_server = 'smtp.163.com' + # 邮箱正文内容,第一个参数为内容,第二个参数为格式(plain 为纯文本),第三个参数为编码 + msg = MIMEText(msgtext, 'plain', 'utf-8') + # 邮件头信息 + # msg['From'] = Header(from_addr) + msg['From'] = Header(u'from Mark<{}>'.format(from_addr), 'utf-8') + msg['To'] = Header(to_addr) + msg['Subject'] = Header('京东口罩监控','utf-8') + # 开启发信服务,这里使用的是加密传输 + server = smtplib.SMTP_SSL(host=smtp_server) + server.connect(smtp_server, 465) + # 登录发信邮箱 + server.login(from_addr, password) + # 发送邮件 + server.sendmail(from_addr, to_addr, msg.as_string()) + # 关闭服务器 + server.quit() + except Exception as e: + print(traceback.format_exc()) diff --git a/jdlogger.py b/jdlogger.py new file mode 100644 index 0000000..d8c5f17 --- /dev/null +++ b/jdlogger.py @@ -0,0 +1,26 @@ +# -*- coding=utf-8 -*- +import logging +import logging.handlers +''' +日志模块 +''' +LOG_FILENAME = 'jdBuyMask.log' + +logger = logging.getLogger() + + +def set_logger(): + logger.setLevel(logging.INFO) + formatter = logging.Formatter('%(asctime)s %(levelname)s: %(message)s') + + console_handler = logging.StreamHandler() + console_handler.setFormatter(formatter) + logger.addHandler(console_handler) + + file_handler = logging.handlers.RotatingFileHandler( + LOG_FILENAME, maxBytes=10485760, backupCount=5, encoding="utf-8") + file_handler.setFormatter(formatter) + logger.addHandler(file_handler) + + +set_logger() diff --git a/message.py b/message.py new file mode 100644 index 0000000..d3a5125 --- /dev/null +++ b/message.py @@ -0,0 +1,29 @@ +# -*- encoding=utf8 -*- +from jdEmail import sendMail +from wechat_ftqq import sendWechat + + +class message(object): + """消息推送类""" + + def __init__(self, messageTtpe, sc_key, mail): + if messageTtpe == '2': + if not sc_key: + raise Exception('sc_key can not be empty') + self.sc_key = sc_key + elif messageTtpe == '1': + if not mail: + raise Exception('mail can not be empty') + self.mail = mail + self.messageTtpe = messageTtpe + + def send(self, desp='', isOrder=False): + desp = str(desp) + if isOrder: + msg = desp + ' 类型口罩,已经下单了。24小时内付款' + else: + msg = desp + ' 类型口罩,下单失败了,快去抢购!' + if self.messageTtpe == '1': + sendMail(self.mail, msg) + if self.messageTtpe == '2': + sendWechat(sc_key=self.sc_key, desp=msg) diff --git a/wechat_ftqq.py b/wechat_ftqq.py new file mode 100644 index 0000000..55cb00f --- /dev/null +++ b/wechat_ftqq.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python +# -*- encoding=utf8 -*- +import datetime +import json + +import requests + +from jdlogger import logger + + +def sendWechat(sc_key, text='京东商品监控', desp=''): + if not text.strip(): + logger.error('Text of message is empty!') + return + + now_time = str(datetime.datetime.now()) + desp = '[{0}]'.format(now_time) if not desp else '{0} [{1}]'.format(desp, now_time) + + try: + resp = requests.get( + 'https://sc.ftqq.com/{}.send?text={}&desp={}'.format(sc_key, text, desp) + ) + resp_json = json.loads(resp.text) + if resp_json.get('errno') == 0: + logger.info('Message sent successfully [text: %s, desp: %s]', text, desp) + else: + logger.error('Fail to send message, reason: %s', resp.text) + except requests.exceptions.RequestException as req_error: + logger.error('Request error: %s', req_error) + except Exception as e: + logger.error('Fail to send message [text: %s, desp: %s]: %s', text, desp, e) -- GitLab