google宣布2013年7月停止google reader服务,这已经不是新闻了。这里不讨论google的这个做法,毕竟google reader一直在免费提供如此优秀服务那么久,用户没有要求google继续亏损运营的理由。
google reader用户当下最要紧的是及早导出自己多年在google reader上存的数据(标星条目等),我个人就是面临这个问题的。好在google提供了数据导出功能:http://www.google.com/reader/view/
问题来了,导出的格式是xml和.json后缀的文件,xml是feed的list,这个数据导到其他rss reader中问题不大(一般数据也不多,顶多手工处理下),但是那些json文件怎么处理?
打开.json后缀的文件,可以看到这个可以用记事本正常查看,现在的目的是要吧其中那些标星的条目提取出来,最好是导入到收藏夹中。
将google reader导出的json文件数据批量导入浏览器收藏夹
遗憾的是,这个暂时没有办法直接实现。
IE收藏夹导入功能只能识别html文件中的<A>标签,将A标签的url全部导入收藏夹。但是google reader导出的数据中starred.json文件,不只有文章的url,还有feed的url和网站的首页的url,IE当然不能智能区分开,另外,starred.json里的url都是纯文本,还没有<A>标签。测试了其他的个浏览器,导入功能更加不靠谱不智能。
自己动手,丰衣足食。
json是个什么文件?
可参见百度百科,大致意思是,这个文件跟javascript渊源颇深。网上看到一段如下js代码:
var objs = [{ id: 1, name: 'n_1' }, { id: 2, name: 'n_2'}]; alert(objs[0].id);
看到赋值给objs这个变量的字符串{ id: 1, name: ‘n_1’ }, { id: 2, name: ‘n_2’} 与starred.json文件中内容格式非常相似。这种格式就是json格式。
了解json后知道:1、javascript引擎支持json格式数据的解析2、jason作为比xml更省空间、兼容性更高的格式开始流行,我们可以认为.json是作为xml继任者。
最通用的方法使用编程语言(php、java等)中正则表达式提取需要的数据,现在既然javascript默认支持解析,就直接用javascript写脚本处理了。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head><TITLE>解析json</TITLE> </head> <BODY> <textarea id="aa" rows="30" cols="120"></textarea> <script language="javascript"> // var objs = [把starred.json中所有字符赋值到这个中括号中]; //下面字符串示例 var objs = [{ "id" : "user/03731433422213343819/state/com.google/starred", "title" : "Google 阅读器中 galois21 加注星标的条目", "author" : "galois21", "updated" : 1363282315, "direction" : "ltr", "items" : [ { "isReadStateLocked" : true, "crawlTimeMsec" : "1363282315578", "timestampUsec" : "1363282315578396", "id" : "tag:google.com,2005:reader/item/6cf1f47eeb97eb1b", "categories" : [ "user/03731433422213343819/state/com.google/read", "user/03731433422213343819/state/com.google/starred", "115网盘" ], "title" : "第一财经周刊:115网盘找出路", "published" : 1362641540, "updated" : 1362641540, "alternate" : [ { "href" : "http://www.cnbeta.com/articles/228860.htm", "type" : "text/html" } ], "summary" : { "direction" : "ltr", "content" : "当115网盘在去年8月突然关闭了其网盘产品的大众分享功能后,赖霖枫和他的公司不出意外地招来了一片骂声。<span style=\"font-weight:bold\">“确实是改变分享,直接就把分享弄没了。”一名用户当时在115网盘贴吧里写道,而“改变分享”正是115网盘之前的口号。</span><img width=\"1\" height=\"1\" src=\"http://cnbeta.feedsportal.com/c/34306/f/624776/s/294afa0a/mf.gif\" border=\"0\"><div><table border=\"0\"><tr><td valign=\"middle\"><a href=\"http://share.feedsportal.com/viral/sendEmail.cfm?lang=en&title=%E7%AC%AC%E4%B8%80%E8%B4%A2%E7%BB%8F%E5%91%A8%E5%88%8A%EF%BC%9A115%E7%BD%91%E7%9B%98%E6%89%BE%E5%87%BA%E8%B7%AF&link=http%3A%2F%2Fwww.cnbeta.com%2Farticles%2F228860.htm\"><img src=\"http://res3.feedsportal.com/images/emailthis2.gif\" border=\"0\"></a></td><td valign=\"middle\"><a href=\"http://res.feedsportal.com/viral/bookmark.cfm?title=%E7%AC%AC%E4%B8%80%E8%B4%A2%E7%BB%8F%E5%91%A8%E5%88%8A%EF%BC%9A115%E7%BD%91%E7%9B%98%E6%89%BE%E5%87%BA%E8%B7%AF&link=http%3A%2F%2Fwww.cnbeta.com%2Farticles%2F228860.htm\"><img src=\"http://res3.feedsportal.com/images/bookmark.gif\" border=\"0\"></a></td></tr></table></div><br><br><a href=\"http://da.feedsportal.com/r/159490588942/u/31/f/624776/c/34306/s/294afa0a/a2.htm\"><img src=\"http://da.feedsportal.com/r/159490588942/u/31/f/624776/c/34306/s/294afa0a/a2.img\" border=\"0\"></a><img width=\"1\" height=\"1\" src=\"http://pi.feedsportal.com/r/159490588942/u/31/f/624776/c/34306/s/294afa0a/a2t.img\" border=\"0\">" }, "comments" : [ ], "annotations" : [ ], "origin" : { "streamId" : "feed/http://www.cnbeta.com/backend.php", "title" : "cnBeta.COM", "htmlUrl" : "http://www.cnbeta.com" } }] }]; n=objs[0].items.length; alert(n); for (var i=0;i<n;i++) { //document.write("<a href=\""+objs[0].items[i].alternate[0].href +"\">"+objs[0].items[i].title+ "</a><br>"); //上面的js生成代码不在html源文件中(网页另存无法解决问题),因此上面的写法无法得到html格式代码,下面的写法将js结果输入到一个文本框,手工复制出来放到html文件的<body>标签内即可 document.getElementById("aa").innerHTML=document.getElementById("aa").innerHTML+"<a href=\""+objs[0].items[i].alternate[0].href +"\">"+objs[0].items[i].title+ "</a><br>"; } </script> </BODY> </HTML>
最终我们得到界面文本框中<a target=”_blank” href=”https://blog.galois21.com/privacy/Jump_ExternalUrl.php?url=http://www.cnbeta.com/articles/228860.htm“>第一财经周刊:115网盘找出路</a><br>即为IE方便识别的代码,我们手工复制出来放到html文件的<body>标签内即可,然后用IE的收藏夹导入功能:“从文件中导入”——“收藏夹”即可完工。
代码参考:JS 解析 JSON 及 XML js读取json数据
代码优化
上面基本可以满足要求,但是如何让这个脚本更加通用,比如,让js自动读取.json文件,这个有难度,但由于js语言本身限制,下面操作就变得比较繁琐,提高也不大,仅做研究。
js读取jason文件:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <TITLE>读取json文件</TITLE> </head> <BODY> <textarea id="aa" rows="30" cols="120"> </textarea> <script language="javascript"> var fso, ts, s ; var ForReading = 1; fso = new ActiveXObject("Scripting.FileSystemObject"); ts = fso.OpenTextFile("starred.json", ForReading); //s = ts.ReadLine(); s = ts.ReadAll(); document.getElementById("aa").innerHTML=s; </script> </BODY> </HTML>
缺点:
- 只支持IE
- 必须弹出提示才能执行
- json中含有中文的话,会出现乱码
参考:
- js读取txt文件 http://wenku.baidu.com/view/8c42d3096c85ec3a87c2c57d.html
- javaScript中利用ActiveXObject来创建FileSystemObject操作文件 http://hi.baidu.com/sinber/item/1d2cffef074ea5c2baf37d45
- FileSystemObject http://baike.baidu.com/view/347454.htm
- OpenTextFile http://baike.baidu.com/view/1229955.htm
- TextStream http://baike.baidu.com/view/597215.htm
如何把收藏夹中网址对应的网页批量下载下来(离线阅览)
可以使用网文快捕(CyberArticle),免费版的功能基本够用。网文快捕(CyberArticle)的作者提供了一个js脚本,可以下载,试试,但是自测有时可能会不奏效。
个人推荐一种简单方法:
- 将IE收藏夹导出为html文件
- 浏览器打开bookmark.htm,全选页面,复制。
- 打开网文快捕(CyberArticle)安装目录下的BookBuilder.exe(一般为C:\Program Files (x86)\WizBrother\CyberArticle),“添加任务”——“从剪切板文字添加链接”,即可导入收藏夹所有任务,下载即可。
PS:其实直接跳过第2步,“添加任务”——“从html文件中添加链接”,也可以,但是因为不同浏览器导入的html编码不一致,有时候标题会出现乱码。
windows的cmd命令行,整理成可执…