Ejemplo n.º 1
0
class Reply:
    def __init__(self, fromUserName):
        self.fromUserName = None
        self.toUserName = None
        self.interface = Interface()
        self.meizitu = Meizitu()
        self.talentapt = TalentApt()
        self.music = Music()
        self.location = Location(fromUserName)
        self.vip_vedio = VipVideo()

    def menu(self):
        content = u'你好,我现在还不知道怎么处理这个消息'
        return self.textMsg(content)

    def textMsg(self, content):
        xml_resp = "<xml>\
                    <ToUserName><![CDATA[%s]]></ToUserName>\
                    <FromUserName><![CDATA[%s]]></FromUserName>\
                    <CreateTime>%s</CreateTime>\
                    <MsgType><![CDATA[text]]></MsgType>\
                    <Content><![CDATA[%s]]></Content>\
                    <FuncFlag>0</FuncFlag>\
                    </xml>"

        response = make_response(xml_resp %
                                 (self.fromUserName, self.toUserName,
                                  str(int(time.time())), content))
        response.content_type = 'application/xml'
        return response

    def imageMsg(self, media_id):
        xml_resp = '<xml>\
                    <ToUserName><![CDATA[%s]]></ToUserName>\
                    <FromUserName><![CDATA[%s]]></FromUserName>\
                    <CreateTime>%s</CreateTime>\
                    <MsgType><![CDATA[image]]></MsgType>\
                    <Image>\
                    <MediaId><![CDATA[%s]]></MediaId>\
                    </Image>\
                    </xml>'

        response = make_response(xml_resp %
                                 (self.fromUserName, self.toUserName,
                                  str(int(time.time())), media_id))
        response.content_type = 'application/xml'
        return response

    def musicMsg(self, link, name, singer):
        #link = 'http://music.163.com/#/song?id=436514312'
        xml_resp = '<xml>\
                    <ToUserName><![CDATA[%s]]></ToUserName>\
                    <FromUserName><![CDATA[%s]]></FromUserName>\
                    <CreateTime>%s</CreateTime>\
                    <MsgType><![CDATA[music]]></MsgType>\
                    <Music>\
                    <Title><![CDATA[%s]]></Title>\
                    <Description><![CDATA[%s]]></Description>\
                    <MusicUrl><![CDATA[%s]]></MusicUrl>\
                    <HQMusicUrl><![CDATA[%s]]></HQMusicUrl>\
                    </Music>\
                    </xml>'

        response = make_response(
            xml_resp %
            (self.fromUserName, self.toUserName, str(int(
                time.time())), name, u'歌手:%s' % singer, link, link))
        response.content_type = 'application/xml'
        return response

    def imgTextMsg(self, item_list):
        item_fmt = '<item>\
                    <Title><![CDATA[%s]]></Title>\
                    <Description><![CDATA[%s]]></Description>\
                    <PicUrl><![CDATA[%s]]></PicUrl>\
                    <Url><![CDATA[%s]]></Url>\
                    </item>'

        item_xml_list = []
        for item in item_list:
            item_xml = item_fmt % (item[0], item[1], item[2], item[3])
            item_xml_list.append(item_xml)

        xml_resp = '<xml>\
                    <ToUserName><![CDATA[%s]]></ToUserName>\
                    <FromUserName><![CDATA[%s]]></FromUserName>\
                    <CreateTime>%s</CreateTime>\
                    <MsgType><![CDATA[news]]></MsgType>\
                    <ArticleCount>%d</ArticleCount>\
                    <Articles>\
                    %s\
                    </Articles>\
                    </xml>'

        response = make_response(
            xml_resp %
            (self.fromUserName, self.toUserName, str(int(
                time.time())), len(item_list), '\n'.join(item_xml_list)))
        response.content_type = 'application/xml'
        return response

    def subscribe(self):
        content = u'欢迎来到邓小超的微信公众号'
        return self.textMsg(content)

    def tulingRobot(self, content):
        userid = 0
        for chr in self.fromUserName:
            userid += ord(chr)

        url = 'http://www.tuling123.com/openapi/api'
        data = {
            'key': 'db0b623ae0dd4e9ca28a89174abe156c',
            'info': content,
            'userid': str(userid)
        }
        resp = requests.post(url, data=data)
        resp_json = json.loads(resp.content)
        code = resp_json['code']
        if code == 100000:
            return self.textMsg(resp_json['text'])
        elif code == 200000:
            return self.textMsg(resp_json['text'] + '\n' + resp_json['url'])
        elif code == 302000:
            item_list = []
            for news in resp_json['list']:
                item = [
                    news['article'], news['source'], news['icon'],
                    news['detailurl']
                ]
                item_list.append(item)
                if len(item_list) == 5:
                    break
            return self.imgTextMsg(item_list)
        elif code == 308000:
            item_list = []
            for menu in resp_json['list']:
                item = [
                    menu['name'], menu['info'], menu['icon'], menu['detailurl']
                ]
                item_list.append(item)
                if len(item_list) == 5:
                    break
            return self.imgTextMsg(item_list)

    def dispatch(self, recv):
        xml_recv = ET.fromstring(recv)
        self.toUserName = xml_recv.find('ToUserName').text
        self.fromUserName = xml_recv.find('FromUserName').text
        msgType = xml_recv.find('MsgType').text
        if msgType == 'text':
            text = xml_recv.find('Content').text
            if text == u'文本':
                return self.textMsg(text)
            elif text.find(u'音乐') != -1:
                name = text.split(' ')[-1]
                link, name, singer = self.music.getMusic(name)
                return self.musicMsg(link, name, singer)
            elif text == u'二维码':
                # media_id = self.interface.addMedia('app/static/qrcode.jpg', 'image', 0)
                return self.imageMsg(
                    'a7Zzsef34bHTIphJVVhcc2fFZxqCt6gZO3HSuGHtu68')
            elif text == u'开始跑步':
                # mc = memcache.Client()
                # mc.set('running', True)
                return self.textMsg('奔跑吧,小伙')
            elif text == u'结束跑步':
                # mc = memcache.Client()
                # mc.set('running', False)
                distance = self.location.calDistance()
                self.location.cleanAllPoints()
                return self.textMsg(distance)
            elif text in self.meizitu.tag_list:
                articals = self.meizitu.crawl(
                    self.meizitu.tag_list.index(text))
                return self.imgTextMsg(articals)
            elif text == u'人才公寓':
                self.talentapt.login()
                num, checked = self.talentapt.getWaitingRecord()
                text_reply = u'企业审核: %s\n当前排名: %s' % (checked, num)
                return self.textMsg(text_reply)
            elif text[0:5] == u'vip视频':
                return self.textMsg(self.vip_vedio.free_url(text[5:]))
            else:
                return self.tulingRobot(text)
        elif msgType == 'image':
            media_id = xml_recv.find('MediaId').text
            return self.imageMsg(media_id)
        elif msgType == 'event':
            event = xml_recv.find('Event').text
            if event == 'subscribe':
                return self.subscribe()
            elif event == 'LOCATION':
                # mc = memcache.Client()
                # running = mc.get('running')
                # if running:
                #     latitude = xml_recv.find('Latitude').text
                #     longitude = xml_recv.find('Longitude').text
                #     precision = xml_recv.find('Precision').text
                #     print latitude, longitude, precision
                #     self.location.addPoint(latitude, longitude)
                return 'success'
        else:
            return self.menu()