Exemple #1
0
def remove_img_bg(msg, accessToken=None):
    resp_xml = None

    try:
        if msg.type == 'text':
            no_bg_img_path = wechat.rmBg.get_result_bytaskid(msg.content)
            if no_bg_img_path == 'error':
                return get_rmbg_error_reply(msg)
            elif no_bg_img_path:
                media_id = upload('image', no_bg_img_path, accessToken)
                from wechatpy.messages import ImageMessage
                newMsg = ImageMessage(msg._data)
                reply = ImageReply(media_id=media_id, message=newMsg)
                return reply.render()
            else:
                return get_imgerr_reply(msg)

        # 通过公众号接收到的图片信息下载图片到本地
        path = download(msg.image, msg.source)
        # 调用ai去除背景接口,保存结果图片后,返回对应路径
        taskid = wechat.rmBg.do_remove(path)

        import threading
        print(threading.current_thread().name, taskid)

        text = '下载注意事项:请用[5a4490.../red]的格式发送消息,用于下载处理后图像文件。\n颜色默认为白色(white),同时支持红色(red),蓝色(blue)。\n验证码:%s' % taskid
        resp_xml = create_reply(text, message=msg, render=True)

    except Exception as e:
        resp_xml = get_error_reply(msg)

    return resp_xml
Exemple #2
0
 def _response2xml(self, response, msg):
     """
     将response解析成需要的xml
     :param response:
     :return:
     """
     # 图片型
     if response.startswith("#Image"):
         path = response.replace("#Image:", "")
         medie_id = self._weixin_util.upload(path)
         replay = ImageReply(media_id=medie_id, message=msg)
         xml = replay.render()
         return xml
     else:
         # 文本型的xml
         if response.startswith("#json:"):
             response = response.replace("#json:", "")
             response_json = json.loads(response)
             # print(response_json)
             # 处理url类的
             for key in response_json:
                 if "url" in key:
                     response = "你自己看吧。\n{}".format(response_json[key])
                     break
         reply = TextReply(content=response, message=msg)
         xml = reply.render()
         return xml
Exemple #3
0
    def test_image_reply_properties(self):
        from wechatpy.replies import ImageReply

        reply = ImageReply(image='7890')

        self.assertEqual('7890', reply.image)
        self.assertEqual('7890', reply.media_id)

        reply.media_id = '123456'
        self.assertEqual('123456', reply.image)
        self.assertEqual('123456', reply.media_id)
Exemple #4
0
def weixinInterface():
    if check_signature:
        data = request.data
        msg = parse_message(data)
        path = get_qcode(request.args['openid'])
        md_id = get_media_id(CLIENT, path)
        reply = ImageReply(media_id=md_id, message=msg)
        xml = reply.render()
        return xml
    else:
        return 'signature error'
Exemple #5
0
    def test_image_reply_properties(self):
        from wechatpy.replies import ImageReply

        reply = ImageReply(image="7890")

        self.assertEqual("7890", reply.image)
        self.assertEqual("7890", reply.media_id)

        reply.media_id = "123456"
        self.assertEqual("123456", reply.image)
        self.assertEqual("123456", reply.media_id)
Exemple #6
0
    def test_image_reply_properties(self):
        from wechatpy.replies import ImageReply

        reply = ImageReply(image='7890')

        self.assertEqual('7890', reply.image)
        self.assertEqual('7890', reply.media_id)

        reply.media_id = '123456'
        self.assertEqual('123456', reply.image)
        self.assertEqual('123456', reply.media_id)
Exemple #7
0
 def subscribeReply(self, msg, content=None, media_id=None):
     if content == None and media_id == None:
         raise Exception("no info be send!")
     elif content != None and media_id != None:
         raise Exception("content and media_id args only one != None")
     elif content != None:
         reply = create_reply(content, message=msg)
         xml = reply.render()
         return xml
     else:
         reply = ImageReply(message=msg)
         reply.media_id = media_id
         xml = reply.render()
         return xml
def weixin():
    import hashlib, lxml, time, os, json
    from lxml import etree
    if request.method == 'GET':
        signature = request.values.get('signature')
        timestamp = request.values.get('timestamp')
        nonce = request.values.get('nonce')
        echostr = request.values.get('echostr')
        global token
        try:
            check_signature(token, signature, timestamp, nonce)
            return echostr
        except InvalidSignatureException:
            return echostr + 'failed'
    elif request.method == 'POST':
        str_xml = request.data
        msg = parse_message(str_xml)
        print(str_xml)
        if msg.type == 'text':
            return TextReply(content='u just say : ' + msg.content,
                             message=msg).render()
        elif msg.type == 'image':
            return ImageReply(media_id=add_watermark(
                msg.media_id, appId, appSecret).get_media_id_with_watermark(),
                              message=msg).render()
    return 'wassup'
Exemple #9
0
    def on_post(self, req, resp):
        xml = req.stream.read()
        msg = parse_message(xml)
        if msg.type == 'text':
            try:
                text = msg.content
                c = len(text)
                if c == 1 and '啊' not in text and '哼' not in text and '嗨' not in text:
                    poem_flag = 24
                    poem = self.pchat.gen_poem(text, poem_flag)
                    replyTxt = self.pchat.pretty_print_poem(poem_=poem)
                    tf.reset_default_graph()

                else:
                    eliza = ElizaChat()
                    replyTxt = eliza.analyze(text)
                    if replyTxt == "@$@":
                        replyTxt, score = self.retrieval.api(text)
                        replyTxt = replyTxt
                reply = TextReply(content=replyTxt, message=msg)
                xml = reply.render()
                resp.body = (xml)
                resp.status = falcon.HTTP_200
            except Exception as e:
                print(e)

        elif msg.type == 'image':
            reply = ImageReply(media_id=msg.media_id, message=msg)
            xml = reply.render()
            resp.body = (xml)
            resp.status = falcon.HTTP_200
Exemple #10
0
def handle_reply(content, msg):
    '''
	根据用户选取的回复信息的类型,对相应信息进行处理成xml
	'''
    env = request.env()
    if content._name == 'wx.text':
        reply_content = content.text_content
        reply = TextReply(message=msg, content=reply_content)
    elif content._name == 'wx.image':
        reply_content = content.media_id
        reply = ImageReply(media_id=reply_content, message=msg)
    elif content._name == 'wx.imagetext':
        Articles = [{
            'title': content.name,
            'description': content.content,
            'picurl': content.image_id.url,
            'url': content.content_source_url
        }]
        reply = ArticlesReply(message=msg, articles=Articles)
    elif content._name == 'wx.many.imagetext':
        Articles = []
        for content in content.many_image_text:
            Articles.append({
                'title': content.name,
                'description': content.content,
                'picurl': content.image_id.url,
                'url': content.content_source_url
            })
        reply = ArticlesReply(message=msg, articles=Articles)

    _logger.info('消息处理reply %s', reply)  # debug
    return reply.render()
Exemple #11
0
def index():
    # print request.args
    # print json.dumps(request.args)
    if request.method == 'GET':
        data = request.args
        signature = data.get('signature')
        timestamp = data.get('timestamp')
        nonce = data.get('nonce')
        echostr = data.get('echostr')
        token = current_app.config.get('TOKEN')
        try:
            check_signature(token, signature, timestamp, nonce)
        except InvalidSignatureException:
            return 'invalid signature'
        return echostr
    else:
        xml = request.data
        print xml
        msg = parse_message(xml)
        if msg.type == 'text':
            print msg.content
            reply =  TextReply(message=msg)
            reply.content = u'reply 测试'
            xml_reply = reply.render()
            return xml_reply
        elif msg.type == 'image':
            reply = ImageReply(message=msg)
            reply.media_id = msg.media_id
            xml_reply = reply.render()
            return xml_reply
        elif msg.type == 'voice':
            # reply = VoiceReply(message=msg)
            # reply.media_id = msg.media_id
            reply = TextReply(message=msg)
            reply.content = msg.recognition
            xml_reply = reply.render()
            return xml_reply
        elif msg.type == 'video':
            reply = VideoReply(message=msg)
            reply.media_id = msg.media_id
            reply.title = u'你的video'
            reply.description = u'wo 爱倪呀'
            xml_reply = reply.render()
            return xml_reply
            pass
        elif msg.type == 'location':
            pass
        elif msg.type == 'link':
            pass
        elif msg.type == 'shortvideo':
            reply = VideoReply(message=msg)
            reply.media_id = msg.thumb_media_id
            reply.title = u'你的video'
            reply.description = u'wo 爱倪呀'
            xml_reply = reply.render()
            return xml_reply
        else:
            return ''
Exemple #12
0
def wechat_msg():
    token = app.config.get('WX_TOKEN')
    sign = request.args.get('signature', '')
    timestamp = request.args.get('timestamp', '')
    nonce = request.args.get('nonce', '')
    echostr = request.args.get('echostr', '')

    if request.method == 'GET':
        try:
            check_signature(token, sign, timestamp, nonce)
        except InvalidSignatureException:
            logger.warning("Signature check failed.")
        return Response(echostr)

    # if request.method == "POST":

    header = {"content_type": "application/xml;charset=utf-8"}
    body = request.data
    logger.info(body)
    msg = parse_message(body)
    if not msg:
        logger.info('Empty message, ignored')
        return

    if msg.type == 'text':
        logger.info('message type text from %s', msg.source)
        response = respond(msg.content, msg.source)
        if response:
            pass
        else:
            response = '你说的我接不上啊,试着夸夸我鸭'

        reply = create_reply(response, msg, render=True)
        logger.info('Replied to %s with "%s"', msg.source, response)
        return Response(reply, content_type=header['content_type'])

    elif msg.type == 'location':
        # if options.debug:
        logger.info('message type location from %s', msg.source)

    elif msg.type == 'image':
        # if options.debug:
        logger.info('message type image from %s', msg.source)
        logger.info(msg.image)
        myimage = image_process(msg.image)
        if not myimage:
            replay = create_reply('失败', msg, render=True)
        elif myimage == "":
            replay = create_reply(myimage, msg, render=True)
        else:
            myimage_id = weChatClient.api.WeChatMaterial.add('image', myimage)
            replay = ImageReply(type='image' ,media_id =myimage_id).render()
        return Response(replay, content_type=header['content_type'])

    else:
        logger.info('message type unknown')
Exemple #13
0
 def handle_click_event(self):
     if self.message.key.lower() == 'time_remind_today':
         now = timezone.now()
         time_reminds = self.user.get_time_reminds().filter(time__date=now).order_by('time').all()
         remind_text_list = self.format_remind_list(time_reminds)
         if remind_text_list:
             return self.text_reply('/:sunHi %s, 你今天的提醒有:\n\n%s' % (self.user.get_full_name(),
                                                                    '\n'.join(remind_text_list)))
         return self.text_reply('/:coffee今天没有提醒,休息一下吧!')
     elif self.message.key.lower() == 'time_remind_tomorrow':
         tomorrow = timezone.now()+timedelta(days=1)
         time_reminds = self.user.get_time_reminds().filter(time__date=tomorrow).order_by('time').all()
         remind_text_list = self.format_remind_list(time_reminds, True)
         if remind_text_list:
             return self.text_reply('/:sunHi %s, 你明天的提醒有:\n\n%s' % (self.user.get_full_name(),
                                                                    '\n'.join(remind_text_list)))
         return self.text_reply('/:coffee明天还没有提醒,休息一下吧!')
     elif self.message.key.lower() == 'customer_service':
         logger.info('Transfer to customer service for %s', self.user.get_full_name())
         return TransferCustomerServiceReply(message=self.message).render()
     elif self.message.key.lower() == 'join_group':
         logger.info('Sending 小密圈 QR code to %s', self.user.get_full_name())
         wechat_client.message.send_text(self.user.openid, u'喜欢微定时?请加入微定时小密圈,欢迎各种反馈和建议~')
         # http://mmbiz.qpic.cn/mmbiz_jpg/U4AEiaplkjQ3olQ6WLhRNIsLxb2LD4kdQSWN6PxulSiaY0dhwrY4HUVBBYFC8xawEd6Sf4ErGLk7EZTeD094ozxw/0?wx_fmt=jpeg
         return ImageReply(message=self.message, media_id='S8Jjk9aHXZ7wXSwK1qqu2UnkQSAHid-VQv_kxNUZnMI').render()
     elif self.message.key.lower() == 'donate':
         logger.info('Sending donation QR code to %s', self.user.get_full_name())
         wechat_client.message.send_text(self.user.openid, u'好的服务离不开大家的鼓励和支持,如果觉得微定时给你的生活带来了一丝便利,'
                                                           u'请使劲用赞赏来支持(别忘了备注微信名,否则微信不让我看到是谁赞赏的)。')
         # http://mmbiz.qpic.cn/mmbiz_png/U4AEiaplkjQ26gI5kMFhaBda9CAcI5uxE4FDwWp8pOduoyBDDuWXtdgxx9UMH3GxUgrRoqibsqDHtwMMNjHJkjVg/0?wx_fmt=png
         return ImageReply(message=self.message, media_id='S8Jjk9aHXZ7wXSwK1qqu2b6yDboZT6UIvYWF4dKLyQs').render()
     elif self.message.key.lower() == 'donate_geizang':
         logger.info('Sending donation GeiZang QR code to %s', self.user.get_full_name())
         wechat_client.message.send_text(self.user.openid, u'好的服务离不开大家的鼓励和支持,如果觉得微定时给你的生活带来了一丝便利,'
                                                           u'请使劲用赞赏来支持。')
         # http://mmbiz.qpic.cn/mmbiz_png/U4AEiaplkjQ0DypiahsELePfHTh2NysKvQmqTBoqVTHabpPPJiaqg5aFunCUdVwraGMdcCo2Tz9GngWccoch3YWow/0?wx_fmt=png
         return ImageReply(message=self.message, media_id='S8Jjk9aHXZ7wXSwK1qqu2d1M_OVm4CoEECgdDlrG0mQ').render()
     elif self.message.key.lower() == 'add_friend':
         logger.info('Sending personal QR code to %s', self.user.get_full_name())
         wechat_client.message.send_text(self.user.openid, u'长按下面的二维码,添加作者个人微信,等你来撩~')
         # http://mmbiz.qpic.cn/mmbiz_jpg/U4AEiaplkjQ1x2YoD9GRticXvMk5iaWJCtEVuChsHecnwdfHFbiafJarWXyiaABTu4pPUKibvnJ1ZGwUF7arzCaFkArw/0?wx_fmt=jpeg
         return ImageReply(message=self.message, media_id='S8Jjk9aHXZ7wXSwK1qqu2SXTItktLfgk4Cv9bod5l8k').render()
     return self.handle_unknown_event()
Exemple #14
0
def wechat(request):
    if request.method == 'GET':
        signature = request.GET.get('signature', None)
        timestamp = request.GET.get('timestamp', None)
        nonce = request.GET.get('nonce', None)
        echostr = request.GET.get('echostr', None)


        try:
            check_signature(WECHAT_TOKEN, signature, timestamp, nonce)
        except InvalidSignatureException:
            echostr = 'error'

        return HttpResponse(echostr)

    elif request.method == 'POST':
        msg = parse_message(request.body)
        print(msg)
        # if msg.type == 'text':
        #     if msg.content == '民事案件':
        #         reply = getDogLossList(request, msg)
        #     elif msg.content == '刑事案件':
        #         reply = getDogOwnerList(request, msg)
        #     else:
        #         reply = TransferCustomerServiceReply(message=msg)
        # code = request.POST.get('code',None)
        # print(code,1111111111)
        if msg.type == 'image':
            reply = ImageReply(message=msg)
            reply.media_id = msg.media_id
        elif msg.type == 'voice':
            reply = VoiceReply(message=msg)
            reply.media_id = msg.media_id
            reply.content = '语音信息'
        elif msg.type == 'event':
            print('eventkey=', msg.event)
            if msg.event == 'subscribe':
                print(333333333333)
                saveWxLaw(msg.source)
                reply = create_reply('感谢您关注【辽宁大潮律师事务所】', msg)
            elif msg.event == 'unsubscribe':
                reply = create_reply('取消关注公众号', msg)
                unSubUserinfo(msg.source)
            elif msg.event == 'subscribe_scan':
                reply = create_reply('感谢您关注【辽宁大潮律师事务所】', msg)
                saveWxLaw(msg.source, msg.scene_id)
                print('scene_id=', msg.scene_id)
            elif msg.event == 'scan':
                print('scan====', msg.scene_id)
                # setUserToMember(msg.source, msg.scene_id)
                reply = create_reply('', msg)
            else:
                reply = create_reply('view', msg)

        response = HttpResponse(reply.render(), content_type="application/xml")
        return response
Exemple #15
0
def photo_score(msg, accessToken=None):
    resp_xml = chk_msg_types(msg, ['image'], '该功能只能处理图像数据。')
    if resp_xml:
        return resp_xml

    try:
        # 通过公众号接收到的图片信息下载图片到本地
        path = download(msg.image, msg.source)
        # 调用腾讯ai人脸识别接口接口
        r = wechat.face.access_api(path)
        if r == 'success':
            # 上传图片,得到 media_id
            media_id = upload('image', path, accessToken)
            reply = ImageReply(media_id=media_id, message=msg)
        else:
            reply = TextReply(content='人脸检测失败,请上传1M以下人脸清晰的照片', message=msg)
        resp_xml = reply.render()
    except Exception as e:
        resp_xml = get_error_reply(msg)

    return resp_xml
 def get_image_url(self, msg):
     url = 'http://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1'
     response = requests.get(url, headers=headers)
     strJson = json.loads(response.content)
     url = 'http://s.cn.bing.net' + strJson['images'][0]['url']
     context = ''
     context += '<a href="{}">每日必应图片</a>'.format(url)
     # reply = create_reply(str(context), msg)
     reply = ImageReply(
         message=msg,
         media_id=
         'Ve1pve6vOfZerye0t8gV8V6DKiEC-hOvsZRMdHmK5-oRZuHZspMlJSsn9ei2_N0o')
     return reply
Exemple #17
0
 def image_resp(self, msg, resp):
     if resp['ret'] == 0:
         file_obj = StringIO(base64.b64decode(resp['data']['image']))
         # https://stackoverflow.com/questions/26300054/set-name-header-of-multipart-encoded-file-post
         mid = self._media_upload(media_file=('tmp.jpg', file_obj))
         if not mid:
             return create_reply('系统暂时不能处理此格式的图,请尝试其他图!', msg)
         reply = ImageReply(media_id=mid, message=msg)
         # 本次步骤已经结束了,删除当前指令
         self.cache.delete(msg.source)
     else:
         reply = create_reply(u'%s, 重新发送一张图试试吧!' % resp['msg'], msg)
     return reply
Exemple #18
0
 def on_post(self, req, resp):
     xml = req.stream.read()
     msg = parse_message(xml)
     if msg.type == 'text':
         reply = TextReply(content=msg.content, message=msg)
         xml = reply.render()
         resp.body = (xml)
         resp.status = falcon.HTTP_200
     elif msg.type == 'image':
         reply = ImageReply(media_id=msg.media_id, message=msg)
         xml = reply.render()
         resp.body = (xml)
         resp.status = falcon.HTTP_200
Exemple #19
0
def weixin_handler():
    # 从config文件中获取
    token = os.getenv('WECHAT_TOKEN', config.WECHAT_TOKEN)
    encodingAESKey = os.getenv('WECHAT_ENCODING_AES_KEY',
                               config.WECHAT_ENCODING_AES_KEY)
    appId = os.getenv('WECHAT_APP_ID', config.WECHAT_APP_ID)

    # 从请求中获取
    signature = flask.request.args.get("signature")
    timestamp = flask.request.args.get("timestamp")
    nonce = flask.request.args.get("nonce")
    echostr = flask.request.args.get("echostr")
    # encrypt_type = flask.request.args.get("encrypt_type")
    msg_signature = flask.request.args.get("msg_signature")
    '''
    print('signature:', signature)
    print('timestamp: ', timestamp)
    print('nonce:', nonce)
    print('echo_str:', echostr)
    print('encrypt_type:', encrypt_type)
    print('msg_signature:', msg_signature)
    '''

    crypto = WeChatCrypto(token, encodingAESKey, appId)
    try:
        check_signature(token, signature, timestamp, nonce)  # 签名验证
    except InvalidSignatureException:
        flask.abort(403)  # 校验token失败,证明这条消息不是微信服务器发送过来的

    if flask.request.method == "GET":  # 如果时明文模式 直接返回echoster
        return echostr
    elif flask.request.method == "POST":  # 如果时加密模式 先对传入的数据解密
        try:
            msg = crypto.decrypt_message(flask.request.data, msg_signature,
                                         timestamp, nonce)
            print('Descypted message: \n%s' % msg)  # 输出数据内容
        except (InvalidSignatureException, InvalidAppIdException):
            flask.abort(404)
        msg = parse_message(msg)  # 解析xml
        if msg.type == 'text':
            res = get_robot_reply(msg.content)
            reply = TextReply(message=msg)
            reply.content = '%s' % (res)
        elif msg.type == "image":  # 图片回复
            reply = ImageReply(message=msg)
            reply.media_id = msg.media_id
        else:
            reply = TextReply(content="暂时不支持此种类型的回复哦~", message=msg)
        print('Enscypted message: \n%s' % reply)
        # 返回加密信息
        return crypto.encrypt_message(reply.render(), nonce, timestamp)
Exemple #20
0
 def post(self, request):
     msg = parse_message(request.body)
     print(msg)
     if msg.type == 'text':
         reply = create_reply('这是条文字消息', message=msg)
     elif msg.type == 'image':
         reply = create_reply('这是条图片消息', message=msg)
     elif msg.type == 'voice':
         reply = create_reply('这是条语音消息', message=msg)
     elif msg.type == 'event':
         openid = request.GET.get('openid', None)
         print(openid)
         if msg.event == 'subscribe':
             reply = create_reply('感谢你的关注', message=msg)
             inf = client.user.get('o-Njg0grnFp0LNHidvhKNek6_H88')
             # print(user["nickname"])
             Users.objects.create(nickname=inf["nickname"],
                                  headimgurl=inf["headimgurl"],
                                  sex=inf["sex"],
                                  country=inf["country"],
                                  province=inf["province"],
                                  city=inf["city"],
                                  subscribe_time=inf["subscribe_time"],
                                  openid=inf["openid"])
         elif msg.event == 'unsubscribe':
             Users.objects.get(openid=openid).delete()
         elif msg.event == 'click':
             reply = ImageReply(message=msg)
             media_id = '9kT9-alo_ph3g2I45zACW5X59Dqxbf45k-0Z89XXOSta_H_gqfnAhJvG557pqOEM'
             reply.media_id = media_id
             Menu_click_count.picture_click_count += 1
         elif msg.event == 'view':
             Menu_click_count.url_click_count += 1
     else:
         reply = create_reply('这是条其他类型消息', message=msg)
     return HttpResponse(reply.render(), content_type=" ")
Exemple #21
0
def response(msg, bot=None):
    keyword = None
    if msg.type == 'text':
        keyword = msg.content.replace(u'斗图', '').strip()
    result = search(keyword)
    if not result or not bot:
        if bot:
            # 退出斗图.
            bot.cache.clear()
        return u'我败了,无图可战<系统将自动退出斗图模式>'
    try:
        result = bot.wechat_client.media.upload(media_type='image',
                                                media_file=result)
        mid = result['media_id']
        return ImageReply(message=msg, media_id=mid)
    except WeChatClientException, e:
        return u'我败了.....,如果需要退出请输入字母 Q'
Exemple #22
0
def wechat(request):
    if request.method == 'GET':
        signature = request.GET.get('signature', None)
        timestamp = request.GET.get('timestamp', None)
        nonce = request.GET.get('nonce', None)
        echostr = request.GET.get('echostr', None)

        try:
            check_signature(settings.WECHAT_TOKEN, signature, timestamp, nonce)
        except InvalidSignatureException:
            echostr = 'error'

        return HttpResponse(echostr)

    elif request.method == 'POST':
        msg = parse_message(request.body)
        if msg.type == 'text':
            reply = TransferCustomerServiceReply(message=msg)
        elif msg.type == 'image':
            reply = ImageReply(message=msg)
            reply.media_id = msg.media_id
        elif msg.type == 'voice':
            reply = VoiceReply(message=msg)
            reply.media_id = msg.media_id
            reply.content = '语音信息'
        elif msg.type == 'event':
            print('eventkey=', msg.event)
            if msg.event == 'subscribe':
                saveUserinfo(msg.source)
                reply = create_reply('你好,欢迎关注亚电新能源', msg)
            elif msg.event == 'unsubscribe':
                reply = create_reply('取消关注公众号', msg)
                unSubUserinfo(msg.source)
            elif msg.event == 'subscribe_scan':
                reply = create_reply('你好,欢迎关注亚电新能源', msg)
                saveUserinfo(msg.source, msg.scene_id)
            elif msg.event == 'scan':
                reply = create_reply('', msg)
            else:
                reply = create_reply('view', msg)
        else:
            reply = create_reply('', msg)

        response = HttpResponse(reply.render(), content_type="application/xml")
        return response
Exemple #23
0
 def on_post(self, req, resp):
     xml = req.stream.read()
     msg = parse_message(xml)
     if msg.type == 'text':
         reply = TextReply(content=msg.content, message=msg)
         xml = reply.render()
         resp.body = (xml)
         resp.status = falcon.HTTP_200
     elif msg.type == 'image':
         name = img_download(msg.image, msg.source)
         print(name)
         r = access_api('images/' + name)
         if r == 'success':
             media_id = img_upload('image', 'faces/' + name)
             reply = ImageReply(media_id=media_id, message=msg)
         else:
             reply = TextReply(content='人脸检测失败,请上传1M以下人脸清晰的照片', message=msg)
         xml = reply.render()
         resp.body = (xml)
         resp.status = falcon.HTTP_200
Exemple #24
0
 def on_post(self, req, resp):
     # 猜测是打开数据流
     xml = req.stream.read()
     # 解析xml格式数据
     msg = parse_message(xml)
     if msg.type == 'text':
         reply = TextReply(content='露露我爱你',
                           message=msg)  # content=msg.content
         xml = reply.render()
         resp.body = (xml)
         resp.status = falcon.HTTP_200
     elif msg.type == 'image':
         reply = ImageReply(media_id=msg.media_id, message=msg)
         xml = reply.render()
         resp.body = (xml)
         resp.status = falcon.HTTP_200
     elif msg.type == 'voice':
         reply = VoiceReply(media_id=msg.media_id, message=msg)
         xml = reply.render()
         resp.body = (xml)
         resp.status = falcon.HTTP_200
Exemple #25
0
 def on_post(self, req, resp):
     xml = req.stream.read()
     msg = parse_message(xml)
     if msg.type == 'text':
         if msg.content == '笑话':
             cursor = table.find({'id': random.randint(1, 6)})
             for i in cursor:
                 content = i["joke"]
                 print(content)
             reply = TextReply(content=content, message=msg)
             xml = reply.render()
         else:
             print(msg, msg.content)
             reply = TextReply(content=msg.content, message=msg)
         xml = reply.render()
         resp.body = (xml)
         resp.status = falcon.HTTP_200
     elif msg.type == 'image':
         reply = ImageReply(media_id=msg.media_id, message=msg)
         xml = reply.render()
         resp.body = (xml)
         resp.status = falcon.HTTP_200
Exemple #26
0
 def on_post(self, req, resp):
     xml = req.stream.read()
     msg = parse_message(xml)
     from_user_name = self.extract_from_username(msg)
     input_language_zh = True
     if len(self.cache_dict) > 200:
         del (self.cache_dict)
         self.cache_dict = {}
     if msg.type == 'text':
         inputTxt = msg.content
         if inputTxt in self.cache_dict:
             if self.cache_dict[inputTxt]:
                 replyTxt = self.cache_dict[inputTxt]
                 reply = TextReply(content=replyTxt, message=msg)
                 del (self.cache_dict)
                 self.cache_dict = {}
                 xml = reply.render()
                 resp.body = (xml)
                 resp.status = falcon.HTTP_200
                 return
         language = self.judge_language(inputTxt)
         if language == 'en':
             input_language_zh = False
             inputTxt = translate(inputTxt, 'en')
         replyTxt, reply_type = self.getReply(inputTxt, input_language_zh,
                                              msg.id, from_user_name)
         if "@@##$$@@" not in replyTxt and replyTxt and reply_type == "chat":
             self.cache_dict[inputTxt] = replyTxt
         reply = TextReply(content=replyTxt, message=msg)
         xml = reply.render()
         resp.body = (xml)
         resp.status = falcon.HTTP_200
     elif msg.type == 'image':
         reply = ImageReply(media_id=msg.media_id, message=msg)
         xml = reply.render()
         resp.body = (xml)
         resp.status = falcon.HTTP_200
Exemple #27
0
def wechat_back(event):
    event = re.sub(r'\<xml\>', '<xml>\n', event)
    xml = event
    msg = parse_message(xml)
    if msg.type == 'text':
        question = turning(msg.content)
        s = {}
        ss = {}
        lib = {}
        lib_qt = {}
        lib_qm = {}
        s_max = ''
        for i in range(0, len(ques)):
            lib_qt[ques[i]] = int(token[i])
        for i in range(0, len(ques)):
            lib_qm[ques[i]] = media_id[i]
        for i in range(0, len(ques)):
            lib[ques[i]] = answ[i]
        text = [x.strip() for x in ques if len(x) > 2]
        if question in lib:
            s_max = question
            answer = lib[question]
        else:
            for i in text:
                similarity = sentence_similarity(i, question, tfidf_dict)
                s[i] = similarity
            s_max = max(s, key=s.get)
        #print(s_max)
        for i in range(0, 10):
            if jaccard(s_max, question) < 0.20:
                del s[s_max]
                s_max = max(s, key=s.get)
            else:
                try:
                    ss[s_max] = s[s_max] + jaccard(s_max, question)
                except:
                    ss[s_max] = 1.5
        #print(ss)
        try:
            s_max = max(ss, key=ss.get)
        except:
            s_max = '   '
        #print(s_max)
        '''try:
            print(lib_qt[s_max])
        except:
            lib_qt[s_max] = 9
            print(ss)'''

        if lib_qt[s_max] == 1:
            answer = lib_qm[s_max]
            reply = ImageReply(content='AAAAAAAAA',
                               media_id=answer,
                               message=msg)
            xml = reply.render()

        elif lib_qt[s_max] == 2:
            answer = lib[s_max]
            img = lib_qm[s_max].split(' ')[0]
            url = lib_qm[s_max].split(' ')[1]
            reply = ArticlesReply(message=msg)
            reply.add_article({
                'title': question,
                'description': answer,
                'image': img,
                'url': url
            })
            xml = reply.render()

        else:
            try:
                answer = lib[s_max]
            except:
                answer = '暂无此问题'
                answer = answer.encode('utf-8')
                #print(answer)
            reply = TextReply(content=answer, message=msg)
            xml = reply.render()
        print('问题:' + question)
        print('匹配结果:' + s_max)
        print('答案:', answer)
        resp = apiReply(reply, txt=True, content_type="application/xml")
        #resp = json.dumps(reply,encoding = 'utf-8')
        return resp
Exemple #28
0
def wechat_check(request):
    if request.method == 'GET':
        # 校验
        signature = request.GET.get('signature', '')
        timestamp = request.GET.get('timestamp', '')
        nonce = request.GET.get('nonce', '')
        echo_str = request.GET.get('echostr', '')
        try:
            check_signature(TOKEN, signature, timestamp, nonce)
        except InvalidSignatureException:
            return HttpResponse(status=403)
        return HttpResponse(echo_str)
    else:
        # 自动回复文本
        try:
            msg = parse_message(request.body)
            if isinstance(msg, BaseEvent):
                if msg.event == 'subscribe':
                    reply = create_reply(article_leizhu, message=msg)
                elif msg.event == 'click':
                    if msg.key == 'inform_articles':
                        reply = create_reply(inform_articles, msg)
                    elif msg.key == "service":
                        reply = ImageReply(message=msg, media_id='nvnR6egwWE1WzzIcMXo403dxqfcx5fV_GRhQnRH8Wsw')
                # 添加扫描二维码关注事件
                elif msg.event == "scan":
                    reply = create_reply(article_leizhu, message=msg)
                    try:
                        xml_data = str(request.body.decode())
                        dict = xmltodict.parse(xml_data)
                        user = dict["xml"]["FromUserName"]
                        print("扫码用户的openid:{}".format(user))
                        # user_li = re.findall(r"qrscene_(\d+)", user)
                        # user_id = int("".join(user_li)) + 100000
                        # openid = dict["xml"]["FromUserName"]
                    except Exception as e:
                        print(e)
                elif msg.event == "subscribe_scan":
                    reply = create_reply(article_leizhu, message=msg)
                    xml_data = str(request.body.decode())
                    print(xml_data, "454545454")
                    dict = xmltodict.parse(xml_data)
                    user = dict["xml"]["EventKey"]
                    user_li = re.findall(r"qrscene_(\d+)", user)
                    user_id = int("".join(user_li)) + 100000
                    openid = dict["xml"]["FromUserName"]
                    print("扫码用户的openid:{},id:{}".format(openid, user_id))
                    userinfo = UserInfo.objects.check_user(openid)
                    create_time = timezone.now()
                    # if create_time.strftime("%Y-%m-%d") == "2018-04-1":
                    #     fools_day = 1
                    # else:
                    #     fools_day = 0
                    # 如果该用户关系已经存在,那么就不创建该用户关系表
                    if len(UserInvite.objects.filter(invite=openid)) > 0:
                        print("用户关系已经存在,则什么也不做")
                        pass
                    else:
                        print("用户关系不存在,则创建用户关系表")
                        # 创建用户关系
                        UserInvite.objects.create(user_id=user_id, invite=openid, create_time=create_time,
                                                  fools_day=0)
                        # 创建用户邀请数量表
                        Invitenum.objects.undate_num(user_id=user_id)
                        # 增加用户赚取收益比例
                        Invitenum.objects.earning(user_id=user_id)
                else:
                    reply = create_reply('请重试', msg)
            elif isinstance(msg, BaseMessage):
                if msg.type == 'text':
                    content = msg.content
                    if "说明" in content:
                        reply = create_reply(inform_articles, message=msg)
                    elif "客服" in content:
                        reply = ImageReply(message=msg, media_id='nvnR6egwWE1WzzIcMXo403dxqfcx5fV_GRhQnRH8Wsw')
                    elif "2018" in content:
                        reply = create_reply(article_2018, message=msg)
                    elif "提现" in content:
                        reply = create_reply(withdraw, message=msg)
                    elif "测试" in content:
                        reply = create_reply(menu, message=msg)
                    elif "999" in content:
                        reply = ImageReply(message=msg, media_id='nvnR6egwWE1WzzIcMXo403dxqfcx5fV_GRhQnRH8Wsw')
                    else:
                        reply = create_reply(menu, message=msg)
                else:
                    reply = create_reply('', message=msg)
            else:
                reply = create_reply('Sorry, can not handle this for now', msg)
            return HttpResponse(reply.render(), content_type="application/xml")
        except (InvalidSignatureException, InvalidAppIdException):
            return HttpResponse(status=403)
Exemple #29
0
def handle_wx(request):
    if request.method == 'GET':
        signature = request.GET.get('signature', '')
        timestamp = request.GET.get('timestamp', '')
        nonce = request.GET.get('nonce', '')
        echo_str = request.GET.get('echostr', '')
        try:
            check_signature(token, signature, timestamp, nonce)
        except InvalidSignatureException:
            echo_str = '错误的请求'
        response = HttpResponse(echo_str)
        # client = WeChatClient("wx058a1e6adf42dede", "d4631adb81c598c1f9acddfb4bc2ba10")
        # menu = client.menu.get()
        # print(menu)
        return response
    elif request.method == 'POST':
        xml = request.body
        msg = parse_message(xml)
        openid = msg.source
        try:
            if msg.type == 'text':
                reply = TextReply(content=msg.content, message=msg)
                print(msg.content)
                return HttpResponse(reply.render())
            elif msg.type == 'image':
                print(msg.media_id)
                reply = ImageReply(media_id=msg.media_id, message=msg)
                return HttpResponse(reply.render())
            elif msg.type == 'voice':
                print(msg.media_id)
                reply = VoiceReply(media_id=msg.media_id, message=msg)
                return HttpResponse(reply.render())
            elif msg.type == 'video':
                print(msg)
                reply = VideoReply(media_id=msg.media_id,
                                   thumb_media_id=msg.thumb_media_id,
                                   title='title',
                                   description='description',
                                   message=msg)
                print(reply)
                print(msg.media_id)
                return HttpResponse(reply.render())
            elif msg.type == 'music':
                print(msg.thumb_media_id, msg.title, msg.description)
                reply = MusicReply(thumb_media_id=msg.thumb_media_id,
                                   title='title',
                                   description='description',
                                   music_url=msg.music_url,
                                   hq_music_url=msg.hq_music_url,
                                   message=msg)
                return HttpResponse(reply.render())
            # elif msg.type == 'news':
            #         reply = ArticlesReply(message=msg, articles=[
            #             {
            #                 'title': u'标题1',
            #                 'description': u'描述1',
            #                 'url': u'http://www.qq.com',
            #             },
            #             {
            #                 'title': u'标题2',
            #                 'description': u'描述2',
            #                 'url': u'http://www.qq.com',
            #                 'image': 'http://img.qq.com/1.png',
            #             },
            #         ])
            #         # 继续添加
            #         reply.add_article({
            #             'title': u'标题3',
            #             'description': u'描述3',
            #             'url': u'http://www.qq.com',
            #         })
            #         r_xml = reply.render()
            #         return HttpResponse(r_xml)
            elif msg.type == 'event':
                push = ScanCodeWaitMsgEvent(msg)
                #获取二维码信息,字符串
                content = msg.scan_result
                print(content)
                # 如何处理,自行处理,回复一段文本或者图文
                reply = TextReply(content="Someting", message=msg)
                r_xml = reply.render()
                return HttpResponse(r_xml)
            #pass
        except Exception as e:
            print("Exception:", e)
            return "success"
    return HttpResponse('ok')
Exemple #30
0
 def POST(self):
     try:
         xml = web.data()
         msg = parse_message(xml)
         if msg.type == 'text':
             content = msg.content
             if content.startswith(('表情包:', '表情包:')):
                 words = ''.join(content.replace(':', ':').split(':')[1:])
                 wechat_client = WeChatClient(
                     appid='wx19a2591b2a719add',
                     secret='c46fa65dbc2803b90431fbf9c803cbd4',
                 )
                 access_token = wechat_client.access_token
                 json_data = pics.upload_pic(pics.get_random_pic(words), access_token)
                 # print(json_data)
                 if 'errcode' not in json_data:
                     media_id = json_data['media_id']
                     reply = ImageReply(message=msg)
                     reply.media_id = media_id
                     # print(web.url() + ' get_pic. words: ' + words + ' return: ' + str(json_data))
                     logger.info(web.url() + ' get_pic. words: ' + words + ' return: ' + str(json_data))
                 else:
                     reply = TextReply(message=msg)
                     reply.content = json_data['link']
                     logger.warning(web.url() + ' get_pic faild,return link.  words:' + words + ' return: ' + json_data['link'])
             elif content.startswith(('影视:', '影视:')):
                 words = ''.join(content.replace(':', ':').split(':')[1:])
                 if words == '':
                     string = '没有输入要搜索的名字!'
                     logger.info(web.url() + ' get_movie without words')
                 else:
                     data = search(words)
                     data1 = data[0]
                     data2 = data[1]
                     if len(data1) != 0:
                         string = ''
                         if len(data1) <= 12:
                             for each in data1:
                                 string += '%s %s %s %s\n' % (each[0], each[1], each[3], each[4])
                         else:
                             for each in data1[:12]:
                                 string += '%s %s %s %s\n' % (each[0], each[1], each[3], each[4])
                     elif len(data2) != 0:
                         string = ''
                         if len(data2) <= 12:
                             for each in data2:
                                 string += '%s %s %s %s\n' % (each[0], each[1], each[3], each[4])
                         else:
                             for each in data2[:12]:
                                 string += '%s %s %s %s\n' % (each[0], each[1], each[3], each[4])
                     else:
                         string = '竟然没有搜索到!!!\n请检查名称输入的是否正确,请尽量使用中文哦'
                     # print(web.url() + ' get_pic. words: ' + words + ' data: ' + str(data) + ' return: ' + string)
                     logger.info(web.url() + ' get_movie. words: ' + words + ' data: ' + str(data) + ' return: ' + string)
                 reply = TextReply(message=msg)
                 reply.content = string
             elif content.startswith(('在线:', '在线:')):
                 words = ''.join(content.replace(':', ':').split(':')[1:])
                 if words == '':
                     string = '没有输入要搜索的名字!'
                     logger.info(web.url() + ' see_movie without words')
                 else:
                     data = get_link(words)
                     if data:
                         string = data
                     else:
                         string = '竟然没有搜索到!!!\n请检查名称输入的是否正确,请试试英文名哦'
                     # print(web.url() + ' see_pic. words: ' + words + ' data: ' + str(data) + ' return: ' + string)
                     logger.info(web.url() + ' see_movie. words: ' + words + ' data: ' + str(data) + ' return: ' + string)
                 reply = TextReply(message=msg)
                 reply.content = string
             else:
                 reply = TextReply(message=msg)
                 response = get_response(content)
                 logger.info(web.url() + ' turing. words: ' + content + ' response: ' + response)
                 reply.content = response
         elif msg.type == 'event' and msg.event:
             mscontent = msg.event
             if mscontent == "subscribe":
                 string = '终于等到你!欢迎关注Snoopy同学~\n' \
                          '输入"表情包:xxx"获取自定义文字的表情\n' \
                          '输入"影视:xxx"获取电影的网盘链接\n' \
                          '输入"在线:xxx"获取在线观看视频的链接,需要复制到浏览器使用哦~'
                 reply = TextReply(message=msg)
                 reply.content = string
             elif mscontent == "unsubscribe":
                 string = '有什么不足之处还请谅解,我会慢慢改进,欢迎您以后再来'
                 reply = TextReply(message=msg)
                 reply.content = string
         # 转换成 XML
         reply_xml = reply.render()
         return reply_xml
     except Exception as e:
         logger.error(e)
         # print(e)
         return "success"
def image_reply(msg):
    reply = ImageReply(message=msg)
    id = random.randint(0, 7)

    if id == 0:
        reply.media_id = "3nZjDfLSZGG6pM1moOgVpiIxl77Ii501riZPHS7NdOY"
    elif id == 1:
        reply.media_id = "3nZjDfLSZGG6pM1moOgVpm4_XftO2zaJxsCO9KHOpZE"
    elif id == 2:
        reply.media_id = "3nZjDfLSZGG6pM1moOgVphls0UeRqcAHael9a_KTrM4"
    elif id == 3:
        reply.media_id = "3nZjDfLSZGG6pM1moOgVpteYUBCK3Evkc3YYnQcDf3E"
    elif id == 4:
        reply.media_id = "3nZjDfLSZGG6pM1moOgVppGMwQTVoaNRb5nQMIPYMmE"
    elif id == 5:
        reply.media_id = "3nZjDfLSZGG6pM1moOgVpp21QXwC-r14DremI0PdZjQ"
    elif id == 6:
        reply.media_id = "3nZjDfLSZGG6pM1moOgVpgWdPB8IBUo57Avk3Med_4k"
    else:
        k = msg.media_id
        reply.media_id = "%s" % k

    return reply.render()