From fc891f0ccb9b2dbb267cf0785100884f24e700b1 Mon Sep 17 00:00:00 2001 From: ngfchl Date: Sat, 6 May 2023 23:38:06 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=87=E7=BA=A7WxPusher=E5=8C=85=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- util/wxpusher/__init__.py | 18 ++++++++++ util/wxpusher/exceptions.py | 17 +++++++++ util/wxpusher/wxpusher.py | 71 +++++++++++++++++++++++++++++++++++++ 3 files changed, 106 insertions(+) create mode 100644 util/wxpusher/__init__.py create mode 100644 util/wxpusher/exceptions.py create mode 100644 util/wxpusher/wxpusher.py diff --git a/util/wxpusher/__init__.py b/util/wxpusher/__init__.py new file mode 100644 index 0000000..164771f --- /dev/null +++ b/util/wxpusher/__init__.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +Init for WxPusher. + +File: __init__.py +Author: huxuan +Email: i(at)huxuan.org +""" +from .exceptions import WxPusherException +from .exceptions import WxPusherNoneTokenException +from .wxpusher import WxPusher + +__all__ = [ + 'WxPusher', + 'WxPusherException', + 'WxPusherNoneTokenException', +] diff --git a/util/wxpusher/exceptions.py b/util/wxpusher/exceptions.py new file mode 100644 index 0000000..e8e5a6c --- /dev/null +++ b/util/wxpusher/exceptions.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +WxPusher Exceptions. + +File: exceptions.py +Author: huxuan +Email: i(at)huxuan.org +""" + + +class WxPusherException(Exception): + """WxPusher specific base exception.""" + + +class WxPusherNoneTokenException(WxPusherException): + """Raised when both token and default token are None.""" diff --git a/util/wxpusher/wxpusher.py b/util/wxpusher/wxpusher.py new file mode 100644 index 0000000..d7151a6 --- /dev/null +++ b/util/wxpusher/wxpusher.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +WxPusher Python SDK. + +File: wxpusher.py +Author: huxuan +Email: i(at)huxuan.org +""" +import requests + +from . import exceptions + +BASEURL = 'http://wxpusher.zjiecode.com/api' + + +class WxPusher(): + """WxPusher Python SDK.""" + + default_token = None + + @classmethod + def send_message(cls, content, summary, **kwargs): + """Send Message.""" + payload = { + 'appToken': cls._get_token(kwargs.get('token')), + 'summary': summary, + 'content': content, + 'contentType': kwargs.get('content_type', 1), + 'topicIds': kwargs.get('topic_ids', []), + 'uids': kwargs.get('uids', []), + 'url': kwargs.get('url'), + } + url = f'{BASEURL}/send/message' + return requests.post(url, json=payload).json() + + @classmethod + def query_message(cls, message_id): + """Query message status.""" + url = f'{BASEURL}/send/query/{message_id}' + return requests.get(url).json() + + @classmethod + def create_qrcode(cls, extra, valid_time=1800, token=None): + """Create qrcode with extra callback information.""" + payload = { + 'appToken': cls._get_token(token), + 'extra': extra, + 'validTime': valid_time, + } + url = f'{BASEURL}/fun/create/qrcode' + return requests.post(url, json=payload).json() + + @classmethod + def query_user(cls, page, page_size, token=None): + """Query users.""" + payload = { + 'appToken': cls._get_token(token), + 'page': page, + 'pageSize': page_size, + } + url = f'{BASEURL}/fun/wxuser' + return requests.get(url, params=payload).json() + + @classmethod + def _get_token(cls, token=None): + """Get token with validation.""" + token = token or cls.default_token + if not token: + raise exceptions.WxPusherNoneTokenException() + return token