def get_article_by_history_json(text, article_json=None):
        """从 历史消息页的文本 提取文章列表信息

        Parameters
        ----------
        text : str or unicode
            历史消息页的文本
        article_json : dict
            历史消息页的文本 提取出来的文章json dict

        Returns
        -------
        list[dict]
            {
                'send_id': '',  # 群发id，注意不唯一，因为同一次群发多个消息，而群发id一致
                'datetime': '',  # 群发datatime
                'type': '',  # 消息类型，均是49，表示图文
                'main': 0,  # 是否是一次群发的第一次消息
                'title': '',  # 文章标题
                'abstract': '',  # 摘要
                'fileid': '',  #
                'content_url': '',  # 文章链接
                'source_url': '',  # 阅读原文的链接
                'cover': '',  # 封面图
                'author': '',  # 作者
                'copyright_stat': '',  # 文章类型，例如：原创啊
            }

        """
        if article_json is None:
            article_json = find_article_json_re.findall(text)
            if not article_json:
                return []
            article_json = article_json[0] + '}}]}'
            article_json = json.loads(article_json)

        items = list()

        for listdic in article_json['list']:
            if str(listdic['comm_msg_info'].get('type', '')) != '49':
                continue

            comm_msg_info = listdic['comm_msg_info']
            app_msg_ext_info = listdic['app_msg_ext_info']
            send_id = comm_msg_info.get('id', '')
            msg_datetime = comm_msg_info.get('datetime', '')
            msg_type = str(comm_msg_info.get('type', ''))

            items.append({
                'send_id': send_id,
                'datetime': msg_datetime,
                'type': msg_type,
                'main': 1, 'title': app_msg_ext_info.get('title', ''),
                'abstract': app_msg_ext_info.get('digest', ''),
                'fileid': app_msg_ext_info.get('fileid', ''),
                'content_url': WechatSogouStructuring.__handle_content_url(app_msg_ext_info.get('content_url')),
                'source_url': app_msg_ext_info.get('source_url', ''),
                'cover': app_msg_ext_info.get('cover', ''),
                'author': app_msg_ext_info.get('author', ''),
                'copyright_stat': app_msg_ext_info.get('copyright_stat', '')
            })

            if app_msg_ext_info.get('is_multi', 0) == 1:
                for multi_dict in app_msg_ext_info['multi_app_msg_item_list']:
                    items.append({
                        'send_id': send_id,
                        'datetime': msg_datetime,
                        'type': msg_type,
                        'main': 0, 'title': multi_dict.get('title', ''),
                        'abstract': multi_dict.get('digest', ''),
                        'fileid': multi_dict.get('fileid', ''),
                        'content_url': WechatSogouStructuring.__handle_content_url(multi_dict.get('content_url')),
                        'source_url': multi_dict.get('source_url', ''),
                        'cover': multi_dict.get('cover', ''),
                        'author': multi_dict.get('author', ''),
                        'copyright_stat': multi_dict.get('copyright_stat', '')
                    })

        return list(filter(lambda x: x['content_url'], items))
def get_article_by_history_json ( text , article_json = None ) : if article_json is None : article_json = find_article_json_re . findall ( text ) if not article_json : return [ ] article_json = article_json [ 0 ] + '}}]}' article_json = json . loads ( article_json ) items = list ( ) for listdic in article_json [ 'list' ] : if str ( listdic [ 'comm_msg_info' ] . get ( 'type' , '' ) ) != '49' : continue comm_msg_info = listdic [ 'comm_msg_info' ] app_msg_ext_info = listdic [ 'app_msg_ext_info' ] send_id = comm_msg_info . get ( 'id' , '' ) msg_datetime = comm_msg_info . get ( 'datetime' , '' ) msg_type = str ( comm_msg_info . get ( 'type' , '' ) ) items . append ( { 'send_id' : send_id , 'datetime' : msg_datetime , 'type' : msg_type , 'main' : 1 , 'title' : app_msg_ext_info . get ( 'title' , '' ) , 'abstract' : app_msg_ext_info . get ( 'digest' , '' ) , 'fileid' : app_msg_ext_info . get ( 'fileid' , '' ) , 'content_url' : WechatSogouStructuring . __handle_content_url ( app_msg_ext_info . get ( 'content_url' ) ) , 'source_url' : app_msg_ext_info . get ( 'source_url' , '' ) , 'cover' : app_msg_ext_info . get ( 'cover' , '' ) , 'author' : app_msg_ext_info . get ( 'author' , '' ) , 'copyright_stat' : app_msg_ext_info . get ( 'copyright_stat' , '' ) } ) if app_msg_ext_info . get ( 'is_multi' , 0 ) == 1 : for multi_dict in app_msg_ext_info [ 'multi_app_msg_item_list' ] : items . append ( { 'send_id' : send_id , 'datetime' : msg_datetime , 'type' : msg_type , 'main' : 0 , 'title' : multi_dict . get ( 'title' , '' ) , 'abstract' : multi_dict . get ( 'digest' , '' ) , 'fileid' : multi_dict . get ( 'fileid' , '' ) , 'content_url' : WechatSogouStructuring . __handle_content_url ( multi_dict . get ( 'content_url' ) ) , 'source_url' : multi_dict . get ( 'source_url' , '' ) , 'cover' : multi_dict . get ( 'cover' , '' ) , 'author' : multi_dict . get ( 'author' , '' ) , 'copyright_stat' : multi_dict . get ( 'copyright_stat' , '' ) } ) return list ( filter ( lambda x : x [ 'content_url' ] , items ) )
从 历史消息页的文本 提取文章列表信息

        Parameters
        ----------
        text : str or unicode
            历史消息页的文本
        article_json : dict
            历史消息页的文本 提取出来的文章json dict

        Returns
        -------
        list[dict]
            {
                'send_id': '',  # 群发id，注意不唯一，因为同一次群发多个消息，而群发id一致
                'datetime': '',  # 群发datatime
                'type': '',  # 消息类型，均是49，表示图文
                'main': 0,  # 是否是一次群发的第一次消息
                'title': '',  # 文章标题
                'abstract': '',  # 摘要
                'fileid': '',  #
                'content_url': '',  # 文章链接
                'source_url': '',  # 阅读原文的链接
                'cover': '',  # 封面图
                'author': '',  # 作者
                'copyright_stat': '',  # 文章类型，例如：原创啊
            }