2012年9月13日星期四

使用非官方Google API

最近一直有往论坛灌水的行为,一般都是从google reader上转载
久而久之就有点腻,心想,如果能直接抓取我想要的内容该多好啊
于是就转而搜索起这方面的文章了,本文是找到的第一篇好文,呵呵
业余时间一直在做RSS新闻的Filter,不过这个也是进行的拖拖拉拉有很长时间了。之前很长一段时间有很大的功夫花费在写爬虫、写 Parser,RSS的协议虽然不是很多,不过也有点五花八门,Atom两个,RSS3个还有RDF的。后来有一天注意到Google Reader也提供RSS feed,当时很奇怪,他再提供feeds能干吗呢?查了查Google Reader API,官方始终没有正式版本,不过已经有很多Google Reader API的分析文档,很全,很强大。

于是,爬虫简单了,parser简单了,我不用去管那么多种类的rss协议了,我只要去抓Google Reader就好了,保证数据源及时量又足而且爬来的速度很快。以前一个有个问题就是假如你有200个feed要去爬,五个线程,桌面程序去爬,没有个 30分钟基本是爬不完,现在好了~~推荐写Feed Aggregator实验或者应用的同学使用,呵呵。


具体的API分析可以参考这里:http://code.google.com/p/pyrfeed/wiki/GoogleReaderAPI
Google Reader是个非常有意思的项目,同样一个逆向分析API的 文章中写道,他们是先有的Google Feed API,才在这套API上搭建的Google Reader的,该文章下面有GR的工程师确认正确,并表示会很快发布正式API,可惜这篇文章是2005年底的,至今也未见GR有正式的动作。不过据说 变动不大,而没有能发布的主要问题是认证问题。

现在使用Google Service的认证开发上很简单,每个用户会有一个20位的ID,而这个ID跟你的Profile等信息ID没有关系。经常使用GR的人可能会发现地址 栏中经常出现一大串数字,那个就可能是你的User ID了。登录很简单,认证过程也很简单,必须使用POST请求发送用户名、密码和要使用的服务到https://www.google.com /accounts/ClientLogin,请求一个Session ID,这个Session ID代表着你这次登录状态一直有效,直到你退出。之后使用API的命令基本都要使用这个Session ID,Google的服务会检查请求中是否有这个cookie。

所以,为了使用GR API,确定你使用的语言或者库支持HTTP客户端、支持GET和POST、支持Cookie、支持HTTPS连接。但并不是有了这个Session ID就够了,某些操作还需要单独请求一个Token,而这个Token会定时失效的,即便是在登录状态,失效了之后可以再请求新的Token。其实大部分 的认证基本上都是这个过程,不过有的服务还多了一步授权,比如Flickr或者豆瓣(OAuth是不是也需要授权)。

GR的数据格式基本上是兼容Atom的,应该是已经兼容Atom 1.0的了。不过还加上了GR自己的namespace,有挺多有意思的数据在协议里面。比如现在你可以在GR上分享文章,协议类似于<link rel=”via” …>,而对于最近在文章上加Note的,使用的是<gr:annotation>,这些都是新加上去的,业余时间里分析这些报文,查找 新feature对应数据上的变化是非常有趣的。
我现在想做的是基于GR的API提取数据实验自己想做的一些Filter,目的是看看能否对于减轻阅读压力有所帮助。本着分享很COOL的精神,把 自己做这些的细节记录下来应该能够帮助自己坚持做下去,:)。目前GR API读取部分已经做完了,后面还需要做设置不同状态(比如标志为已读,Share)等primitive操作。

PS: 有一个使用GR API的Firefox扩展很cool,叫Feedly, 貌似网站被。。。了。有很多Feature很cool,借助于Firefox和现代计算机的强大,后台技术很少,据说有万(或者十万)行的JS代码,用来 加载Google Reader、FriendFeed、Twitter,把新闻阅读同好友评论推荐融合在一起,并改变新闻阅读的体验,一上来就好像是杂志或者报纸一样……

PS2:跟Aza和Dan简单的问了一下关于如何设计RSS的问题,基本上他们的意见是NO Rss才能解决rss的问题,就好像我们使用铁锹,我们都过于关注铁锹,注意他使用什么金属,使用什么样的把手,但其实根本问题是,用户需要的是一个 hole。

而Dan说了一点也让我感觉挺深刻的,为什么要把RSS reader做成stream形式的,他不是stream,而是data,他更喜欢像报纸那样的阅读体验,我今天没看完,明天我还可以看今天的报纸,我还 可以接着看……Mozilla Labs里面有几个项目利用了rss而且就是这种no rss的理念设计的,有Ambient News,还有Firefox 3.1中全新的New Tab操作(这个还是概念),不过Aza说很快就应该有prototype出来了。

没有评论:

发表评论