如何将google reader导出的json文件数据批量导入收藏夹

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&amp;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&amp;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&amp;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=”http://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>

缺点:

  1. 只支持IE
  2. 必须弹出提示才能执行
  3. json中含有中文的话,会出现乱码

参考:

如何把收藏夹中网址对应的网页批量下载下来(离线阅览)

可以使用网文快捕(CyberArticle),免费版的功能基本够用。网文快捕(CyberArticle)的作者提供了一个js脚本,可以下载,试试,但是自测有时可能会不奏效。

个人推荐一种简单方法:

  1. 将IE收藏夹导出为html文件
  2. 浏览器打开bookmark.htm,全选页面,复制
  3. 打开网文快捕(CyberArticle)安装目录下的BookBuilder.exe(一般为C:\Program Files (x86)\WizBrother\CyberArticle),“添加任务”——“从剪切板文字添加链接”,即可导入收藏夹所有任务,下载即可。

PS:其实直接跳过第2步,“添加任务”——“从html文件中添加链接”,也可以,但是因为不同浏览器导入的html编码不一致,有时候标题会出现乱码。

 

浏览量(1200) | 此条目发表在计算机分类目录,贴了, 标签。将固定链接加入收藏夹。