有过几段时间特别希望能把自己在博客园发布的随笔整理成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:UsersAdministratorDesktopCHM C:UsersAdministratorDesktopdiabloxl 博客园随笔.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- 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