示例#1
0
 def _get_contact_info(self, appid, fakeid, msg_id):
     post_url = httputils.build_url(
         url.mp_contact_info, {
             't': 'ajax-getcontactinfo',
             'fakeid': fakeid,
             'msg_id': msg_id,
             'lang': 'zh_CN'
         })
     referer_url = httputils.build_url(
         url.mp_message, {
             't': 'message/list',
             'count': 30,
             'offset': 0,
             'day': 7,
             'token': self.tokens[appid]['token']
         })
     try:
         resp = yield self._post_form(
             appid,
             post_url, {
                 'token': self.tokens[appid]['token'],
                 'lang': 'zh_CN',
                 'f': 'json',
                 'ajax': 1,
                 'random': random.random()
             },
             referer=referer_url)
     except tornado.httpclient.HTTPError:
         raise tornado.gen.Return({'err_code': 7000})
     raise tornado.gen.Return(_parse_mp_resp(resp))
示例#2
0
 def _send_single_message(self, appid, fakeid, content):
     post_url = httputils.build_url(
         url.mp_singlesend, {
             't': 'ajax-response',
             'f': 'json',
             'token': self.tokens[appid]['token'],
             'lang': 'zh_CN'
         })
     referer_url = httputils.build_url(
         url.mp_singlesend_page, {
             'tofakeid': fakeid,
             't': 'message/send',
             'action': 'index',
             'token': self.tokens[appid]['token'],
             'lang': 'zh_CN'
         })
     try:
         resp = yield self._post_form(
             appid,
             post_url, {
                 'token': self.tokens[appid]['token'],
                 'lang': 'zh_CN',
                 'f': 'json',
                 'ajax': 1,
                 'type': 1,
                 'content': content,
                 'tofakeid': fakeid,
                 'random': random.random()
             },
             referer=referer_url)
     except tornado.httpclient.HTTPError:
         raise tornado.gen.Return({'err_code': 7000})
     raise tornado.gen.Return(_parse_mp_resp(resp))
示例#3
0
 def _send_single_message(self, appid, fakeid, content):
     post_url = httputils.build_url(url.mp_singlesend, {
         't': 'ajax-response',
         'f': 'json',
         'token': self.tokens[appid]['token'],
         'lang': 'zh_CN'})
     referer_url = httputils.build_url(url.mp_singlesend_page, {
         'tofakeid': fakeid,
         't': 'message/send',
         'action': 'index',
         'token': self.tokens[appid]['token'],
         'lang': 'zh_CN'})
     try:
         resp = yield self._post_form(appid, post_url, {
             'token': self.tokens[appid]['token'],
             'lang': 'zh_CN',
             'f': 'json',
             'ajax': 1,
             'type': 1,
             'content': content,
             'tofakeid': fakeid,
             'random': random.random()
         }, referer=referer_url)
     except tornado.httpclient.HTTPError:
         raise tornado.gen.Return({'err_code': 7000})
     raise tornado.gen.Return(_parse_mp_resp(resp))
示例#4
0
 def _send_multi_message(self, appid, appmsgid, operation_seq, groupid):
     post_url = httputils.build_url(url.mp_multisend, {
         't': 'ajax-response',
         'token': self.tokens[appid]['token'],
         'lang': 'zh_CN'})
     referer = httputils.build_url(url.mp_multisend_page, {
         't': 'mass/send',
         'lang': 'zh_CN',
         'token': self.tokens[appid]['token']})
     try:
         resp = yield self._post_form(appid, post_url, {
             'token': self.tokens[appid]['token'],
             'lang': 'zh_CN',
             'f': 'json',
             'ajax': 1,
             'type': 10,
             'synctxweibo': 1,
             'cardlimit': 1,
             'sex': 0,
             'random': random.random(),
             'groupid': groupid,
             'appmsgid': appmsgid,
             'operation_seq': operation_seq,
             'country': '',
             'province': '',
             'city': '',
             'imgcode': '',
             'direct_send': 1
         }, referer=referer)
     except tornado.httpclient.HTTPError:
         raise tornado.gen.Return({'err_code': 7000})
     raise tornado.gen.Return(_parse_mp_resp(resp))
示例#5
0
 def _presend_multi_message(self, appid, appmsgid, times):
     post_url = httputils.build_url(
         url.mp_multisend, {
             'action': 'get_appmsg_copyright_stat',
             'token': self.tokens[appid]['token'],
             'lang': 'zh_CN'
         })
     referer = httputils.build_url(
         url.mp_multisend_page, {
             't': 'mass/send',
             'lang': 'zh_CN',
             'token': self.tokens[appid]['token']
         })
     try:
         resp = yield self._post_form(
             appid,
             post_url, {
                 'token': self.tokens[appid]['token'],
                 'lang': 'zh_CN',
                 'f': 'json',
                 'ajax': 1,
                 'type': 10,
                 'first_check': times,
                 'random': random.random(),
                 'appmsgid': appmsgid
             },
             referer=referer)
     except tornado.httpclient.HTTPError:
         raise tornado.gen.Return({'err_code': 7000})
     raise tornado.gen.Return(_parse_mp_resp(resp))
示例#6
0
 def _upload_image(self, appid, ticket, picurl, filename, width=0):
     img = Image.open(io.BytesIO(urllib.request.urlopen(picurl).read()))
     w, h = img.size
     nw = min(width, w) if width != 0 else w
     nh = int(float(nw * h) / w)
     tmp_file = '/tmp/' + security.nonce_str()
     fd = open(tmp_file, 'w')
     img.resize((nw, nh)).convert('RGB').save(fd, 'JPEG', quality=85)
     fd.close()
     fd = open(tmp_file, 'rb')
     post_url = httputils.build_url(
         url.mp_upload, {
             'ticket_id': 'sevengram',
             'ticket': ticket,
             'f': 'json',
             'token': self.tokens[appid]['token'],
             'lang': 'zh_CN',
             'writetype': 'doublewrite',
             'group_id': 1,
             'action': 'upload_material'
         })
     referer = httputils.build_url(
         url.mp_appmsg, {
             't': 'media/appmsg_edit',
             'action': 'edit',
             'type': '10',
             'isMul': 0,
             'isNew': 1,
             'lang': 'zh_CN',
             'token': self.tokens[appid]['token']
         })
     content_type, data = httputils.encode_multipart_formdata(
         fields={
             'Filename': filename,
             'folder': '/cgi-bin/uploads',
             'Upload': 'Submit Query'
         },
         files=(filename, fd.read()))
     fd.close()
     os.remove(tmp_file)
     try:
         resp = yield self._post_data(appid,
                                      post_url,
                                      data,
                                      content_type,
                                      referer=referer)
     except tornado.httpclient.HTTPError:
         raise tornado.gen.Return({'err_code': 7000})
     raise tornado.gen.Return(_parse_mp_resp(resp))
示例#7
0
def _wechat_api_call(method, appid, fn_url, fn_data=None, retry=0):
    token_result = yield _get_access_token(appid, refresh=(retry != 0))
    if token_result['err_code'] != 0:
        raise tornado.gen.Return(token_result)
    token = token_result['data']['access_token']
    logging.info('access_token: %s', token)
    try:
        if method == 'GET':
            resp = yield httputils.get_dict(
                url=fn_url,
                data=dict(fn_data or {}, access_token=token)
            )
        elif method == 'POST':
            resp = yield httputils.post_dict(
                url=build_url(fn_url, {
                    'access_token': token
                }),
                data=fn_data,
                data_type='json'
            )
        else:
            return
    except tornado.httpclient.HTTPError:
        raise tornado.gen.Return({'err_code': 1001})
    result = _parse_wechat_resp(resp)
    if result['err_code'] == 1004 and retry < 3:
        result = yield _wechat_api_call(appid, fn_url, fn_data, retry + 1)
        raise tornado.gen.Return(result)
    else:
        raise tornado.gen.Return(result)
示例#8
0
 def _get_latest_news(self, appid):
     referer = httputils.build_url(url.mp_home, {
         't': 'home/index',
         'token': self.tokens[appid]['token'],
         'lang': 'zh_CN'})
     try:
         resp = yield self._get(appid, url.mp_appmsg, {
             'begin': 0,
             'count': 1,
             't': 'media/appmsg_list',
             'token': self.tokens[appid]['token'],
             'type': '10',
             'action': 'list',
             'lang': 'zh_CN'}, referer=referer)
     except tornado.httpclient.HTTPError:
         raise tornado.gen.Return({'err_code': 7000})
     if resp.code != 200:
         raise tornado.gen.Return({'err_code': 7000})
     item = None
     ts = BeautifulSoup(resp.body, 'lxml').find_all('script', {'type': 'text/javascript', 'src': ''})
     for t in ts:
         try:
             te = t.text
             if te.strip(' \t\r\n').startswith('wx.cgiData'):
                 item = json.loads(te[te.index('{'):te.rindex('}') + 1])['item'][0]
                 del item['multi_item']
                 break
         except (ValueError, IndexError):
             pass
     if not item:
         logging.warning('get_latest_news failed: %s', appid)
         raise tornado.gen.Return({'err_code': 7105})
     else:
         logging.info('get_latest_news success: %s', item)
         raise tornado.gen.Return({'err_code': 0, 'data': item})
示例#9
0
 def _get_operation_seq(self, appid):
     referer = httputils.build_url(url.mp_home, {
         't': 'home/index',
         'token': self.tokens[appid]['token'],
         'lang': 'zh_CN'})
     try:
         resp = yield self._get(appid, url.mp_multisend_page, {
             't': 'mass/send',
             'lang': 'zh_CN',
             'token': self.tokens[appid]['token'],
         }, referer=referer)
     except tornado.httpclient.HTTPError:
         raise tornado.gen.Return({'err_code': 7000})
     if resp.code != 200:
         raise tornado.gen.Return({'err_code': 7000})
     seq = None
     ts = BeautifulSoup(resp.body, 'lxml').find_all('script', {'type': 'text/javascript', 'src': ''})
     for t in ts:
         try:
             te = t.text
             i = te.index('operation_seq:')
             s = te.index('\"', i) + 1
             e = te.index('\"', s)
             seq = te[s:e]
             break
         except (ValueError, IndexError):
             pass
     if not seq:
         logging.warning('get_seq failed: %s', appid)
         raise tornado.gen.Return({'err_code': 7104})
     else:
         logging.info('get_seq success: %s - %s', appid, seq)
         raise tornado.gen.Return({'err_code': 0, 'data': {'seq': seq}})
示例#10
0
def _wechat_api_call(method, appid, fn_url, fn_data=None, retry=0):
    token_result = yield _get_access_token(appid, refresh=(retry != 0))
    if token_result['err_code'] != 0:
        raise tornado.gen.Return(token_result)
    token = token_result['data']['access_token']
    logging.info('access_token: %s', token)
    try:
        if method == 'GET':
            resp = yield httputils.get_dict(url=fn_url,
                                            data=dict(fn_data or {},
                                                      access_token=token))
        elif method == 'POST':
            resp = yield httputils.post_dict(url=build_url(
                fn_url, {'access_token': token}),
                                             data=fn_data,
                                             data_type='json')
        else:
            return
    except tornado.httpclient.HTTPError:
        raise tornado.gen.Return({'err_code': 1001})
    result = _parse_wechat_resp(resp)
    if result['err_code'] == 1004 and retry < 3:
        result = yield _wechat_api_call(appid, fn_url, fn_data, retry + 1)
        raise tornado.gen.Return(result)
    else:
        raise tornado.gen.Return(result)
示例#11
0
 def _save_news(self, appid, title, content, digest, author, fileid,
                sourceurl):
     post_url = httputils.build_url(
         url.mp_save_news, {
             't': 'ajax-response',
             'sub': 'create',
             'type': '10',
             'token': self.tokens[appid]['token'],
             'lang': 'zh_CN'
         })
     referer = httputils.build_url(
         url.mp_appmsg, {
             't': 'media/appmsg_edit',
             'action': 'edit',
             'type': '10',
             'isMul': 0,
             'isNew': 1,
             'lang': 'zh_CN',
             'token': self.tokens[appid]['token']
         })
     try:
         resp = yield self._post_form(
             appid,
             post_url, {
                 'token': self.tokens[appid]['token'],
                 'lang': 'zh_CN',
                 'f': 'json',
                 'ajax': 1,
                 'type': 1,
                 'content0': content,
                 'count': 1,
                 'random': random.random(),
                 'AppMsgId': '',
                 'vid': '',
                 'title0': title,
                 'digest0': digest,
                 'author0': author,
                 'fileid0': fileid,
                 'show_cover_pic0': 1,
                 'sourceurl0': sourceurl
             },
             referer=referer)
     except tornado.httpclient.HTTPError:
         raise tornado.gen.Return({'err_code': 7000})
     raise tornado.gen.Return(_parse_mp_resp(resp))
示例#12
0
 def _get_ticket(self, appid):
     referer = httputils.build_url(
         url.mp_appmsg, {
             'begin': 0,
             'count': 10,
             't': 'media/appmsg_list',
             'token': self.tokens[appid]['token'],
             'type': '10',
             'action': 'list',
             'lang': 'zh_CN'
         })
     try:
         resp = yield self._get(appid,
                                url.mp_appmsg, {
                                    't': 'media/appmsg_edit',
                                    'action': 'edit',
                                    'type': '10',
                                    'isMul': 0,
                                    'isNew': 1,
                                    'lang': 'zh_CN',
                                    'token': self.tokens[appid]['token']
                                },
                                referer=referer)
     except tornado.httpclient.HTTPError:
         raise tornado.gen.Return({'err_code': 7000})
     if resp.code != 200:
         raise tornado.gen.Return({'err_code': 7000})
     ticket = None
     ts = BeautifulSoup(resp.body, 'lxml').find_all('script', {
         'type': 'text/javascript',
         'src': ''
     })
     for t in ts:
         try:
             te = t.text
             i = te.index('ticket:\"')
             s = te.index('\"', i) + 1
             e = te.index('\"', s)
             ticket = te[s:e]
             break
         except (ValueError, IndexError):
             pass
     if not ticket:
         logging.warning('get_ticket failed: %s', appid)
         raise tornado.gen.Return({'err_code': 7103})
     else:
         logging.info('get_ticket success: %s - %s', appid, ticket)
         raise tornado.gen.Return({
             'err_code': 0,
             'data': {
                 'ticket': ticket
             }
         })
示例#13
0
 def _send_multi_message(self, appid, appmsgid, operation_seq, groupid):
     post_url = httputils.build_url(
         url.mp_multisend, {
             't': 'ajax-response',
             'token': self.tokens[appid]['token'],
             'lang': 'zh_CN'
         })
     referer = httputils.build_url(
         url.mp_multisend_page, {
             't': 'mass/send',
             'lang': 'zh_CN',
             'token': self.tokens[appid]['token']
         })
     try:
         resp = yield self._post_form(
             appid,
             post_url, {
                 'token': self.tokens[appid]['token'],
                 'lang': 'zh_CN',
                 'f': 'json',
                 'ajax': 1,
                 'type': 10,
                 'synctxweibo': 1,
                 'cardlimit': 1,
                 'sex': 0,
                 'random': random.random(),
                 'groupid': groupid,
                 'appmsgid': appmsgid,
                 'operation_seq': operation_seq,
                 'country': '',
                 'province': '',
                 'city': '',
                 'imgcode': '',
                 'direct_send': 1
             },
             referer=referer)
     except tornado.httpclient.HTTPError:
         raise tornado.gen.Return({'err_code': 7000})
     raise tornado.gen.Return(_parse_mp_resp(resp))
示例#14
0
 def _upload_image(self, appid, ticket, picurl, filename, width=0):
     img = Image.open(io.BytesIO(urllib.request.urlopen(picurl).read()))
     w, h = img.size
     nw = min(width, w) if width != 0 else w
     nh = int(float(nw * h) / w)
     tmp_file = '/tmp/' + security.nonce_str()
     fd = open(tmp_file, 'w')
     img.resize((nw, nh)).convert('RGB').save(fd, 'JPEG', quality=85)
     fd.close()
     fd = open(tmp_file, 'rb')
     post_url = httputils.build_url(url.mp_upload, {
         'ticket_id': 'sevengram',
         'ticket': ticket,
         'f': 'json',
         'token': self.tokens[appid]['token'],
         'lang': 'zh_CN',
         'writetype': 'doublewrite',
         'group_id': 1,
         'action': 'upload_material'})
     referer = httputils.build_url(url.mp_appmsg, {
         't': 'media/appmsg_edit',
         'action': 'edit',
         'type': '10',
         'isMul': 0,
         'isNew': 1,
         'lang': 'zh_CN',
         'token': self.tokens[appid]['token']})
     content_type, data = httputils.encode_multipart_formdata(
         fields={'Filename': filename,
                 'folder': '/cgi-bin/uploads',
                 'Upload': 'Submit Query'},
         files=(filename, fd.read()))
     fd.close()
     os.remove(tmp_file)
     try:
         resp = yield self._post_data(appid, post_url, data, content_type, referer=referer)
     except tornado.httpclient.HTTPError:
         raise tornado.gen.Return({'err_code': 7000})
     raise tornado.gen.Return(_parse_mp_resp(resp))
示例#15
0
 def _presend_multi_message(self, appid, appmsgid, times):
     post_url = httputils.build_url(url.mp_multisend, {
         'action': 'get_appmsg_copyright_stat',
         'token': self.tokens[appid]['token'],
         'lang': 'zh_CN'})
     referer = httputils.build_url(url.mp_multisend_page, {
         't': 'mass/send',
         'lang': 'zh_CN',
         'token': self.tokens[appid]['token']})
     try:
         resp = yield self._post_form(appid, post_url, {
             'token': self.tokens[appid]['token'],
             'lang': 'zh_CN',
             'f': 'json',
             'ajax': 1,
             'type': 10,
             'first_check': times,
             'random': random.random(),
             'appmsgid': appmsgid
         }, referer=referer)
     except tornado.httpclient.HTTPError:
         raise tornado.gen.Return({'err_code': 7000})
     raise tornado.gen.Return(_parse_mp_resp(resp))
示例#16
0
 def _save_news(self, appid, title, content, digest, author, fileid, sourceurl):
     post_url = httputils.build_url(url.mp_save_news, {
         't': 'ajax-response',
         'sub': 'create',
         'type': '10',
         'token': self.tokens[appid]['token'],
         'lang': 'zh_CN'})
     referer = httputils.build_url(url.mp_appmsg, {
         't': 'media/appmsg_edit',
         'action': 'edit',
         'type': '10',
         'isMul': 0,
         'isNew': 1,
         'lang': 'zh_CN',
         'token': self.tokens[appid]['token']})
     try:
         resp = yield self._post_form(appid, post_url, {
             'token': self.tokens[appid]['token'],
             'lang': 'zh_CN',
             'f': 'json',
             'ajax': 1,
             'type': 1,
             'content0': content,
             'count': 1,
             'random': random.random(),
             'AppMsgId': '',
             'vid': '',
             'title0': title,
             'digest0': digest,
             'author0': author,
             'fileid0': fileid,
             'show_cover_pic0': 1,
             'sourceurl0': sourceurl
         }, referer=referer)
     except tornado.httpclient.HTTPError:
         raise tornado.gen.Return({'err_code': 7000})
     raise tornado.gen.Return(_parse_mp_resp(resp))
示例#17
0
 def _get_contact_info(self, appid, fakeid, msg_id):
     post_url = httputils.build_url(url.mp_contact_info, {
         't': 'ajax-getcontactinfo',
         'fakeid': fakeid,
         'msg_id': msg_id,
         'lang': 'zh_CN'})
     referer_url = httputils.build_url(url.mp_message, {
         't': 'message/list',
         'count': 30,
         'offset': 0,
         'day': 7,
         'token': self.tokens[appid]['token']
     })
     try:
         resp = yield self._post_form(appid, post_url, {
             'token': self.tokens[appid]['token'],
             'lang': 'zh_CN',
             'f': 'json',
             'ajax': 1,
             'random': random.random()
         }, referer=referer_url)
     except tornado.httpclient.HTTPError:
         raise tornado.gen.Return({'err_code': 7000})
     raise tornado.gen.Return(_parse_mp_resp(resp))
示例#18
0
 def _find_user(self, appid, timestamp, mtype, content, count=50, offset=0):
     referer_url = httputils.build_url(
         url.mp_home, {
             't': 'home/index',
             'token': self.tokens[appid]['token'],
             'lang': 'zh_CN'
         })
     try:
         resp = yield self._get(appid,
                                url.mp_message, {
                                    't': 'message/list',
                                    'count': count,
                                    'day': 7,
                                    'token': self.tokens[appid]['token']
                                },
                                referer=referer_url)
     except tornado.httpclient.HTTPError:
         raise tornado.gen.Return({'err_code': 7000})
     if resp.code != 200:
         raise tornado.gen.Return({'err_code': 7000})
     users = None
     ts = BeautifulSoup(resp.body, 'lxml').find_all('script', {
         'type': 'text/javascript',
         'src': ''
     })
     for t in ts:
         try:
             te = t.text
             if te.strip(' \t\r\n').startswith('wx.cgiData'):
                 s = te.index('[', te.index('msg_item'))
                 e = te.rindex(']', s, te.rindex('msg_item')) + 1
                 users = json.loads(te[s:e])
                 break
         except (ValueError, IndexError):
             pass
     if not users:
         logging.warning('fail to catch user list: %s', appid)
         raise tornado.gen.Return({'err_code': 7101})
     for user in users:
         if user['date_time'] < timestamp:
             logging.warning('fail to find user: %s', appid)
             raise tornado.gen.Return({'err_code': 7101})
         elif check_same(timestamp, content, mtype, user):
             logging.warning('user found: %s', user)
             raise tornado.gen.Return({'err_code': 0, 'data': user})
     res = yield self._find_user(appid, timestamp, mtype, content, count,
                                 count + offset)
     raise tornado.gen.Return(res)
示例#19
0
 def _get_latest_news(self, appid):
     referer = httputils.build_url(
         url.mp_home, {
             't': 'home/index',
             'token': self.tokens[appid]['token'],
             'lang': 'zh_CN'
         })
     try:
         resp = yield self._get(appid,
                                url.mp_appmsg, {
                                    'begin': 0,
                                    'count': 1,
                                    't': 'media/appmsg_list',
                                    'token': self.tokens[appid]['token'],
                                    'type': '10',
                                    'action': 'list',
                                    'lang': 'zh_CN'
                                },
                                referer=referer)
     except tornado.httpclient.HTTPError:
         raise tornado.gen.Return({'err_code': 7000})
     if resp.code != 200:
         raise tornado.gen.Return({'err_code': 7000})
     item = None
     ts = BeautifulSoup(resp.body, 'lxml').find_all('script', {
         'type': 'text/javascript',
         'src': ''
     })
     for t in ts:
         try:
             te = t.text
             if te.strip(' \t\r\n').startswith('wx.cgiData'):
                 item = json.loads(te[te.index('{'):te.rindex('}') +
                                      1])['item'][0]
                 del item['multi_item']
                 break
         except (ValueError, IndexError):
             pass
     if not item:
         logging.warning('get_latest_news failed: %s', appid)
         raise tornado.gen.Return({'err_code': 7105})
     else:
         logging.info('get_latest_news success: %s', item)
         raise tornado.gen.Return({'err_code': 0, 'data': item})
示例#20
0
def process_weather1(request):
    img_url = build_url(consts.seventimer_url, {
        'lon': request['longitude'],
        'lat': request['latitude'],
        'lang': 'zh-CN',
        'time': int(time.time())
    })
    resp = {
        'msg_type': 'news',
        'tag': 'weather',
        'articles': [
            {
                'title': request.get('label', ''),
                'description': '数据来自晴天钟(7timer.com)',
                'picurl': img_url,
                'url': img_url
            }
        ]
    }
    raise tornado.gen.Return(resp)
示例#21
0
 def _get_ticket(self, appid):
     referer = httputils.build_url(url.mp_appmsg, {
         'begin': 0,
         'count': 10,
         't': 'media/appmsg_list',
         'token': self.tokens[appid]['token'],
         'type': '10',
         'action': 'list',
         'lang': 'zh_CN'})
     try:
         resp = yield self._get(appid, url.mp_appmsg, {
             't': 'media/appmsg_edit',
             'action': 'edit',
             'type': '10',
             'isMul': 0,
             'isNew': 1,
             'lang': 'zh_CN',
             'token': self.tokens[appid]['token']
         }, referer=referer)
     except tornado.httpclient.HTTPError:
         raise tornado.gen.Return({'err_code': 7000})
     if resp.code != 200:
         raise tornado.gen.Return({'err_code': 7000})
     ticket = None
     ts = BeautifulSoup(resp.body, 'lxml').find_all('script', {'type': 'text/javascript', 'src': ''})
     for t in ts:
         try:
             te = t.text
             i = te.index('ticket:\"')
             s = te.index('\"', i) + 1
             e = te.index('\"', s)
             ticket = te[s:e]
             break
         except (ValueError, IndexError):
             pass
     if not ticket:
         logging.warning('get_ticket failed: %s', appid)
         raise tornado.gen.Return({'err_code': 7103})
     else:
         logging.info('get_ticket success: %s - %s', appid, ticket)
         raise tornado.gen.Return({'err_code': 0, 'data': {'ticket': ticket}})
示例#22
0
def process_weather1(request):
    img_url = build_url(
        consts.seventimer_url, {
            'lon': request['longitude'],
            'lat': request['latitude'],
            'lang': 'zh-CN',
            'time': int(time.time())
        })
    resp = {
        'msg_type':
        'news',
        'tag':
        'weather',
        'articles': [{
            'title': request.get('label', ''),
            'description': '数据来自晴天钟(7timer.com)',
            'picurl': img_url,
            'url': img_url
        }]
    }
    raise tornado.gen.Return(resp)
示例#23
0
 def _find_user(self, appid, timestamp, mtype, content, count=50, offset=0):
     referer_url = httputils.build_url(url.mp_home, {
         't': 'home/index',
         'token': self.tokens[appid]['token'],
         'lang': 'zh_CN'})
     try:
         resp = yield self._get(appid, url.mp_message, {
             't': 'message/list',
             'count': count,
             'day': 7,
             'token': self.tokens[appid]['token']
         }, referer=referer_url)
     except tornado.httpclient.HTTPError:
         raise tornado.gen.Return({'err_code': 7000})
     if resp.code != 200:
         raise tornado.gen.Return({'err_code': 7000})
     users = None
     ts = BeautifulSoup(resp.body, 'lxml').find_all('script', {'type': 'text/javascript', 'src': ''})
     for t in ts:
         try:
             te = t.text
             if te.strip(' \t\r\n').startswith('wx.cgiData'):
                 s = te.index('[', te.index('msg_item'))
                 e = te.rindex(']', s, te.rindex('msg_item')) + 1
                 users = json.loads(te[s:e])
                 break
         except (ValueError, IndexError):
             pass
     if not users:
         logging.warning('fail to catch user list: %s', appid)
         raise tornado.gen.Return({'err_code': 7101})
     for user in users:
         if user['date_time'] < timestamp:
             logging.warning('fail to find user: %s', appid)
             raise tornado.gen.Return({'err_code': 7101})
         elif check_same(timestamp, content, mtype, user):
             logging.warning('user found: %s', user)
             raise tornado.gen.Return({'err_code': 0, 'data': user})
     res = yield self._find_user(appid, timestamp, mtype, content, count, count + offset)
     raise tornado.gen.Return(res)
示例#24
0
 def _get_operation_seq(self, appid):
     referer = httputils.build_url(
         url.mp_home, {
             't': 'home/index',
             'token': self.tokens[appid]['token'],
             'lang': 'zh_CN'
         })
     try:
         resp = yield self._get(appid,
                                url.mp_multisend_page, {
                                    't': 'mass/send',
                                    'lang': 'zh_CN',
                                    'token': self.tokens[appid]['token'],
                                },
                                referer=referer)
     except tornado.httpclient.HTTPError:
         raise tornado.gen.Return({'err_code': 7000})
     if resp.code != 200:
         raise tornado.gen.Return({'err_code': 7000})
     seq = None
     ts = BeautifulSoup(resp.body, 'lxml').find_all('script', {
         'type': 'text/javascript',
         'src': ''
     })
     for t in ts:
         try:
             te = t.text
             i = te.index('operation_seq:')
             s = te.index('\"', i) + 1
             e = te.index('\"', s)
             seq = te[s:e]
             break
         except (ValueError, IndexError):
             pass
     if not seq:
         logging.warning('get_seq failed: %s', appid)
         raise tornado.gen.Return({'err_code': 7104})
     else:
         logging.info('get_seq success: %s - %s', appid, seq)
         raise tornado.gen.Return({'err_code': 0, 'data': {'seq': seq}})
示例#25
0
def process_weather2(request):
    query = request.get('content', '')
    if len(query) < 2:
        raise tornado.gen.Return(None)
    resp = None
    is_location = request.get('is_location') == 1
    location = astro_storage.get_location(query)
    if not location and not is_location:
        for word in consts.loc_keys:
            if word in query:
                is_location = True
                break
    if not location and is_location:
        location = yield get_location(query)
        if location:
            astro_storage.add_location(location)
    if location:
        img_url = build_url(
            consts.seventimer_url, {
                'lon': location['longitude'],
                'lat': location['latitude'],
                'lang': 'zh-CN',
                'time': int(time.time())
            })
        resp = {
            'msg_type':
            'news',
            'tag':
            'weather',
            'articles': [{
                'title': location.get('address', ''),
                'description': '数据来自晴天钟(7timer.com)',
                'picurl': img_url,
                'url': img_url
            }]
        }
    raise tornado.gen.Return(resp)
示例#26
0
def process_weather2(request):
    query = request.get('content', '')
    if len(query) < 2:
        raise tornado.gen.Return(None)
    resp = None
    is_location = request.get('is_location') == 1
    location = astro_storage.get_location(query)
    if not location and not is_location:
        for word in consts.loc_keys:
            if word in query:
                is_location = True
                break
    if not location and is_location:
        location = yield get_location(query)
        if location:
            astro_storage.add_location(location)
    if location:
        img_url = build_url(consts.seventimer_url, {
            'lon': location['longitude'],
            'lat': location['latitude'],
            'lang': 'zh-CN',
            'time': int(time.time())
        })
        resp = {
            'msg_type': 'news',
            'tag': 'weather',
            'articles': [
                {
                    'title': location.get('address', ''),
                    'description': '数据来自晴天钟(7timer.com)',
                    'picurl': img_url,
                    'url': img_url
                }
            ]
        }
    raise tornado.gen.Return(resp)