def getFeedInfo ( type, feedPars, nocache = False ):
    status = 0
    msg = ''
    content = None 

    #首先从cache获取内容
#    cache_key = getFeedInfoCacheKey( feedPars )
#    if not nocache :
#        content = getFeedInfo_FromCache( cache_key )

#    if content != None:
#        try:
#            return (0, '', json.loads( content, strict=False ))
#        except:
#            logger.error( 'getFeedInfo, json load faild, key=%s, feedPars=%s, err=%s', cache_key, str(feedPars), str(sys.exc_info()) )

    logger.debug( 'getFeedInfo from third interface, feedPars=%s', str(feedPars) )

    # cache没有发现,则调用内容获取接口
    if type == 'news':
        # 新闻不用做ID转换
        content = news_interface.getNewsContent( feedPars['id'] )
        if content == None or len(content) <=0 :
            (status,msg,content) =  ( -1, 'get new content faild', None )
    elif type == 'video' :
        # 视频不用做ID转换
        (status,msg,content) = video_interface.video_interface( feedPars )
#    elif type == 'music' :
        #(status,msg,content) = music_interface.Music_interface.Get_music_detail( srcContId )
#        pass
    elif type == 'story' :
        if str(feedPars['info_type']) != '2':
            # 需要取得源ID
            srcid = getMiniFeedDataSrcId( feedPars['id'] )
        else:
            srcid = feedPars['id']
        
        if srcid == None or srcid == '' :
            (status,msg,content) =  ( -1, 'id is invalid', None )
        else:
            feedPars['id'] = srcid
            novel_reader_obj = novel_reader.NovelReader()
            (status,msg,content) = novel_reader_obj.fetch_novel_info( feedPars )
    else:
        (status,msg,content) = ( -1,'input type invalid', None)
        
    if status == 0:
        pass
#        updateFeedInfo_ToCache( cache_key, json.dumps(content) )
    else:
        logger.error( 'getFeedInfo from third interface faild, msg=%s' % msg )

    return (status, msg, content)
def getFeedContent ( contId, nocache = False ):
    #首先从cache获取内容
    content = None
    if not nocache :
        content = getFeedContent_FromCache( contId )

    if content != None:
        try:
            return json.loads( content, strict=False )
        except:
            logger.error( 'getFeedContent, json load faild, id=%s, err=%s', contId, str(sys.exc_info()) )

    logger.debug( 'getFeedContent from third interface, id=%s', contId )

    # cache没有发现,则调用内容获取接口
    if isinstance( contId, unicode ):
        contId = contId.encode( 'utf8' )
    
    p = contId.find( '_' )
    if p < 0 :
        logger.error( "getFeedContent, id is invalid, id=%s", contId )
        return {}

    cat = contId[0:p]
    srcContId = contId[p+1:]

    status = 0
    msg = ''
    content = {}

    if cat == 'news':
        content = news_interface.getNewsContent( srcContId )
    elif cat == 'video' :
        (status,msg,content) = video_interface.video_interface( {'id':srcContId, 'info_type':2} )
    elif cat == 'music' :
        content = music_interface.Music_interface.Get_music_detail( srcContId )
    elif cat == 'story' :
        novel_reader_obj = novel_reader.NovelReader()
        (status,msg,content) = novel_reader_obj.fetch_novel_info( {'id':srcContId, 'info_type':1} )
        
    if content == None or len(content) == 0 :
        logger.error( "getFeedContent faild, id=%s", contId )
        return {}

    updateFeedContent_ToCache( contId, json.dumps(content) )
    return content