示例#1
0
def proc_event(req):
    event = req['Event']
    if event == 'subscribe':
        log.info('proc_event|%s|subscribe' , req['FromUserName'])
        resp = {}
        resp['ToUserName'] = req['FromUserName']
        resp['FromUserName'] = req['ToUserName']
        resp['CreateTime'] = int(time.time())
        resp['MsgType'] = 'text'
        resp['Content'] = '欢迎使用\n'+HELP
        return Dict2XMLTagText().toxml(resp)
    elif event == 'unsubscribe':
        log.info('proc_event|%s|unsubscribe' , req['FromUserName'])
    else:
        log.warning('proc_event|nuknown event %s|%s' , event ,req['FromUserName'])
    return   event  
示例#2
0
 def _init_session(self):
     url = "http://www.simsimi.com/talk.htm?lc=ch"
     self.session = requests.Session()
     self.session.headers.update(Headers)
     #get cooket
     r = self.session.get(url ) #, timeout = 3)
     keys =  r.cookies.keys()
     if 'AWSELB' in keys and 'JSESSIONID' in keys:
         self.session.cookies.update( r.cookies )
         self.session.cookies['sagree'] = 'true'
         self.session.cookies['selected_nc'] = 'ch'
         log.info('SimSimi _init_session succ...')
     else:
         log.warning('SimSimi _init_session fail... try again')
         time.sleep(0.1)
         self.session = None
         self._init_session()
示例#3
0
 def chat(self, msg = ''):
     #only for utf-8
     msg = msg.strip()
     if msg:
         #最多循环5次
         for i in range(5):
             rsp = self._get_resp(msg)
             if rsp:
                 return rsp
             log.warning('SimSimi.chat _get_resp failed')
         #重新初始化
         log.warning('SimSimi.chat re init session...')
         self._init_session()
         rsp = self._get_resp(msg)
         if rsp:
             return rsp
         else:
             log.error('SimSimi.chat _get_resp failed return default')
             return  hehe
     else:
         return 'empty msg...'
示例#4
0
 def _get_resp(self , msg):
     try:
         r = self.session.get( self.chat_url % msg  )#, timeout=3.0)
         if not r.text.lstrip().startswith('{'):
             log.error('SimSimi._get_resp resp[%s] is not json ' , r.text)
             return None
         resp = r.json()
         if resp.has_key('id'):
             rsp_msg = resp['response'].encode('utf-8')
             #SimSimi is tired, I only can speak 200 time a day. Please visit again tomorrow. See ya~ 
             if rsp_msg.startswith('SimSimi'):
                 self._init_session()
                 return None
             elif self._check_msg(rsp_msg) == False:
                 log.warning('SimSimi._get_resp invalid msg = %s' , rsp_msg)
                 return hehe
             else:
                 return rsp_msg
         else:
             return hehe
     except Exception , e:
         log.error('SimSimi._get_resp exception ' , exc_info=True)
示例#5
0
def stmts_for_param(type, varname, stack=[]):
    """
    Yields input variables for type t's fields, down to primitives
    """

    type = type.get_canonical()

    decls = []
    inits = []
    shift_argv = 'shift_argi()'

    log.debug(f'variable {varname} type {type.spelling} (kind {type.kind})')

    if not (type.kind == TypeKind.FUNCTIONPROTO or
            (type.kind == TypeKind.POINTER
             and type.get_pointee().kind == TypeKind.FUNCTIONPROTO)):
        decls.append(f'{type.spelling} {varname.replace(".", "_")};')

    if type.kind == TypeKind.ELABORATED or type.kind == TypeKind.RECORD:
        td = type.get_declaration()
        children = list(td.get_children())
        inits.append(f'// assign fields for {varname}')
        if any(children):
            for child in children:
                child_varname = f'{varname}.{child.spelling}'
                if child.kind == CursorKind.UNION_DECL:
                    pass
                elif child.type.get_declaration(
                ).kind == CursorKind.UNION_DECL:
                    inits.append(
                        f'// TODO union {child_varname} = <{", ".join(c.spelling for c in child.type.get_declaration().get_children())}>;'
                    )
                elif child.type.kind == TypeKind.POINTER:
                    if child.type.spelling in (
                            s.spelling for s in stack
                    ) or child.type.get_pointee() == type:
                        inits.append(
                            f'// TODO recursive {child_varname} = <{type.spelling}>;'
                        )
                    else:
                        if child.type.get_pointee().kind == TypeKind.CHAR_S:
                            inits.append(f'{child_varname} = {shift_argv};')
                        elif child.type.spelling in (s.spelling
                                                     for s in stack):
                            pass
                        else:
                            valname = f'{child.spelling.replace(".", "_")}_v'
                            yield from stmts_for_param(
                                child.type.get_pointee(),
                                valname,
                                stack=stack + [child.type])
                            inits.append(f'{child_varname} = &{valname};')
                else:
                    child_inits = zip(*stmts_for_param(child.type,
                                                       f'{child_varname}',
                                                       stack=stack +
                                                       [child.type]))
                    yield from (([], c) for l in child_inits for c in l)
        else:
            log.warning(
                f'no fields found for type {type.spelling} (kind {type.kind})')
    elif type.kind == TypeKind.POINTER:
        if type.get_pointee().kind == TypeKind.CHAR_S:
            inits.append(f'{varname} = {shift_argv};')
        elif type.get_pointee().kind == TypeKind.FUNCTIONPROTO:
            inits.append(f'// TODO functionptr {varname} = <{type.spelling}>;')
        else:
            valname = f'{varname}_v'
            yield from stmts_for_param(type.get_pointee(),
                                       valname,
                                       stack=stack + [type])
            if type.get_pointee().kind != TypeKind.FUNCTIONPROTO:
                inits.append(f'{varname} = &{valname};')
    elif type.kind == TypeKind.INT or \
        type.kind == TypeKind.SHORT or \
        type.kind == TypeKind.LONG or \
        type.kind == TypeKind.LONGLONG or \
        type.kind == TypeKind.INT128 or \
        type.kind == TypeKind.ENUM:
        inits.append(f'{varname} = atoi({shift_argv});')
    elif type.kind == TypeKind.UINT or \
        type.kind == TypeKind.ULONG or \
        type.kind == TypeKind.ULONGLONG or \
        type.kind == TypeKind.UINT128:
        inits.append(f'{varname} = strtoul({shift_argv}, NULL, 10);')
    elif type.kind == TypeKind.DOUBLE or type.kind == TypeKind.LONGDOUBLE:
        inits.append(f'{varname} = strtod({shift_argv}, NULL);')
    elif type.kind == TypeKind.FLOAT:
        inits.append(f'{varname} = atof({shift_argv});')
    elif type.kind == TypeKind.CHAR_S:
        inits.append(f'{varname} = {shift_argv}[0];')
    elif type.kind == TypeKind.FUNCTIONPROTO:
        pass
    else:
        inits.append(f'// TODO unhandled {varname} = <{type.spelling}>;')

    yield decls, inits