Ejemplo n.º 1
0
def tv_post_data():
    """
    request 获取参数参考:
    https://stackoverflow.com/questions/10434599/get-the-data-received-in-a-flask-request/16664376#16664376?newreg=11b034b8c3ed488eb4fe0b6eba4097db

    1. 通过 application/json 提交数据
    >>> url = 'http://127.0.0.1:5566/api/v1.0/tradingview?token=XXXX'
    >>> data = {'text': 'xxx', 'subject': 'xxx', 'token': 'xxx'}
    >>> request.post(url, data=data)

    2. 通过 plain/text 方式提交数据
    >>> url = 'http://127.0.0.1:5566/api/v1.0/tradingview?token=XXX'
    >>> data = '12345'
    >>> headers = {'Content-Type': 'plain/text'}
    >>> request.post(url, headers=headers, data=data)
    http://127.0.0.1:5566/api/v1.0/tradingview

    返回结果:{'code': 0, 'msg': '成功'}, {'code': 1, 'msg': 'token err'}
    :return:
    """
    #
    log = LogHandler()
    token, text, subject = None, None, ''
    json_data = request.get_json()
    if json_data:
        token = json_data.get('token')
        text = json_data.get('text')
        subject = json_data.get('subject')
    token = request.values.get('token') if not token else token
    if not text or 'plain/text' in request.headers.keys().get('Content-Type'):
        text = request.data.decode('utf-8')
    if not subject:  # 没有输入主题
        subject = text[:10] + '...' if len(text) > 10 else text
    log.debug('token:{0}, text:{1}, subject:{2}'.format(token, text, subject))
    if token not in TOKEN:
        return {'code': 1, 'msg': 'token err'}, 200

    MessageManger(email=False).seng_msg(subject, text)
    return {'code': 0, 'msg': 'success'}, 200
Ejemplo n.º 2
0
class WeChatWork(object):
    def __init__(self):
        self.access_token_dict = {}
        self.log = LogHandler()
        self.post_data = WECHAT_CONFIG.get('WECHET_DEFAULT_TEXT_DATA').copy()

    @classmethod
    def access_token_api(cls):
        access_token_api = WECHAT_CONFIG.get('ACCESS_TOKEN_API')
        corpid = WECHAT_CONFIG.get('CORPID')
        secret = WECHAT_CONFIG.get('CORPSECRET')
        return access_token_api.format(ID=corpid, SECRET=secret)

    @property
    def message_send_api(self):
        return WECHAT_CONFIG.get('MESSAGE_SEND_API').format(
            ACCESS_TOKEN=self.access_token)

    @property
    def access_token(self):
        if self.access_token_dict and \
           time.time() - self.access_token_dict.get('expire_time', 0) <= 7200:
            self.log.debug('get access token from cookies')
            return self.access_token_dict.get('access_token')

        ret = requests.get(WeChatWork.access_token_api()).json()
        if not ret.get('errcode'):
            access_token = ret.get('access_token')
            self.access_token_dict['access_token'] = access_token
            self.access_token_dict['expire_time'] = time.time()
            self.log.debug('get access token: {0}'.format(access_token))
            return access_token
        else:
            self.log.error('get access token fail !!')

    def send_msg(self, subject, content):
        """
        api 格式
        {
           "touser" : "UserID1|UserID2|UserID3",
           "toparty" : "PartyID1|PartyID2",
           "totag" : "TagID1 | TagID2",
           "msgtype" : "text",
           "agentid" : 1,
           "text" : {
               "content" : "你的快递已到,请携带工卡前往邮件中心领取。\n出发前可查看<a href=\"http://work.weixin.qq.com\">邮件中心视频实况</a>,聪明避开排队。"
           },
           "safe":0,
           "enable_id_trans": 0,
           "enable_duplicate_check": 0,
           "duplicate_check_interval": 1800
        }
        :param subject:
        :param content:
        :return:
        """
        self.post_data['text'][
            'content'] = "subject: {0} \n content: {1}".format(
                subject, content)
        ret = requests.post(self.message_send_api, json=self.post_data).json()
        if 0 == ret.get('errcode'):
            self.log.info('send wechat msg success')
        else:
            self.log.error(
                'send wechat msg fail!! error code:{0}, error msg:{1}'.format(
                    ret.get('errcode'), ret.get('errmsg')))