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

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

为什么叫Liuli

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

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

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

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

liuli_demo

开始

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

  • 聚合目前订阅的公众号,通过RSS输出然后分别订阅
  • 对订阅的文章做广告识别
  • 对文章做一个快速备份

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

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

liuli_process

简单解释一下:

  • 采集器:监控各自关注的公众号或者博客等自定义阅读源,以统一标准格式流入Liuli作为输入源;
  • 处理器:对目标内容进行自定义处理,如基于历史广告数据,利用机器学习实现一个广告分类器自动打标签,或者引入钩子函数在相关节点执行等;
  • 分发器:依靠接口层进行数据请求&响应,为使用者提供个性化配置,然后根据配置自动进行分发,将干净的文章流向微信、钉钉、TG甚至自建网站;
  • 备份器:将处理后的文章进行备份,如持久化到数据库或者GitHub等。

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

使用

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

配置

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

  • 全局配置:就是全局环境变量,相关说明见Liuli 环境变量
  • 任务配置:此配置针对用户需要解决的问题而形成,比如本文就会生成一个将公众号采集、处理、输出成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,想了解详情的话建议查看全局配置处的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

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

首先创造应用:

image

获取相关ID:

image

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

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

image

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

任务配置

任务配置主要是让使用者可以更加个性化地使用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启动了这三个容器:

image

查看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/老胡的储物柜/,效果如下:

image

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

image

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

展示

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

微信分发终端效果图:

image

订阅效果如下图:

image

说明

本项目还属于非常稚嫩的早期阶段,如果大家觉得有用的话,希望快点用起来,趁早提点意见,让Liuli成长得更加迅速。

如果觉得这个项目不错,麻烦在GitHubLiuli一个Star,项目地址点这里👉liuli-io/liuli

如果你在搭建&使用过程中有任何问题或者意见,你可以直接在GitHubIssue或者直接进群我们详聊(如果过期,公众号里面有我微信,拉你进群)。

附录

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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容