前言
本文轉載自Jianger's Blog,歡迎訂閱。本篇博文接上利用Feed43為網站自制RSS源,上一篇講解了RSS的簡介以及利用Feed43自制專屬RSS,Feed43有其優勢,缺陷也很明顯,不能高度自定義、有的網站無法使用。那么此時,一個更為牛X的工具出場了,它就是Huginn。本篇就帶你一探Huginn,並從安裝到制作全程詳細講解制作專屬RSS。
前排提示
Huginn需要安裝在雲主機/雲服務器上使用,如果你還沒有,趕快購置一台吧
Huginn為何物
Huginn 是一個創建代理的系統,它為你在線執行自動化的任務。它主要的用途就是發送HTTP請求獲得相關數據,然后你可以選擇進行如下處理:
- 將獲得的數據進行相應的格式處理輸出,例如RSS;
- 將獲得的數據通過第三方接口(huginn官方支持不少)進行發出,例如發郵件;
- 將獲得的數據作為相關參數用作另一事件event的參數,例如將獲得的天氣信息作為Email Agent的內容。
不難發現,通過以上三方面的組合操作,Huginn可玩性頗高,它不僅僅可以用來制作RSS源,是一款自動化的效率利器,你可以把它看作是自己服務器上的 IFTTT 或 Zapier (注:兩款皆是自動化工具)的破解版本。解鎖更多姿勢,請參閱官方文檔 。
Huginn的安裝
官方提供了很多種安裝方式,我采用了Docker的安裝方式,Docker是一個輕量的實現虛擬化的利器,不用一個一個安裝需要的應用,個人用足以,使用方法不詳述了,貼一個學習地址Docker教程,本文也用不上太多,會用就好。下面開始安裝,說明一下我的雲服務器為騰訊雲Centos 7.5,以下操作均基於此系統。
-
使用連接客戶端連接騰訊雲,並輸入如下命令回車
yum install docker -y
-
不一會兒,若看到
Complete!
就安裝完成啦,接着啟動docker服務,輸入如下命令並回車systemctl start docker
-
安裝容器前先替換成阿里雲鏡像,官方源太慢了!
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://iikujkej.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
-
安裝運行測試容器,輸入如下命令並回車,如果80端口已占請改用其他端口
docker run -d -p 80:80 httpd
-
安裝成功后在瀏覽器輸入http://你的服務器IP,如果頁面顯示
It Works
,說明docker運行起來了,可以繼續下一步 -
雖然安裝Huginn時附帶有一個輕量的數據庫,但Huginn一刪里面的數據就沒了,所以接下來安裝通過docker安裝MySQL,直接連接外部的MySQL也可以,不過麻煩些
docker pull mysql:5.6
我這里指定了MySQL版本為5.6,未指定的話,默認是最新的,但是最新版容易出問題,so.
-
完成后創建並啟動一個MySQL容器,MYSQL_ROOT_PASSWORD就是密碼,可以自行設置
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.6
-
接着進入MySQL容器修改權限,完成后最好重啟MySQL容器
docker exec -it mysql bash mysql -u root -p GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; flush privileges;
-
終於要安裝Huginn了!輸入如下命令,HUGINN_DATABASE_PASSWORD就是上面設置的密碼,MYSQL_PORT_3306_TCP_ADDR對應docker的本地IP,你可以使用
ifconfig
命令查看docker pull huginn/huginn docker run --name huginn -p 3000:3000 -e MYSQL_PORT_3306_TCP_ADDR=172.18.0.1 -e HUGINN_DATABASE_NAME=huginn -e HUGINN_DATABASE_USERNAME=root -e HUGINN_DATABASE_PASSWORD=123456 huginn/huginn
-
最后在瀏覽器中輸入http://你的服務器IP:3000並訪問,出現如下頁面即安裝成功!
點擊Login登錄,初始賬號:admin,密碼:password,登錄進去可自行修改。
開始定制專屬RSS
以下以制作電影天堂的最新電影信息RSS為例
新建第一個Agent,獲得標題和對應鏈接
初始化已經有一些Agents,你可以從里中學習到一些使用方法。點擊+ New Agent添加第一個Agent,Type選擇Website Agent。
Name框輸入名稱,Schedule下拉框選擇執行的間隔時間,其他默認即可
Options參數最為關鍵,右側都有英文說明的,字段簡要說明如下:
url:網址鏈接
type:返回的數據類型,支持xml,、html、json、text,此處填寫html
mode:抓取模式,可選
all
,on_change
,merge
,這里填寫on_change,表示頁面有變化才會抓取extra:表示抓取規則,
- url和title表示抓取字段的名稱,可隨意命名;(后面用得着,作為參數傳給其他Agent)
- css表示抓取內容的css路徑,value表示抓取的值,@href表示抓取對應css標簽的href屬性值,還有@src,@title等等;
- 如果要抓取對應標簽的值,可填
.
(包括html代碼的全部內容),string(.)
(只包含對應標簽的值),text()等同string(.)
填寫完畢后點擊Dry Run,如上圖顯示抓取到了數據表明有效,然后點擊save保存,否則請修改extract下的參數再試。
保存后run一下,然后就會有生產出很多events,就是獲取到的數據。如果沒有獲取到可能是數據庫的問題。
新建第二個Agent,獲取全文輸出
同樣的,Type選擇Website Agent,Sources選中第一個Agent,下面的框一定勾選上
{{url}}即第一個Agent傳過來的超鏈接參數,這里mode一定填寫merge,這樣兩個Agent的字段就組合到一起了,同樣的選擇一個接受到的event測試一下
把第一個的events都刪除然后重新run一下可以發現第二個Agent也自動執行了,第二步完畢。
新建第三個Agent,輸出成RSS
Type選擇Data output Agent,Sources選擇第二個Agent,secrets填寫RSS地址自定義的末尾名稱,item下就是RSS中的每一條信息了,填寫上對應參數,其他默認即可。最后點擊保存
至此,一個專屬RSS源就已生成,點擊第三個Agent就能看到下圖所示,把它添加到RSS閱讀器上去吧。