Compare commits

...

5 Commits

Author SHA1 Message Date
Ching
bce303ceab feat(settings): 修改 settings 值
修改 settings 值

Signed-off-by: Ching <loooching@gmail.com>
2022-02-27 18:29:29 +08:00
Ching
dc49b8967f feat(gitignore): ignore dump.rdb
ignore dump.rdb

Signed-off-by: Ching <loooching@gmail.com>
2022-02-26 21:39:15 +08:00
Ching
d8ceb4db7e feat(utils; dodo): 增加飞书发送消息工具
增加飞书发送消息工具

Signed-off-by: Ching <loooching@gmail.com>
2022-02-26 21:31:32 +08:00
Ching
38ed29e210 Merge tag 'vr20220205' into develop
no message
2022-02-25 01:22:12 +08:00
Ching
8e6c37198c Merge branch 'release/r20220205' 2022-02-25 01:22:12 +08:00
5 changed files with 108 additions and 6 deletions

1
.gitignore vendored
View File

@ -10,6 +10,7 @@ __pycache__/
dsite/settings.py dsite/settings.py
# Distribution / packaging # Distribution / packaging
dump.rdb
.Python .Python
build/ build/
develop-eggs/ develop-eggs/

View File

@ -148,3 +148,9 @@ IG_LOGIN_USERNAME = ''
IG_LOGIN_PASSWORD = '' IG_LOGIN_PASSWORD = ''
MASTODON_NOFAN_ACCESS_TOKEN = '' MASTODON_NOFAN_ACCESS_TOKEN = ''
LARK_APP_ID = ''
LARK_APP_SECRET = ''
FANFOU_USERNAME = ''
FANFOU_PASSWORD = ''

View File

@ -26,23 +26,23 @@ from bs4 import BeautifulSoup
import recipe.models import recipe.models
from utils import const from utils import const
import utils.feishu
APP_VERIFICATION_TOKEN = 'uKQQiOVMYg2cTgrjkyBmodrHTUaCXzG3' APP_VERIFICATION_TOKEN = 'uKQQiOVMYg2cTgrjkyBmodrHTUaCXzG3'
APP_ID = 'cli_a115fe8b83f9100c'
APP_SECRET = 'yuSQenId0VfvwdZ3qL9wMd8FpCMEUL0u'
ENCRYPT_KEY = '4XfjcA5xou3pztBD4g5V7dgHtr0BBYDE' ENCRYPT_KEY = '4XfjcA5xou3pztBD4g5V7dgHtr0BBYDE'
EVENT_TYPE = ['im.message.receive_v1'] EVENT_TYPE = ['im.message.receive_v1']
ADD_GROUP_NAME = True ADD_GROUP_NAME = True
KEDAI_ID = '107263380636355825' KEDAI_ID = '107263380636355825'
logging.basicConfig(filename='/root/develop/log/dodo.log', level=logging.INFO) logger = logging.getLogger('dsite.' + __name__)
logger = logging.getLogger('/root/develop/log/dodo.log')
mastodon_cli = Mastodon(access_token='Ug_bUMWCk3RLamOnqYIytmeB0nO6aNfjdmf06mAj2bE', api_base_url='https://nofan.xyz') mastodon_cli = Mastodon(access_token='Ug_bUMWCk3RLamOnqYIytmeB0nO6aNfjdmf06mAj2bE', api_base_url='https://nofan.xyz')
pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True) pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
redis_cli = redis.Redis(host='localhost', port=6379, decode_responses=True) redis_cli = redis.Redis(host='localhost', port=6379, decode_responses=True)
feishu_cli = utils.feishu.Feishu()
class AESCipher(object): class AESCipher(object):
def __init__(self, key): def __init__(self, key):
@ -302,7 +302,8 @@ class RequestHandler(BaseHTTPRequestHandler):
logger.error("send message error, code = %s, msg =%s", code, rsp_dict.get("msg", "")) logger.error("send message error, code = %s, msg =%s", code, rsp_dict.get("msg", ""))
def msg_compoment(self, token, open_id, text, msg_type=None, content=None): def msg_compoment(self, token, open_id, text, msg_type=None, content=None):
self.send_message(token, open_id, text, msg_type, content) # self.send_message(token, open_id, text, msg_type, content)
feishu_cli.send_message(open_id, text, msg_type, content)
def run(): def run():

94
utils/feishu.py Normal file
View File

@ -0,0 +1,94 @@
import redis
import requests
from urllib import request
import json
import logging
from dsite import settings
from utils import const
# logging.basicConfig(filename='/root/develop/log/dodo.log', level=logging.INFO)
# logger = logging.getLogger('/root/develop/log/dodo.log')
logger = logging.getLogger('dsite.' + __name__)
APP_ID = settings.LARK_APP_ID
APP_SECRET = settings.LARK_APP_SECRET
pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
redis_cli = redis.Redis(host='localhost', port=6379, decode_responses=True)
class Feishu:
def __init__(self):
self.token = self.get_tenant_access_token()
def get_tenant_access_token(self): # 获取token
token = redis_cli.get('tenant_access_token_%s' % APP_ID)
if token:
return token
url = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal/"
headers = {"Content-Type": "application/json"}
req_body = {"app_id": APP_ID, "app_secret": APP_SECRET}
data = bytes(json.dumps(req_body), encoding='utf8')
req = request.Request(url=url, data=data, headers=headers, method='POST')
try:
response = request.urlopen(req)
except Exception as e:
logger.error('get tenant token error: %s', e.read().decode())
return ""
rsp_body = response.read().decode('utf-8')
rsp_dict = json.loads(rsp_body)
code = rsp_dict.get("code", -1)
if code != 0:
logger.error("get tenant_access_token error, code =%s", code)
return ""
token = rsp_dict.get("tenant_access_token", "")
redis_cli.set('tenant_access_token_%s' % APP_ID, rsp_dict.get("tenant_access_token", ""), ex=60 * 30)
return token
def send_message(self, open_id, text, msg_type=None, content=None):
url = "https://open.feishu.cn/open-apis/message/v4/send/"
headers = {"Content-Type": "application/json", "Authorization": "Bearer " + self.token}
if not msg_type:
msg_type = const.LARK_WEBHOOK_MSG_TYPE_TEXT
req_body = {"msg_type": msg_type}
if msg_type == const.LARK_WEBHOOK_MSG_TYPE_TEXT:
req_body['content'] = {'text': text}
elif msg_type == const.LARK_WEBHOOK_MSG_TYPE_INTERACTIVE:
req_body['card'] = content
req_body = dict(req_body, **open_id) # 根据open_id判断返回域
data = bytes(json.dumps(req_body), encoding='utf8')
req = request.Request(url=url, data=data, headers=headers, method='POST')
try:
response = request.urlopen(req)
except Exception as e:
logger.error('send message error: %s', e.read().decode())
return
rsp_body = response.read().decode('utf-8')
rsp_dict = json.loads(rsp_body)
code = rsp_dict.get("code", -1)
if code != 0:
logger.error("send message error, code = %s, msg =%s", code, rsp_dict.get("msg", ""))
def msg_compoment(self, open_id, text, msg_type=None, content=None):
self.send_message(open_id, text, msg_type, content)
def send_web_hook_message(self, web_hook_url, content):
"""发送webhook消息
Args:
web_hook_url (sting): web hook url
content (dict): 消息内容 {"msg_type":"text","content":{"text":"request example"}}
Returns:
resp: response object
"""
return requests.post(web_hook_url, json=content)