基於Liuli構建純淨的RSS公眾號資訊流

howie6879發表於2022-01-27

首先介紹下,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

獲取流程如下,請先隨便用手機號註冊一個企業微信

首先創造應用:

獲取相關ID:

企業ID在我的企業->企業資訊->企業ID

為了方便可以在微信上接收訊息,記得開啟微信外掛,進入下圖所在位置,掃碼關注你的二維碼即可:

現在你獲取了以下三個引數,請到對應配置填寫祕鑰即可。

任務配置

任務配置主要是讓使用者可以更加個性化地使用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啟動了這三個容器:

檢視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/老胡的儲物櫃/,效果如下:

注意紅框部分,因為我使用的是GitHub備份器,所以地址顯示的是GitHub地址,大家如果也想用這個,可以參考教程備份器配置,我使用GitHub備份器效果如下如:


每日更新的文章都會被Liuli自動同步到這個專案,如果大家都用LiuliGitHub備份器,一起將備份結果結合起來的話,那將會是一股非常龐大的力量,可以期待下。

展示

Liuli啟動成功後,對於使用者來說,主要感知在分發訂閱這一層。

微信分發終端效果圖:

訂閱效果如下圖:

說明

本專案還屬於非常稚嫩的早期階段,如果大家覺得有用的話,希望快點用起來,趁早提點意見,讓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

相關文章