小專案 rss訂閱

2022-05-07 07:57:11 字數 3534 閱讀 3893

其實,本質上和爬蟲沒區別,只不過這是人家主動給你資料,而且是編排好格式後的資料

按個人主頁url更新內容

去重,按照redis去重的方式

按時間儲存內容

mysql 儲存為時間格式(可以根據時間比較大小,需要把post時間轉換為datetime型別儲存)

定時更新,可以設定更新時間

檢視關注的人的資訊,提供取消關注功能,被取消的不再更新內容

提供歷史關注資訊?

---這種方式暫時不使用,因為有滑動驗證碼比較麻煩,不如直接維護關注的人的id

---雖然短時間內頻繁登入很麻煩,但隔時間比較久更新還是可以的,比如隔一周後兩三天更新一次關注列表

重新整理關注列表時,把新增的up的頭像url儲存

是否更新成功用頭像+id來判斷,到時候首頁展示所關注的up的資訊

對於長期來講就方便多了,不用手動維護乙個列表,而只要設定定時任務即可

1.爬蟲-登入

2.獲取關注的人列表

重新整理關注列表時,把新增的up的頭像url儲存

文章:標題,摘要,鏈結(唯一標識),post時間,作者引用,

具體實現討論:

因為要儲存,直接寫sql太麻煩,考慮用模組

最終是要通過html顯示的,所以直接上flask,配合sqlalchemy使用

flask + flask_sqlalchemy

更新-up:根據id判斷,頭像不進行更新

更新-文章:

是否更新:判斷post時間

資料分為寫和讀

定時向資料庫儲存資料,通過請求來獲取資料

登入-關注-暱稱/頭像url,由暱稱獲得rss-id,請求獲取xml

通過唯一的字段來判斷是否是新使用者;通過每次的登入來維護使用者資料

(暫時不做使用者的更新,因為基本都不會變,只做是否存在的判斷)

解決:有突出顯示兩個,乙個是關注的up新發布的文章,二是最新關注了那個up,所以如果是新關注的up說明當前的興趣點在這一方面,所以把這個up的文章時間儲存為另乙個字段,而原來的文章時間由關注up的時間代替,這樣新關注的up的文章就會顯示在當前時間點,即使文章比較早了

收藏的整合,乙個是部落格主體平台上的,乙個在rss上的,但這裡是收藏時間而不是文章建立時間,所以和個人的關注點在時間順序上是統一的

up的最終列表中,如果是新關注的,那麼增加關注時間,即[1,2,[3,2019-12],4]

在遍歷時判斷長度,如果為2則將時間取出來代替原來的post_time,原文章發布時間儲存為另乙個字段

攜帶時間的問題:初次獲取資料與之後的正常更新的區別,資料庫初始化時會使得每個up都會攜帶時間,但並不需要這樣做

兩種處理方式:1.初始化時都不攜帶時間資訊,額外欄位設為空;之後更改**邏輯,攜帶時間;

2.post_time保留本來的時間;初始化時都攜帶時間,設定給額外字段,之後新關注的也是;正常更新的,將額外字段設定為發布時間;之後取資料依照額外欄位的時間

3.取資料直接依照入庫時間

1需要改**,不能保持**的完整性;2會使得初始化文章的顯示時間錯亂;3與2的問題一致,且後續更新的時間不準確

還是取1,保證post時間的準確性

初始化資料庫-cnblog

給文章表增加subscribe_time欄位,用來通過這個字段顯示文章而不是發布時間

在儲存up時,如果是新的則將id儲存到redis列表中;儲存文章時,先判斷up是否在列表中,如果在則pop出來,並將subscribe_time設定為up的create_time,否則不存在,則將subscribe_time設定為post_time

1.安裝mysql,redis

建立資料庫rss_db,進行資料庫遷移

2.chrome

①安裝的是chromium

安裝chromium,無介面

apt-get install chromium-browser

檢視位置

whereis chromium-browser

檢視版本

chromium-browser --version

②chromedriver

安裝:

sudo apt-get install chromium-chromedriver

檢視安裝路徑

dpkg -l chromium-chromedriver

selenium的driver物件配置:

不用寫chromedriver的路徑executable_path

browser = webdriver.chrome(desired_capabilities=caps,options=chrome_options)

無法import cv2模組的問題:

原因:是由於opencv在linux上的bug導致的

解決:

在~/.bashrc中新增

export ld_preload=/usr/lib/arm-linux-gnueabihf/libatomic.so.1.2.0

參考:

--------------上面如果可以就不用進行下面的了-------------

問題說明及解決:

上面的shared object file都有了後import cv2仍然有問題

論壇討論及一些可行方案:

pillow模組安裝問題:

解決:

sudo apt-get install libjpeg-dev zlib1g-dev

pip install pillow

樹莓派的問題太多,改用debian官方amd64的就沒什麼問題,selenium正常執行,也不需要其他額外的什麼東西

已經在官方系統amd64上跑通了所有東西;樹莓派上最致命的是selenium的chrome用不了,又有些東西必須依賴chrome

樹莓派安裝官方debian:

但amd64和armhf是不同的架構,官方倒是也有armhf的版本,但selenium不能正常使用可能就是arm的問題,這就難辦了

還必須得在pc上執行,這樣的話得需要乙個類似nuc的東西

不在nuc上跑,可以放到雲伺服器上,對效能沒什麼要求的情況,費用也較少

遞迴呼叫2次,實際會有3次的登入,測試結果:是起作用的

2.增加了user,article的顯示資訊:共處理的資料數量,更新的數量,刪除的數量

3.更新文章後同步其update_time欄位;如果是之前關注過但取關了,則同步其create_time/delete欄位

4.使用者的id才是唯一標識,使用者名稱不是,取消了使用者名稱的unique

5.只要關注一次就當作老使用者處理,無論之後是否取關/關注

6.文章的url/post_time不能是聯合索引,url相同post_time不同則又會插入資料,但其實為一條資料;取消了聯合索引,設定url為unique

7.取關時刪除redis中的user_id

# todo 新關注的展示文章的數量控制

RSS訂閱推薦

基礎知識 什麼是 rss?rss really syndication 是一種描述和同步 內容的格式,是目前使用最廣泛的 xml應用。rss可以幹什麼?1.訂閱 blog 你可以訂閱你工作中所需的技術文章 也可以訂閱與你有共同愛好的作者的 blog 總之,你對什麼感興趣你就可以訂什麼 2.訂閱新聞 ...

RSS訂閱之原理概述

上文對rss的使用作了簡介,現在對rss的原理作個簡單的介紹。首先應該了解到,你發表的部落格內容 比如標題 作者 分類 發表時間 正文 tag等資訊 都會被儲存到永久介質上 比如後台資料庫 文字檔案等,一般是關係型資料庫 現假設你的部落格系統使用的關係型資料庫,並且儲存分類和文章的資料表有如下的資料...

安裝FeedReader新增RSS訂閱

它還允許您通過電子郵件,twitter,電報與他人分享藝術品。1.首先來安裝flatpak框架 開啟終端 sudo apt get install flatpak 2.新增flathub儲存庫,它存放大量的flatpak應用程式 flatpak remote add if not exists fl...