基于Liuli构建纯净的RSS公众号信息流

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: 基于Liuli构建纯净的RSS公众号信息流

首先介绍下,Liuli是什么?这是我最近开发的一个开源项目,主要目的是为了让有阅读习惯的朋友快速构建一个多源、干净、个性化的阅读环境


为什么叫Liuli


Liuli原来命名为2C,后面交流群的朋友提供了琉璃这个名字,取自梅尧臣《缑山子晋祠 会善寺》中的琉璃开净界,薜荔启禅关,其寓意也很符合项目的立意:


为用户构建一方阅读净土如东方琉璃净世界


距离上次发布已经过去了一个月(我实在是太拖了,反省),今天很高兴地和大家宣布Liuli又有一大波更新了!🥳 具体见v0.2.0 任务看板[1]


接下来我将根据Liuli最新版本V0.1.5来给大家介绍下如何基于 Liuli 构建纯净的 RSS 公众号信息流,最终订阅效果展示如下:

1.jpg

开始


首先从需求谈起,目前我有三点诉求:


  • 聚合目前订阅的公众号,通过 RSS 输出然后分别订阅

  • 对订阅的文章做广告识别

  • 对文章做一个快速备份

以上诉求正好就是本篇文章的主题构建纯净的 RSS 公众号信息流,具体实现这里不详谈,有兴趣可以在交流群里面交流,本篇文章只说怎么用。


如果你阅读过我之前写的那篇打造一个干净且个性化的公众号阅读环境[2],那么你对采集器、处理器、分发器等概念可能有些了解,但这里为了阅读的连贯性,所以再次介绍下,首先看架构图:

2.jpg

简单解释一下:


  • 采集器:监控各自关注的公众号或者博客等自定义阅读源,以统一标准格式流入Liuli作为输入源;

  • 处理器:对目标内容进行自定义处理,如基于历史广告数据,利用机器学习实现一个广告分类器自动打标签,或者引入钩子函数在相关节点执行等;

  • 分发器:依靠接口层进行数据请求&响应,为使用者提供个性化配置,然后根据配置自动进行分发,将干净的文章流向微信、钉钉、TG 甚至自建网站;

  • 备份器:将处理后的文章进行备份,如持久化到数据库或者 GitHub 等。

其实不了解流程也没关系,知道怎么用就行了,接下来请详细跟着教程一步一步来,最好有台电脑跟着操作。


使用


好,正戏开始。Liuli的部署使用还是很方便的,推荐大家使用Docker进行部署,所以开始前大家手头的设备需要安装好Docker,如果没安装,点击这里进行安装[3]即可。


配置


当前Liuli的配置主要分两大块:


  • 全局配置:就是全局环境变量,相关说明见Liuli 环境变量[4]

  • 任务配置:此配置针对用户需要解决的问题而形成,比如本文就会生成一个将公众号采集、处理、输出成 RSS 的配置(诸位使用时候将我的配置复制过去即可使用)

全局配置


首先说说全局配置,其实默认提供的配置也能让大家跑起来,但是如果你需要将文章分发到微信或者钉钉等,那就需要填写相关配置,好了,让我们开始吧,请打开终端或者用你熟悉的方式,建立一些文件夹或者文件。

mkdir liuli
cd liuli
# 存放调度任务配置,默认命名为default.json
mkdir liuli_config
# 数据库
mkdir mongodb_data
# 下拉 docker-compose 配置
# 如果网络不好请手动填写,内容见附录
wget https://raw.githubusercontent.com/howie6879/liuli/main/docker-compose.yaml
# 配置 pro.env 具体查看全局配置处的Liuli 环境变量
vim pro.env

对于pro.env,想了解详情的话建议查看全局配置[5]处的Liuli环境变量,当然你不想看也没关系,跟着此教程填即可,首先请将以下配置复制到pro.env:

PYTHONPATH=${PYTHONPATH}:${PWD}
LL_M_USER="liuli"
LL_M_PASS="liuli"
LL_M_HOST="liuli_mongodb"
LL_M_PORT="27017"
LL_M_DB="admin"
LL_M_OP_DB="liuli"
LL_FLASK_DEBUG=0
LL_HOST="0.0.0.0"
LL_HTTP_PORT=8765
LL_WORKERS=1
# 上面这么多配置不用改,下面的才需要各自配置
# 请填写你的实际IP
LL_DOMAIN="http://{real_ip}:8765"
# 请填写微信分发配置
LL_WECOM_ID=""
LL_WECOM_AGENT_ID="-1"
LL_WECOM_SECRET=""

假设你和我一样使用微信作为分发终端,只需要通过以下步骤获取以下参数即可:


  • LL_WECOM_ID

  • LL_WECOM_AGENT_ID

  • LL_WECOM_SECRET

获取流程如下,请先随便用手机号注册一个企业微信[6]


首先创造应用:

3.jpg

获取相关 ID:

4.jpg

企业 ID 在我的企业->企业信息->企业ID


为了方便可以在微信上接收消息,记得开启微信插件,进入下图所在位置,扫码关注你的二维码即可:

5.jpg

现在你获取了以下三个参数,请到对应配置填写秘钥即可。


任务配置


任务配置主要是让使用者可以更加个性化地使用Liuli,从而满足用户各种需求,当前Liuli还只能支持公众号采集、过滤、分发、备份操作,也就是本文的核心目的,大家将以下内容复制到liuli_config/default.json即可:

{
    "name": "default",
    "author": "liuli_team",
    "collector": {
        "wechat_sougou": {
            "wechat_list": [
                "老胡的储物柜"
            ],
            "delta_time": 5,
            "spider_type": "playwright"
        }
    },
    "processor": {
        "before_collect": [],
        "after_collect": [{
            "func": "ad_marker",
            "cos_value": 0.6
        }, {
            "func": "to_rss",
            "link_source": "github"
        }]
    },
    "sender": {
        "sender_list": ["wecom"],
        "query_days": 7,
        "delta_time": 3
    },
    "backup": {
        "backup_list": ["mongodb"],
        "query_days": 7,
        "delta_time": 3,
        "init_config": {},
        "after_get_content": [{
            "func": "str_replace",
            "before_str": "data-src=\"",
            "after_str": "src=\"https://images.weserv.nl/?url="
        }]
    },
    "schedule": {
        "period_list": [
            "00:10",
            "12:10",
            "21:10"
        ]
    }
}

注意上面的wechat_list字段,你只需要将自己想订阅的公众号输入进去即可,后面这块会做界面进行配置,先将就着用用吧。


启动


感谢你能看到这里,现在距离成功就只有一行命令了,请先检查liuli目录下文件树是否是下面这个样子:

(base) [liuli] tree -L 1
├── docker-compose.yaml
├── liuli_config
├────default.json
├── mongodb_data
└── pro.env

确认没问题后,执行:

docker-compose up -d

不出意外,会看到Docker启动了这三个容器:

1.png

查看liuli_schedule,会有日志如下:


输出日志如下:

Loading .env environment variables...
[2022:01:26 23:09:24] INFO  Liuli Schedule(v0.1.5) started successfully :)
[2022:01:26 23:09:24] INFO  Liuli Schedule time:
 00:10
 12:10
 21:10
[2022:01:26 23:09:36] INFO  Liuli playwright 匹配公众号 老胡的储物柜(howie_locker) 成功! 正在提取最新文章: 我的周刊(第023期)
[2022:01:26 23:09:39] INFO  Liuli 公众号文章持久化成功! 👉 老胡的储物柜
[2022:01:26 23:09:40] INFO  Liuli 🤗 微信公众号文章更新完毕(1/1)
...
[2022:01:26 23:09:45] INFO  Liuli 备份器执行完毕!

执行完毕后,你可以进入 MongoDB 数据库,会出现如下collection:


  • liuli_articles: 获取的文章元信息

  • liuli_backup: 文章全部备份

  • liuli_rss: 生成的 RSS

  • liuli_send_list: 分发状态

  • liuli_backup_list: 备份状态

假设你公众号源有老胡的储物柜,那么启动完毕,你可以访问老胡的储物柜RSS订阅地址http://ip:8765/rss/liuli_wechat/老胡的储物柜/,效果如下:

2.png注意红框部分,因为我使用的是GitHub备份器,所以地址显示的是GitHub地址,大家如果也想用这个,可以参考教程备份器配置[7],我使用GitHub备份器效果如下如:

3.png

每日更新的文章都会被Liuli自动同步到这个项目,如果大家都用LiuliGitHub备份器,一起将备份结果结合起来的话,那将会是一股非常庞大的力量,可以期待下。


展示


Liuli启动成功后,对于使用者来说,主要感知在分发订阅这一层。


订阅效果如下图:

7.jpg

附录


docker-compose.yaml配置如下:

version: "3"
services:
  liuli_api:
    image: liuliio/api:v0.1.1
    restart: always
    container_name: liuli_api
    ports:
      - "8765:8765"
    volumes:
      - ./pro.env:/data/code/pro.env
    links:
      - liuli_mongodb
    depends_on:
      - liuli_mongodb
    networks:
      - liuli-network
  liuli_schedule:
    image: liuliio/schedule:v0.1.5
    restart: always
    container_name: liuli_schedule
    volumes:
      - ./pro.env:/data/code/pro.env
      - ./liuli_config:/data/code/liuli_config
    links:
      - liuli_mongodb
    depends_on:
      - liuli_mongodb
    networks:
      - liuli-network
  liuli_mongodb:
    image: mongo:3.6
    restart: always
    container_name: liuli_mongodb
    environment:
      - MONGO_INITDB_ROOT_USERNAME=liuli
      - MONGO_INITDB_ROOT_PASSWORD=liuli
    ports:
      - "27027:27017"
    volumes:
      - ./mongodb_data:/data/db
    command: mongod
    networks:
      - liuli-network
networks:
  liuli-network:
    driver: bridge




相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
5天前
|
存储 人工智能 搜索推荐
社区供稿 | YuanChat全面升级:知识库、网络检索、适配CPU,手把手个人主机部署使用教程
在当下大语言模型飞速发展的背景下,以大模型为核心的AI助手成为了广大企业和个人用户最急切需求的AI产品。然而在复杂的现实办公场景下,简单的对话功能并不能满足用户的全部办公需求,为此我们发布了最新版的YuanChat应用
|
8月前
|
Android开发
AppsFlyer 研究(十一)配置 Google Ads MCC 获取 LINK ID
AppsFlyer 研究(十一)配置 Google Ads MCC 获取 LINK ID
|
搜索推荐
带你读《Elastic Stack 实战手册》之70:——4.1.2.实现主流搜索引擎广告置顶显示效果(上)
带你读《Elastic Stack 实战手册》之70:——4.1.2.实现主流搜索引擎广告置顶显示效果(上)
带你读《Elastic Stack 实战手册》之70:——4.1.2.实现主流搜索引擎广告置顶显示效果(上)
|
自然语言处理 搜索推荐 NoSQL
带你读《Elastic Stack 实战手册》之70:——4.1.2.实现主流搜索引擎广告置顶显示效果(下)
带你读《Elastic Stack 实战手册》之70:——4.1.2.实现主流搜索引擎广告置顶显示效果(下)
|
JSON JavaScript 小程序
HackerNews新闻列表功能描述|学习笔记
快速学习 HackerNews新闻列表功能描述
138 0
HackerNews新闻列表功能描述|学习笔记
|
监控 测试技术
腾讯的一个移动端测试小工具GT
下面是GT的官方说明: GT(随身调)是APP的随身调测平台,它是直接运行在手机上的“集成调测环境”(IDTE, Integrated Debug&Test Environment)。利用GT,仅凭一部手机,无需连接电脑,您即可对APP进行快速的性能测试(CPU、内存、流量、电量、帧率/流畅度等等)、开发日志的查看、Crash日志查看、网络数据包的抓取、APP内部参数的调试、真机代码耗时统计等等;更重要的是,您可以在任意真实场所、任何时候做如上的系列事情,这就是“APP的场测”。
851 0
|
机器学习/深度学习 人工智能 大数据
全球最火DL课程Fast.ai 2020版今日上线!我们拿到了独家授权,中文版同步免费放出
全球最火DL课程Fast.ai 2020版今日上线!我们拿到了独家授权,中文版同步免费放出
376 0
|
自然语言处理 运维 搜索推荐
精选案例 | “虫虫音乐”如何做到搜索CTR提高150%
简介: 本文通过【虫虫音乐】在阿里云开放搜索的最佳实践,和大家介绍影音行业如何快速实现高质量的搜索服务助力业务更好发展!
922 0
精选案例 | “虫虫音乐”如何做到搜索CTR提高150%
|
JSON 小程序 IDE
|
Android开发 iOS开发 C++
使用Xamarin开发手机聊天程序 -- 基础篇(大量图文讲解 step by step,附源码下载)
原文:使用Xamarin开发手机聊天程序 -- 基础篇(大量图文讲解 step by step,附源码下载)         如果是.NET开发人员,想学习手机应用开发(Android和iOS),Xamarin 无疑是最好的选择,编写一次,即可发布到Android和iOS平台,真是利器中的利器啊!而且,Xamarin已经被微软收购并被大力推广,.NET开发人员将时间投资在Xamarin上,以应对移动开发的热潮,应该是值得的。
1586 0