有過幾段時間特別希望能把自己在博客園發布的隨筆整理成PDF或CHM之類的電子檔。試用了豆約翰博客備份專家、瑞祥博客備份工具、BlogDown、Blog_Backup等備份工具,給我的感覺都不怎樣,對於非注冊版本導出有限制,而且導出的樣式真心覺得丑!
最近在博客園看到使用CHM文檔 采集隨筆(續),扒拉下來稍微修改后還真可以使用~.~
一、針對輸入用戶名
輸入用戶名得到的CHM效果圖
主要修改的部分:
1、博客園隨筆從2013-06-17起(翻看別人的隨筆推測的時間點),隨筆路徑從http://www.cnblogs.com/userId/archive/…調整到http://www.cnblogs.com/userId/p/…,因此源代碼中隨筆鏈接的判斷需修改。Program.cs->articleUrl.IndexOf
2、隨筆頁面底部增加發布時間——G綠框部分;隨筆目錄頁面底部增加生成CHM的時間。Program.cs->channelPubDate、temChild.html->class="postDesc"
3、隨筆頁面頂部博文標題——B1藍框部分,鏈接修改在瀏覽器新窗口打開當前博文;隨筆頁面底部——B2藍框部分,鏈接修改在瀏覽器新窗口打開作者博客園首頁。temChild.html->class="postTitle"、temChild.html->class="postDesc"、Program.cs->channelLink
4、目錄分類和分類下的隨筆按照采集順序排列——R紅框部分。之前下載的隨筆以1.html、2.html、3.html…這樣保存,在工具類別的隨筆是91.html、92.html、93.html…105.html,通過Directory.GetFiles(path)變成了100.html、101.html、102.html…105.html、91.html、92.html、93.html…99.html。修改本地隨筆起始值為10001.html,分類目錄參考添加101起始前綴,編譯CHM取目錄名稱時Remove中間三個數字。Program.cs->fileIndex、Program.cs->cateIndex、ChmHelp.cs->string dirname in strDirectories
存在問題:
1、能否整合從archive和p目錄下查找隨筆,這樣就不會出現2013-06-17臨界點問題
2、對部分博客皮膚支持不好,同一個UserId使用SimpleBlue可以導出,換成Minyx2_Lite就獲取不到
3、手機端查看CHM文檔,發現[返回目錄]位置"移動";發布時間底部空白部分過多
4、部分博客采集生成的隨筆標題與正文內容不匹配(例如double-K)
5、隨筆分類和文章分類使用相同的路徑(http://www.cnblogs.com/UserID/category/xxxxxx.html)。首頁如果顯示[文章分類],會以文章的類別名稱創建目錄,但獲取不到其下的文章,文章路徑是http://www.cnblogs.com/userId/articles/...;隨筆/文章分類下如果沒有博文,或者獲取不到博文,在隨筆目錄頁面依舊會創建分類目錄
問題3已於20:54 2017/7/13解決,修改temChild.html->class="postTitle"、style.css->.postDesc、common2.css->#cnblogs_post_body p。
問題1、問題4已於22:33 2017/7/14解決,修改articleUrl.IndexOf添加新目錄的判斷;修改博文標題和博文地址的取值。
問題5已於21:17 2017/7/18解決,僅當類別下存在博文時才創建目錄,更好的方法是獲取博客分類地址時只取隨筆分類。
二、針對博客備份文件
拖入博客備份的xml得到的CHM效果圖
存在問題:
1、使用博客備份CNBlogs_BlogBackup_1_xxxx_xxxx.xml,如果隨筆標題包含雙引號(")、冒號(:)等字符,其在程序中會異常退出,建議修改標題不包含這些字符
2、由於前面第2步的修改,隨筆頁面底部的發布時間獲取不到
3、由於前面第4步的修改,編譯CHM目錄名稱進行Remove,導致目錄名稱不全;另外目錄下的隨筆直接按博文標題保存,編譯CHM取到的隨筆順序有問題。建議在ChmHelp.cs中對Directory.GetFiles(path)、Directory.GetDirectories(path)進行排序
問題2、問題3已於21:37 2017/7/8解決,主要還是參考輸入用戶名的取巧方式,詳細內容請查看源代碼中的注釋信息。
博文發布前已經更新過幾版。后續扒別人的博客發現各種瑕疵,然后一遍又一遍地更新(文中標記刪除線部分),過於追求完美真的不太好。
源代碼歸原作者所有,我只是小打小鬧(本人不懂C#,程序有BUG問我也不懂)。最新的[源代碼]奉上,再次感謝原作者!有興趣的可以繼續完善,適合自己的才是最好的!
12:36 2017/7/21 補充,對於data:image/png;base64表示的圖片(大菠蘿),編譯后的CHM在PC端直接打開部分圖片顯示不了。右擊圖片屬性->地址(URL)與原圖片地址對比發現被截斷,但在手機端使用閱讀器顯示正常,並且反編譯后從html文件中查看顯示也正常。推測是PC端打開CHM的工具導致。
在線還原Base64編碼為圖片,使用下面命令反編譯.chm文件
shell> hh -decompile C:\Users\Administrator\Desktop\CHM C:\Users\Administrator\Desktop\diabloxl 博客園隨筆.chm
22:20 2017/7/27 補充,最近博客園部分隨筆中的圖片加載過慢(7月21號獲取博客Uest只需三五分鍾,這一周竟然需要三個小時!),很快CMT修復了,但是對應的圖片卻無法下載。博問中發現貼上去的圖片地址在發布后自動變更,通過對比發現替換圖片地址的"images.cnitblog.com"為"images0.cnblogs.com"歪打正着就可以下載了。
16:28 2017/8/8 補充,部分圖片尺寸過大,限制圖片最大寬度。style.css->IMG {max-width: 800px}
15:25 2017/9/30 補充,生成的CHM,二級/三級標題和正文內容"行距"過寬。common2.css->#cnblogs_post_body p {margin: 0px}
21:47 2017/11/24 更新,隨筆頁面底部——B2藍框部分,博文作者由之前的用戶名,修改為昵稱。Program.cs->postAuthor
10:06 2017/12/22 更新,添加目錄代碼,在隨筆正文根據二級、三級標題生成目錄。ContentList.js、temChild.html
21:01 2018/5/29 更新,自5月23號起輸入用戶名無法下載(拖入博客備份文件正常下載),原因是獲取的類別鏈接、隨筆鏈接以https://開頭,替換為http://即可。Program.cs->categoryUrl、Program.cs->articleUrl
23:13 2019/10/26 更新,入口地址更新"http://www.cnblogs.com/" + userId + "/ajax/sidecolumn.aspx";隨筆分類正則過濾調整,categoryName去除空格;用戶昵稱起始位置調整。Program.cs->url、Program.cs->FilterC、Program.cs->AuthorStart
22:11 2020/02/02 更新,用戶昵稱起始位置調整。Program.cs->AuthorStart