V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
airyland
V2EX  ›  分享创造

we-extract - 抽取微信公众号文章的账号及内容元信息

  •  1
     
  •   airyland ·
    airyland · 2018-07-25 17:12:06 +08:00 · 2419 次点击
    这是一个创建于 2316 天前的主题,其中的信息可能已经有所发展或是发生改变。

    介绍

    we-extract 用以解析微信公众号文章的账号及文章信息,居家旅行、采集分析微信公众号文章必备工具。涉及到不同类型:图文,转载,音频,视频,实际上有不少细节需要处理,针对因为被屏蔽、删除、公众号迁移导致无法查看的原因也做了区分。

    we-extract 也是 WeRss 的核心工具,上个关于 WeRss 的帖子可能有抽奖二字被移到推广了,因此这里只放链接,有微信公众号 RSS 需求的可以去看看,帖子链接

    安装

    npm install we-extract
    
    // or
    
    yarn add we-extract
    

    使用

    Node 版本需要支持 async

    const extract = require('we-extract').extract
    
    const rs = await extract('微信文章 url 或者 文章内容')
    
    // 选项
    const rs = await extract('微信文章 url 或者 文章内容', {
      shouldReturnRawMeta: false, // 是否返回原始的 js 解析结果,一般只用于调试,默认不返回
      shouldReturnContent: true // 是否返回内容,默认返回
    })
    

    返回结果说明

    正确返回

    {
      done: true,
      code: 0,
      data: {
        account_name: '微信派',
        account_alias: 'wx-pai',
        account_avatar: 'http://wx.qlogo.cn/mmhead/Q3auHgzwzM7Xb5Qbdia5AuGTX4AeZSWYlv5TEqD1FicUDOrnEIwVak1A/132',
        account_description: '微信第一手官方活动信息发布,线下沙龙活动在线互动平台。独家分享微信公众平台优秀案例,以及权威专家的精彩观点。',
        account_id: 'gh_bc5ec2ee663f',
        account_biz: 'MjM5NjM4MDAxMg==',
        account_biz_number: 2396380012,
        account_qr_code: 'https://open.weixin.qq.com/qr/code?username=gh_bc5ec2ee663f',
        msg_has_copyright: false, // 是否原创
        msg_content: '省略的文章内容',
        msg_author: null, // 作者
        msg_sn: '9a0a54f2e7c8ac4019812aa78bd4b3e0',
        msg_idx: 1,
        msg_mid: 2655078412,
        msg_title: '重磅 | 微信订阅号全新改版上线!',
        msg_desc: '今后,头图也很重要',
        msg_link: 'http://mp.weixin.qq.com/s?__biz=MjM5NjM4MDAxMg==&mid=2655078412&idx=1&sn=9a0a54f2e7c8ac4019812aa78bd4b3e0&chksm=bd5fc40f8a284d19360e956074ffced37d8e2d78cb01a4ecdfaae40247823e7056b9d31ae3ef#rd',
        msg_source_url: null, // 音频,视频时,此处为音频、视频链接
        msg_cover: 'http://mmbiz.qpic.cn/mmbiz_jpg/OiaFLUqewuIDldpxsV3ZYJzzyH9HTFsSwOEPX82WEvBZozGiam3LbRSzpIIKGzj72nxjhLjnscWsibDPFmnpFZykg/0?wx_fmt=jpeg',
        msg_article_type: null, // 文章分类
        msg_publish_time: '2018-06-20T10:52:35.000Z', // date 类型
        msg_publish_time_str: '2018/06/20 18:52:35',
        msg_type: 'post' // 可能为 post repost voice video image
      }
    }
    

    错误返回

    {
      done: false,
      code: 2002,
      msg: '链接已过期'
    }
    

    常见错误

    we-extract 定义了详细的错误信息方便开发和出错处理,1 开头错误表示可能需要重试(或者暂时将内容保存下来 debug),2 表示没有疑问的错误,可以不处理。

    '1000': '解析失败,可能文章内容不完整',
    '1001': '字段缺失',
    '1002': '请求文章内容失败',
    '1003': '请求文章内容为空',
    '1004': '访问过于频繁',
    '1005': 'js 变量解析出错',
    
    '2001': '参数缺失',
    '2002': '链接已过期',
    '2003': '该内容被投诉且经审核涉嫌侵权,无法查看',
    '2004': '公众号迁移但文章未同步',
    '2005': '该内容已被发布者删除',
    '2006': '此内容因违规无法查看',
    '2007': '涉嫌违反相关法律法规和政策发送失败',
    '2008': '微信文章系统出错',
    '2009': '链接不正确'
    

    经验

    • 一个微信由 biz+mid+idx 组成,mid 在单个公众号内唯一。
    • 文章所属账号信息以文章解析结果为准,采集搜狗时不要相信账号名字,因为搜狗显示的可能是改名或者迁移前的账号信息。
    • 如果在搜狗微信搜不到账号,极有可能是因为公众号改了名字,试试以前的名字应该能搜索到。
    • 微信链接的 search 拼接符可能为 & 需要做一个替换处理,否则解析链接参数时会有问题。
    • 一个 ip 获取微信文章内容有限制,需要限制速率或者轮换 ip。

    更多的经验采坑会持续更新到 Github 项目页面。

    链接

    https://github.com/airyland/we-extract

    7 条回复    2018-07-25 21:07:59 +08:00
    xingstar
        1
    xingstar  
       2018-07-25 19:41:04 +08:00 via Android
    mark 一下😂😂
    terence4444
        2
    terence4444  
       2018-07-25 19:46:40 +08:00 via iPhone
    这类功能很容易就变成偷别人原创文章的工具,正因为国内偷盗成风所以我写文章时一直很小心。

    不过这个也可以用来在删文之前保存文章,就看你想怎么用了。
    airyland
        3
    airyland  
    OP
       2018-07-25 19:56:00 +08:00
    @terence4444 这个有点想多了。。真要偷直接复制粘贴就行了,微信公众号出来这么久,大家内部都有这么个类似的函数,其实读一下 js_content 内容就行了,多少第三方公众号辅助工具还支持直接在编辑器一键导入。
    terence4444
        4
    terence4444  
       2018-07-25 20:18:05 +08:00 via iPhone
    @airyland 自动抓取比复制粘贴要快得多了。
    also24
        5
    also24  
       2018-07-25 20:34:56 +08:00
    唔,审题不仔细,理解成抓取文章的工具了。

    仔细看了一下,实际上是自备文章页链接,传入工具中解析元信息用的。
    terence4444
        6
    terence4444  
       2018-07-25 20:55:23 +08:00 via iPhone
    @also24 都已经要调用搜索接口,还要换 IP,这么明显了还要怎么误解?
    also24
        7
    also24  
       2018-07-25 21:07:59 +08:00 via Android
    @terence4444 额,我是说我自己一开始误解了…
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3532 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 04:56 · PVG 12:56 · LAX 20:56 · JFK 23:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.