摘要:是一個自動根據(jù)你的豆瓣讀書標記生成讀書報告的腳本。動機我自己自己是一個重度豆瓣讀書用戶注意這里要區(qū)分豆瓣讀書和豆瓣閱讀的區(qū)別。豆瓣授權(quán)由于要讀用戶的豆瓣數(shù)據(jù),那么就要接入豆瓣的,那么就要先向豆瓣申請授權(quán)。
DouBanReader是一個自動根據(jù)你的豆瓣讀書標記生成讀書報告的腳本。適用對象是像我這種豆瓣讀書的重度用戶,會在豆瓣上標記自己讀過的每一本書,并且會很負責地打分與寫review。對于這樣的用戶,這個項目可以幫你一鍵生成讀書報告,并且格式化成MarkDown格式,之后你再發(fā)布到各大博客平臺或者自己轉(zhuǎn)成其他格式(HTML,PDF和圖片等)都非常容易。
動機我自己自己是一個重度豆瓣讀書用戶(注意這里要區(qū)分豆瓣讀書和豆瓣閱讀的區(qū)別)。最近兩年的年閱讀量都在45到50本之間,今年上半年更是因為工作任務(wù)比較少的關(guān)系,有幾個月的月閱讀量都在5本以上。同時,我也信奉光讀書不動筆相當于沒讀的道理,所以從去年開始,我就開始寫每個月的閱讀報告。那么這就帶來一個問題——一篇閱讀報告中,很多工作其實都是重復(fù)的:
對于每一個本書的review其實我已經(jīng)在豆瓣讀書上都寫過了(一般剛一讀完我就會著手寫心得然后發(fā)在豆瓣讀書上)
組織閱讀報告格式時,要去豆瓣搜集書的信息:封面的圖片和豆瓣鏈接
這些工作做起來又無聊又容易出錯(復(fù)制黏貼很容易黏錯或者黏漏了),所以我就萌生了做一個自動生成閱讀報告的工具。
功能點做一個項目之前肯定要先確認需要做哪些功能點,所以這里先列一下這個項目的功能點以及完成情況。
豆瓣授權(quán)由于要讀用戶的豆瓣數(shù)據(jù),那么就要接入豆瓣的API,那么就要先向豆瓣API申請授權(quán)。具體的授權(quán)流程可以參見:使用OAuth2.0訪問豆瓣API,具體的豆瓣API說明可以參見:豆瓣開發(fā)者服務(wù)。
獲取用戶的讀書信息核心功能點。要獲取的數(shù)據(jù)分三塊:圖書鏈接、圖書封面和用戶書評(review)。同時這些數(shù)據(jù)的獲取要能按照時間區(qū)間區(qū)分(用數(shù)字代表月份,0代表全年)。
主要調(diào)用API參見:圖書Api V2。具體的流程分成兩步:
獲取用戶在特定時間段內(nèi)的『已讀』數(shù)據(jù)信息集合(這一步就可以獲取到圖書鏈接和封面圖片了)
獲取用戶對每本書的書評(review)
其中,第一步很好做,因為API直接提供了這些數(shù)據(jù),第二點就是坑多且深,因為API并不直接提供,這也是非常值得吐槽的點:豆瓣的開放API有兩版,但是V2現(xiàn)在就像是還沒做完就放棄了一樣,根本沒有完全覆蓋到V1,再具體到用戶書評這一點上,V1雖然相較V2是提供了相關(guān)的接口,但是普通權(quán)限只能讀一個人的所有書評并且還不是全文,高級權(quán)限也沒有提供具體到特定用戶對特定圖書的書評的數(shù)據(jù)接口。
因此,對于第二步,還得將其拆分成三個小步驟:獲取已讀圖書ID-->獲取相應(yīng)圖書所有書評-->篩選出當前用戶書評并直接獲取相應(yīng)頁面信息-->對書評頁面的HTML代碼進行正則匹配找出書評內(nèi)容。本來在我看來是應(yīng)該由API提供的數(shù)據(jù),因為豆瓣開放平臺沒有提供,所以只能繞這么大一圈,而且還留下了很多隱患:遍歷所有書評需要多次網(wǎng)絡(luò)請求,增加了不可靠性;用正則匹配來處理HTML頁面的時效性問題……
生成MarkDown文件根據(jù)模板,將獲取到的數(shù)據(jù)填充進去,生成一篇MarkDown格式的文章。具體的格式可以可以參見:四月份閱讀報告
生成圖片(未完成)設(shè)定這個功能的初衷本來是想方便發(fā)微博和微信,而且以為這個功能應(yīng)該是有庫可以支持和提供的。但是等到準備開始做的時候,調(diào)查一圈之后發(fā)現(xiàn):庫只有圖片繪制庫,想要完成這個功能需要自己寫很多代碼,而且如果想要生成的圖片格式好看,需要的工作量不亞于再開一個小工程。有鑒于此,就將這個功能點先延后了,以后如果有時間的再進行補充。
豆瓣API的那些坑這個是我在做這個項目時,遇到的豆瓣開發(fā)平臺的坑,坑是指在API文檔中沒有指明的或者很容易讓人誤解的地方,這些地方你遇到錯誤的時候完全不知道你自己錯在哪里,等在網(wǎng)上查到原因的時候,第一反應(yīng)就是:『臥槽,這文檔上根本就沒寫嘛,這我怎么能知道?!』,或者『臥槽,這里怎么能這樣設(shè)計,算幾個意思呀,真特么麻煩呀!』。把這些坑寫出來也是為了能給以后的開發(fā)人員節(jié)省點時間(雖然我現(xiàn)在都覺得以豆瓣API V2的這個質(zhì)量,還有沒有開發(fā)人員原因為其開發(fā)應(yīng)用了)。
在獲取access_token時(https://www.douban.com/service/auth2/token)需要在headers中加入"Content-Type": "application/x-www-form-urlencoded",不然會一直報400錯誤,提示"required_parameter_is_missing: client_id"。
在獲取當前用戶信息時(https://api.douban.com/v2/user/~me)需要在headers中加入"Authorization": "Bearer " + access_token,不然會一直報403錯誤。
獲取用戶書籍收藏信息時,所給出的時間區(qū)間參數(shù)需要帶『時區(qū)』不然會被直接無視。正確的GET請求URL應(yīng)為:api.douban.com/v2/book/user/findingsea_ly/collections?status=read&from=2015-06-01T13:14:15+08:00&to=2015-07-01T13:14:15+08:00。
豆瓣的API對于評論的讀取限制非常多,沒有辦法用用戶ID和圖書ID就直接獲取到特定用戶對于特定圖書的評論(reivew),同時如果獲取特定圖書的所有評論信息進行遍歷,其中也只能得到用戶評論的summary(非全文,三個省略號結(jié)尾),暫時想到的辦法也只能通過對所有信息的遍歷,得到特定的那一條后再根據(jù)其中的評論鏈接,用爬蟲進行爬取。
項目依賴由于生成圖片的功能點沒有完成,所以本次只額外用到了一個網(wǎng)絡(luò)請求包:Requests: HTTP for Humans。
項目總結(jié)總體而言,DouBanReader是一個解決了我的實際需求的小項目,就功能點上來說,并沒有難的地方,但同樣能學(xué)到很多小細節(jié),比如字符串寫入文件前的格式化(Python2中文操作不可避免的)和正則表達式的使用技巧(去除各種空白、URL解析和HTML正則查找等)。所以我對這個項目的完成度和學(xué)習(xí)度就還是挺滿意的,再接再厲吧。
GitHub - findingsea/DouBanReader
以上。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/37567.html
摘要:微豆一個使用與重構(gòu)豆瓣的項目。在中的配置代理重新啟動,打開查看結(jié)果是否與直接請求豆瓣相同。更多請參考豆瓣電影文檔。它采用集中式存儲管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測的方式發(fā)生變化。 微豆 Vdo 一個使用 Vue.js 與 Material Design 重構(gòu) 豆瓣 的項目。 項目網(wǎng)站 http://vdo.ralfz.com/ GitHub https:...
摘要:后端好書閱讀與推薦系列文章后端好書閱讀與推薦后端好書閱讀與推薦續(xù)后端好書閱讀與推薦續(xù)二幾個月又過去了,又讀了幾本書,同時為了深切體會到某些書里面的要點還專門做了一個小項目,這里就把讀書與小項目過程中的一些心得體會記錄一下。 后端好書閱讀與推薦系列文章:后端好書閱讀與推薦后端好書閱讀與推薦(續(xù))后端好書閱讀與推薦(續(xù)二) 幾個月又過去了,又讀了幾本書,同時為了深切體會到某些書里面的要點還...
摘要:后端好書閱讀與推薦系列文章后端好書閱讀與推薦后端好書閱讀與推薦續(xù)后端好書閱讀與推薦續(xù)二幾個月又過去了,又讀了幾本書,同時為了深切體會到某些書里面的要點還專門做了一個小項目,這里就把讀書與小項目過程中的一些心得體會記錄一下。 后端好書閱讀與推薦系列文章:后端好書閱讀與推薦后端好書閱讀與推薦(續(xù))后端好書閱讀與推薦(續(xù)二) 幾個月又過去了,又讀了幾本書,同時為了深切體會到某些書里面的要點還...
摘要:今天為大家整理了個爬蟲項目。地址新浪微博爬蟲主要爬取新浪微博用戶的個人信息微博信息粉絲和關(guān)注。代碼獲取新浪微博進行登錄,可通過多賬號登錄來防止新浪的反扒。涵蓋鏈家爬蟲一文的全部代碼,包括鏈家模擬登錄代碼。支持微博知乎豆瓣。 showImg(https://segmentfault.com/img/remote/1460000018452185?w=1000&h=667); 今天為大家整...
閱讀 2561·2021-09-28 09:36
閱讀 1588·2021-09-22 15:33
閱讀 3699·2019-08-30 15:44
閱讀 1809·2019-08-29 13:14
閱讀 3230·2019-08-29 11:17
閱讀 1506·2019-08-29 11:03
閱讀 2968·2019-08-26 17:10
閱讀 740·2019-08-26 12:13