Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge develop into master #71

Merged
merged 12 commits into from
Feb 5, 2020
Prev Previous commit
Next Next commit
Feat: add message push
  • Loading branch information
tychxn committed Feb 5, 2020
commit 12644e60c087c18ff7d22e4f2d285aeb0a207b4b
10 changes: 9 additions & 1 deletion config.ini
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,12 @@ payment_pwd =
[config]
eid =
fp =
timeout =
# 查询库存请求超时(秒),默认10秒
timeout =

[messenger]
# 使用了Server酱的推送服务
# 如果想开启下单成功后消息推送,则将 enable 设置为 True,默认为 False 不开启推送
# 开启消息推送必须填入 sckey,如何获取请参考 http://sc.ftqq.com/3.version。感谢Server酱~
enable = False
sckey =
13 changes: 10 additions & 3 deletions jd_assistant.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
from config import global_config
from exception import AsstException
from log import logger
from messenger import Messenger
from timer import Timer
from util import (
USER_AGENT,
Expand Down Expand Up @@ -54,12 +55,15 @@ def __init__(self):
self.eid = global_config.get('config', 'eid') or DEFAULT_EID
self.fp = global_config.get('config', 'fp') or DEFAULT_FP
self.track_id = DEFAULT_TRACK_ID
self.timeout = float(global_config.get('config', 'timeout')) or DEFAULT_TIMEOUT
self.timeout = float(global_config.get('config', 'timeout') or DEFAULT_TIMEOUT)

self.seckill_init_info = dict()
self.seckill_order_data = dict()
self.seckill_url = dict()

self.send_message = global_config.get('messenger', 'enable').strip() in ['True', 'true', '1']
self.messenger = Messenger() if self.send_message else None

try:
self._load_cookies()
except Exception:
Expand Down Expand Up @@ -452,7 +456,7 @@ def get_single_item_stock(self, sku_id, num, area):
try:
resp = requests.get(url=url, params=payload, headers=headers, timeout=self.timeout)
except requests.exceptions.Timeout:
logger.error('查询 %s 库存信息超时(%ss)', self.timeout)
logger.error('查询 %s 库存信息超时(%ss)', sku_id, self.timeout)
return False
except requests.exceptions.RequestException as e:
raise AsstException('查询 %s 库存信息异常:%s' % (sku_id, e))
Expand Down Expand Up @@ -929,7 +933,10 @@ def submit_order(self):
# {'overSea': False, 'orderXml': None, 'cartXml': None, 'noStockSkuIds': '', 'reqInfo': None, 'hasJxj': False, 'addedServiceList': None, 'sign': None, 'pin': 'xxx', 'needCheckCode': False, 'success': True, 'resultCode': 0, 'orderId': 8740xxxxx, 'submitSkuNum': 1, 'deductMoneyFlag': 0, 'goJumpOrderCenter': False, 'payInfo': None, 'scaleSkuInfoListVO': None, 'purchaseSkuInfoListVO': None, 'noSupportHomeServiceSkuList': None, 'msgMobile': None, 'addressVO': None, 'msgUuid': None, 'message': None}

if resp_json.get('success'):
logger.info('订单提交成功! 订单号:%s', resp_json.get('orderId'))
order_id = resp_json.get('orderId')
logger.info('订单提交成功! 订单号:%s', order_id)
if self.send_message:
self.messenger.send(text='jd-assistant 订单提交成功', desp='订单号:%s' % order_id)
return True
else:
message, result_code = resp_json.get('message'), resp_json.get('resultCode')
Expand Down
43 changes: 43 additions & 0 deletions messenger.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#!/usr/bin/env python
# -*- encoding=utf8 -*-
import datetime
import json

import requests

from config import global_config
from exception import AsstException
from log import logger


class Messenger(object):
"""消息推送类"""

def __init__(self):
sc_key = global_config.get('messenger', 'sckey').strip()
if not sc_key:
raise AsstException('sc_key can not be empty')

self.sc_key = sc_key

def send(self, 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(self.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)