Skip to content

Commit

Permalink
推送方式增加wechat
Browse files Browse the repository at this point in the history
  • Loading branch information
nfe-w committed Mar 21, 2021
1 parent d75a2a3 commit 13ca1f7
Show file tree
Hide file tree
Showing 4 changed files with 109 additions and 16 deletions.
11 changes: 9 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,19 @@
(2)`push_serverChan`下的参数

- `enable`是否启用serverChan推送
- `serverChan_SCKEY`如果启用该推送,必须填入 serverChan_SCKEY,如何获取请参考 http://sc.ftqq.com/3.version
- `serverChan_SCKEY`如果启用该推送,则必填,参考 http://sc.ftqq.com/3.version

(3)`push_serverChan_turbo`下的参数

- `enable`是否启用serverChan_Turbo推送
- `serverChan_SendKey`如果启用该推送,必须填入 serverChan_SendKey,如何获取请参考 https://sct.ftqq.com
- `serverChan_SendKey`如果启用该推送,则必填,参考 https://sct.ftqq.com

(4)`push_wechat`下的参数

- `enable`是否启用微信推送
- `corp_id`企业id,如果启用该推送,则必填
- `agent_id`应用id,如果启用该推送,则必填
- `corp_secret`应用Secret,如果启用该推送,则必填

#### 2.安装第三方库

Expand Down
4 changes: 3 additions & 1 deletion bili_dynamic_push.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,14 +51,16 @@ def query_dynamic(uid=None):
card = json.loads(card_str)

content = None
pic_url = None
if dynamic_type == 2:
content = card['item']['description']
pic_url = card['item']['pictures'][0]['img_src']
elif dynamic_type == 4:
content = card['item']['content']
elif dynamic_type == 8:
content = card['item']['title']
logger.info('【查询】【{uname}】动态有更新,准备推送:{content}'.format(uname=uname, content=content[:30]))
push.push_msg(uname, dynamic_id, content, dynamic_type, dynamic_time)
push.push_msg(uname, dynamic_id, content, pic_url, dynamic_type, dynamic_time)
else:
logger.error('【查询】请求返回数据code错误:{code}'.format(code=result['code']))

Expand Down
23 changes: 17 additions & 6 deletions config.ini
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,32 @@
# up主uid列表,使用英文逗号分隔
uid_list = 672328094,672346917,672353429,672342685,351609538,703007996
# 扫描间隔描述,不建议设置太频繁
intervals_second = 60
intervals_second = 30
# 扫描起止时间,24小时制(目前不支持跨日期),例:07:00、23:59
begin_time = 07:00
end_time = 23:59


[push_serverChan]
# 是否启用 true/false
enable = true
# Server酱推送服务,推送必须填入 serverChan_SCKEY,如何获取请参考 http://sc.ftqq.com/3.version
serverChan_SCKEY = your_sckey
enable = false
# Server酱推送服务,如果启用该推送,必须填入 serverChan_SCKEY,如何获取请参考 http://sc.ftqq.com/3.version
serverChan_SCKEY =


[push_serverChan_turbo]
# 是否启用 true/false
enable = false
# Server酱_Turbo推送服务,推送必须填入 serverChan_SendKey,如何获取请参考 https://sct.ftqq.com/
serverChan_SendKey = your_sendKey
# Server酱_Turbo推送服务,如果启用该推送,必须填入 serverChan_SendKey,如何获取请参考 https://sct.ftqq.com
serverChan_SendKey =


[push_wechat]
# 是否启用 true/false
enable = false
# 企业id,如果启动该推送则必填
corp_id =
# 应用id,如果启动该推送则必填
agent_id =
# 应用Secret,如果启动该推送则必填
corp_secret =
87 changes: 80 additions & 7 deletions push.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
# @Time: 2021/3/21 12:33

import requests
import json
from config import global_config
from logger import logger

Expand All @@ -13,19 +14,28 @@ class Push(object):
serverChan_sckey = None
serverChan_turbo_enable = None
serverChan_turbo_SendKey = None
wechat_enable = None
wechat_corp_id = None
wechat_agent_id = None
wechat_corp_secret = None

def __init__(self):
self.serverChan_enable = global_config.get_raw('push_serverChan', 'enable')
self.serverChan_sckey = global_config.get_raw('push_serverChan', 'serverChan_SCKEY')
self.serverChan_turbo_enable = global_config.get_raw('push_serverChan_turbo', 'enable')
self.serverChan_turbo_SendKey = global_config.get_raw('push_serverChan_turbo', 'serverChan_SendKey')
self.wechat_enable = global_config.get_raw('push_wechat', 'enable')
self.wechat_corp_id = global_config.get_raw('push_wechat', 'corp_id')
self.wechat_agent_id = global_config.get_raw('push_wechat', 'agent_id')
self.wechat_corp_secret = global_config.get_raw('push_wechat', 'corp_secret')

def push_msg(self, uname=None, dynamic_id=None, content=None, dynamic_type=None, dynamic_time=None):
def push_msg(self, uname=None, dynamic_id=None, content=None, pic_url=None, dynamic_type=None, dynamic_time=None):
"""
推送
:param uname: up主名字
:param dynamic_id: 动态id
:param content: 动态内容
:param pic_url: 动态图片
:param dynamic_type: 动态类型
:param dynamic_time: 动态发送时间
"""
Expand All @@ -34,37 +44,100 @@ def push_msg(self, uname=None, dynamic_id=None, content=None, dynamic_type=None,
return

title = '【{uname}】{dynamic_type}'.format(uname=uname, dynamic_type='投稿了' if dynamic_type == 8 else '发动态了')
content = '`{content}[{dynamic_time}]`[点我直达](https://t.bilibili.com/{dynamic_id})'.format(
content=content[:100] + (content[100:] and '...'), dynamic_time=dynamic_time, dynamic_id=dynamic_id)
content = '{content}[{dynamic_time}]'.format(content=content[:100] + (content[100:] and '...'), dynamic_time=dynamic_time)

if self.serverChan_enable == 'true':
self._server_chan(dynamic_id, title, content)
self._server_chan_push(dynamic_id, title, content)
if self.serverChan_turbo_enable == 'true':
self._server_chan_turbo(dynamic_id, title, content)
self._server_chan_turbo_push(dynamic_id, title, content)
if self.wechat_enable == 'true':
access_token = self._get_wechat_access_token()
self._wechat_push(access_token, dynamic_id, title, content, pic_url)

def _server_chan(self, dynamic_id, title, content):
def _server_chan_push(self, dynamic_id, title, content):
"""
推送(serverChan)
:param dynamic_id: 动态id
:param title: 标题
:param content: 内容
"""
content = '`' + content + '`[点我直达](https://t.bilibili.com/{dynamic_id})'.format(dynamic_id=dynamic_id)
push_url = 'https://sc.ftqq.com/{key}.send'.format(key=self.serverChan_sckey)
response = requests.post(push_url, params={"text": title, "desp": content})
logger.info('【推送_serverChan】{msg},dynamic_id:[{dynamic_id}]'.format(
msg='成功' if response.status_code == 200 else '失败', dynamic_id=dynamic_id))

def _server_chan_turbo(self, dynamic_id, title, content):
def _server_chan_turbo_push(self, dynamic_id, title, content):
"""
推送(serverChan_Turbo)
:param dynamic_id: 动态id
:param title: 标题
:param content: 内容
"""
content = '`' + content + '`[点我直达](https://t.bilibili.com/{dynamic_id})'.format(dynamic_id=dynamic_id)
push_url = 'https://sctapi.ftqq.com/{key}.send'.format(key=self.serverChan_turbo_SendKey)
response = requests.post(push_url, params={"title": title, "desp": content})
logger.info('【推送_serverChan_Turbo】{msg},dynamic_id:[{dynamic_id}]'.format(
msg='成功' if response.status_code == 200 else '失败', dynamic_id=dynamic_id))

def _get_wechat_access_token(self):
access_token = None
url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={corpid}&corpsecret={corpsecret}'.format(
corpid=self.wechat_corp_id, corpsecret=self.wechat_corp_secret)
response = requests.get(url)
if response.status_code == 200:
result = json.loads(str(response.content, 'utf-8'))
access_token = result['access_token']
else:
logger.info('【推送_wechat】获取access_token失败')
return access_token

def _wechat_push(self, access_token, dynamic_id, title, content, pic_url=None):
"""
推送(wechat)
:param access_token: 调用接口凭证
:param dynamic_id: 动态id
:param title: 标题
:param content: 内容
:param pic_url: 图片url
"""
push_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send'
params = {
"access_token": access_token
}
body = {
"touser": "@all",
"agentid": self.wechat_agent_id,
"safe": 0,
"enable_id_trans": 0,
"enable_duplicate_check": 0,
"duplicate_check_interval": 1800
}

if pic_url is None:
body["msgtype"] = "textcard"
body["textcard"] = {
"title": title,
"description": content,
"url": 'https://t.bilibili.com/{}'.format(dynamic_id),
"btntxt": "打开动态"
}
else:
body["msgtype"] = "news"
body["news"] = {
"articles": [
{
"title": title,
"description": content,
"url": 'https://t.bilibili.com/{}'.format(dynamic_id),
"picurl": pic_url
}
]
}

response = requests.post(push_url, params=params, data=json.dumps(body))
logger.info('【推送_wechat】{msg},dynamic_id:[{dynamic_id}]'.format(
msg='成功' if response.status_code == 200 else '失败', dynamic_id=dynamic_id))


push = Push()

0 comments on commit 13ca1f7

Please sign in to comment.