Posts Tagged ‘豆花’

豆瓣API会何去何从?

Saturday, April 3rd, 2010

今日和@jimeyTwittter上就豆瓣的API有一番小小的讨论,记录一下:

@jimey: 其实豆瓣把api放开给大家开发软件来做豆瓣的应用,来卖,也可以赚钱啊
@genedna: 你会为豆瓣的应用付费么?RT @jimey: 其实豆瓣把api放开给大家开发软件来做豆瓣的应用,来卖,也可以赚钱啊
@jimey: @genedna 10块钱我愿意啊.比如弄个同步twitter消息到豆瓣的.虽然我代码也好了.就是那个crontab路径有点烦.但是10块钱的话我愿意出
@genedna: @jimey cron的问题可以用GAE解决,不过总是有request limited的问题。不知道其它豆瓣的用户会怎么看这个问题,如果是我也会花钱买服务的。
@jimey: @genedna 恩.我是本地24×7的linux服务器在玩.自己申请了个api自己在玩自己的账号.豆瓣好像给的api是有request限制的.所以大规模推广估计还是不行.得看豆瓣自己怎么改了.
@genedna: @jimey 豆瓣有白名单的,可以申请的。
@jimey: @genedna 我只是给一个豆瓣的发展建议.呵呵 不过纯粹是我个人想法,但是itunes store给人的冲击和影响力真的很巨大.呵呵 我是没啥特别想去做这个事情了.至少目前没啥时间 – - 也许以后有机会会去尝试下.你去跟豆瓣那边人沟通下呗?
@genedna: @jimey 我想豆瓣也希望能有这样的发展,目前看整体的环境还不行,开发者如果靠卖应用来赚钱,豆瓣提供的API还够不上一个平台。如果把各种WEB 2.0应用提供的API组合在一起,也许还勉强可以。可惜Google等任何一个有价值的应用都被墙了,不知道淘宝的API怎么样。
@jimey: @genedna 最好的就是豆瓣自己搭建一个类似Google的GAE平台,不过这事新浪在做了.豆瓣比较有潜力原因我觉得 1.各种音像数据.2.用户评价.3.小组讨论 尤其是第3点,如果能够做一款参与小组讨论,类似于twitter一样的概念+小组讨论回复调用的程序也不错
@genedna: @jimey 那是很好,可惜没有听过类似的计划。豆瓣的开发人员没有新浪多,估计应付不过来类似的系统。

在国内做API的开发者确实很难,对最终用户有价值的互联网应用和API无不被“墙”,从Google、Flickr到Twitter无一不需要翻“墙”,想利用豆瓣API和其它的API结合做点有特色的应用提供给普通用户的想法就此可以放弃了。豆瓣在如此环境能生存至今,确也是个奇迹了。

豆瓣对API的发展应该有自己的规划,但是很多核心的业务一直都没有通过API开放出来。影音书的评论功能和小组的功能一直都是很多开发者期望的,是不是豆瓣担心API会削弱用户的黏度而没有开放出来呢?到底API的发展如何,豆瓣也没有发过Roadmap让开发者明确了解。开发者没有办法通过开发豆瓣的应用来获利,使得豆瓣API在业务层面不能形成一个平台,国内也就只有财大气粗的淘宝开放平台还是个样子了。

如果豆瓣的API做的像Facebook API那样在页面内部嵌入应用和游戏就好了,那我就先弄个随机视频聊天的应用嵌入进去,哈哈~

ActionScript For OAuth Step By Step

Tuesday, January 12th, 2010

OAuth协 议是现在众多网站提供API服务所选择的认证方式,是由Blaine Cook、Chris Messina、Larry Halff 及David Recordon共同发起,目的是为API服务提供一个安全、统一和开放的标准。众多知名的互联网公司选择了OAuth协议,如:Twitter、 Google和MySpace等;或者采用类似的认证方式,如flickr等。

Twitter.com的API在初期使用了Basic Auth的认证方 式,第三方应用只要把用户名和密码进行BASE64加密,加入到HTTP的Header中就可以使用访问受限资源的API。随着用户和第三方应用越来越 多,把用户名和密码交给第三方应用的方式越来越不安全;如果修改了密码,要在众多的第三方程序间同步密码也变得非常麻烦。最终Twitter的开发团队终 于下决心采用OAuth协议对第三方应用进行授权,用户可以随时在设置里取消授权,就算修改了密码也不必为修改授权应用的密码操心。因为OAuth协议的 安全性和可靠性,在当今流行的网络服务提供商中绝大多数选择了它。

Google也是OAuth的支持者,同时Google的DeWitt Clinton也为OAuth开发做出了巨大的贡献。我们用Google的OAuth Diagram来解释一下OAuth协议的流程。

Web Application是指我们开发的第三方应用(在下面的讲解中我们假设开发了一个访问Google日历的Flash Application),Google Account Authentication指Google的认证服务(这里可以简单的理解为是OAuth认证服务器),Google Service Access指Google提供的API服务(下面的讲解中用Google Calendar Service来替代)。当用户使用我们假设的Flash应用访问Google日历时,需要通过OAuth协议来进行授权:

  • 首先Flash应用会访问Google OAuth认证服务,获取一个Request Token。
  • 从Google OAuth认证服务返回一个未授权的Request Token和对应的Request Token Secret。
  • Flash应用继续访问Google OAuth认证服务,要求对未授权的Request Token进行授权。
  • 如果用户已经登录了Google,会被重定向到一个请求授权页面。
  • 用户对应用进行授权。
  • 从Google OAuth认证服务返回已授权的Request Token和对应的Request Token Secret。
  • 用已授权的Request Token和对应的Request Token Secret在Google OAuth服务换取Access Token。
  • 从Google OAuth认证服务返回Access Token和对应的Access Token Secret。
  • 使用Access Token和对应的Access Token Secret访问Google Calendar服务。
  • 从Google Calendar返回用户的日历数据。
  • 在Twitter的众第三方多应用中,AIR类占了很大比例。其中最知名的就是Twhirl了,可惜的是它目前还不支持OAuth认证。要想为Twhirl加入OAuth其实很容易,看完下面的例子你也可以轻松做到。

    下面选择豆瓣的API为例,说明如何使用ActionScript 3开发基于OAuth认证的程序。示例程序可以在Google Code找到,在那里还有其它语言的OAuth例子。程序使用了一个OAuth的ActionScript 3类库,地址是 http://code.google.com/p/oauth-as3/,由于在OAuth的认证过程中需要HMAC-SHA1加密,所以程序还导入了一个加密功能的ActionScript 3类库,地址是 http://code.google.com/p/as3crypto/ 。

    首先要在豆瓣注册一个应用,会得到豆瓣分配的Key和Secret Key。代码里面先把Key、Secret Key和豆瓣的OAuth Service地址定义为常量。

    private static var DOUBAN_KEY : String = "xxxxxxxxxxxx";
    private static var DOUBAN_SECRET_KEY : String = "xxxxxxxxx";
     
    private static var DOUBAN_REQUEST : String =
            "http://www.douban.com/service/auth/request_token";
    private static var DOUBAN_AUTHORIZE : String =
            "http://www.douban.com/service/auth/authorize";
    private static var DOUBAN_ACCESS_TOKEN : String =
            "http://www.douban.com/service/auth/access_token";

    然后参照上图 流程1 编写一个获取Request Token访问地址的函数。

    /**
    * 生成获取Request Token的URL
    */
    private function generalDoubanRequestTokenURL() : String
    {
        var oauth : OAuthRequest = new OAuthRequest("GET", DOUBAN_REQUEST);
        oauth.consumer = new OAuthConsumer(DOUBAN_KEY, DOUBAN_SECRET_KEY);
        return oauth.buildRequest(new OAuthSignatureMethod_HMAC_SHA1(),
                            OAuthRequest.RESULT_TYPE_URL_STRING);
    }

    调用这个函数会生成一个URL地址,把这个地址复制到浏览器里进行访问,会在页面中看到如下的显示:

    oauth_token=abcde&oauth_token_secret=fghil

    这两个参数的值就是未授权的Request Token和Request Token Secret。根据 流程3 对Request Token的进行授权的访问地址是
    http://www.douban.com/service/auth/authorize?oauth_token=abcde
    在浏览器里面输入这个地址后,就会进入到豆瓣的授权页面,如果用户还没有登录会先重定向到登录页面。

    用户对应用进行授权后,需要根据 流程7 换取Access Token。
    下面编写了一个函数生成换取Access Token访问地址的函数。

    /**
    * 生成换取Access Token使用的URL。
    */
    private function generalDoubanAccessTokenURL() : String
    {
        var oauth : OAuthRequest = new OAuthRequest("GET", DOUBAN_ACCESS_TOKEN);
        oauth.consumer = new OAuthConsumer(DOUBAN_KEY, DOUBAN_SECRET_KEY);
        oauth.token = new OAuthToken('abcde', 'fghil');
        return oauth.buildRequest(new OAuthSignatureMethod_HMAC_SHA1(),
                      OAuthRequest.RESULT_TYPE_URL_STRING);
    }

    将上面函数生成的地址复制到浏览器后访问,会在页面中看到如下的显示:

    oauth_token=abcdww&oauth_token_secret=daseccs

    这次得到的就是访问受限资源的Access Token和Access Token Secret了,使用这两个参数就可以生成访问豆瓣受限资源的URL了。

    /**
    * General Access douban.com's resource url
    */
    private function generalPostURL(res:String, params:Object = null):String
    {
        var oauth : OAuthRequest = new OAuthRequest('POST', res);
        oauth.consumer = new OAuthConsumer(DOUBAN_KEY, DOUBAN_SECRET_KEY);
        oauth.token = new OAuthToken(‘abcdww’, ‘daseccs’);
        return oauth.buildRequest(new OAuthSignatureMethod_HMAC_SHA1(),
                          OAuthRequest.RESULT_TYPE_URL_STRING);
    }

    访问的受限资源范围是根据授权用户的权限所限定的,授权用户无权访问的数据,第三方应用也无法访问。

    上面的代码中,OAuth的ActionScript 3类库帮助我们封装了很多细节,很容易地实现了OAuth协议的授权。把其中豆瓣OAuth服务地址替换成Twitter OAuth服务地址,就可以生成访问Twitter的OAuth程序。这些代码很容易运用到Flex/AIR的程序里,开发类似twhirl这样的第三方应用也变得简单了。

    Google Reader 恢复博客数据

    Tuesday, January 12th, 2010

    今天在用Google Reader的时候,无意中发现Google Reader会缓存用户share的内容。顺着这些保存找到了自己在“杯具”以前的很多文章,其中几篇为RIAMeeting.cn写的都找到了,让人激动不已。把这些文章都拷贝到wordpress后台,作为Draft慢慢整理。其中有些介绍技术变化的就不再贴出来了,有价值的内容将重新整理或许加入新内容后发布。图片都还保存在Flickr.com上,但是国内访问Flickr又有问题了。不过我还会继续用Link的方式加入图片,觉得在wordpress后台上传的方式不容易备份。

    激动之余发现新建的“豆花“没有内容就有两条评论,都是“豆花”的需求者留下的,想想自己最近忙于工作和照顾家人,代码的进度很慢。最近刚刚完成了接收豆邮的部分,发送的部分还没有做。真不知道发布测试版本是什么时候了,真是掩面难以面对豆瓣的用户,哎~~

    在用了dreamhost的托管服务,对Web Hosting和VPS有了很大的兴趣。虽然Amazon EC2服务稳定速度快,但是价格太高,现在开始慢慢研究VPS和这些服务的提供商,关注他们的打折信息。关注的VPS首先是流量要充足,要支持部署OpenVPN服务;其次是速度要快;再次要稳定,不能没有多久就宕掉;当然另一个重要信息就是便宜。dreamhost的VPS不便宜,RAM 150M的要15美金/月。和它的Web Hosting一样没有流量和硬盘限制,准备咨询一下客服关于OpenVPN详细情况。至少现在用dreamhost的Web Hosting觉得还不错,让我对dreamhost有些好印象。在没有完成文章之前,就收到了客服的回答,说可以安装OpenVPN。如果有个Promo Code能将费用降低到每月5美金,不限流量应该还是很有吸引力的。但是这个VPS如果不测试一下,确实不知道其效果如何,等找到有实际使用的使用报告后再说吧,还有就是第一个星期的VPS是免费的。

    发布一个dreamhost的Web Hosting Promo Code:DOUHUA。有一个独立IP,1年或2年付的优惠67美金。

    豆瓣恢复了’我说’功能

    Sunday, October 25th, 2009

    今天忽然发现豆瓣恢复了’我说’的功能,这真是我的一大’杯具’。我刚刚把Amazon EC2服务停掉还没有到一个星期的时间它就恢复了,还搞得把以前博客的数据丢失,’杯具’中的’杯具’。豆花以前的版本已经不再提供下载了,准备重起炉灶另开工,打造一个简洁、开源版本的豆花。

    决定在这个版本就开始做支持Twitter账户,而且最主要的是支持API Proxy的功能。不支持API Proxy的客户端,在国内是没有市场的,最好能做出个一键自动部署出来一个Google App Engine的API Proxy就好了。这个功能也许能参照GAE的Launcher做出来,不知道这个Launcher是不是OpenSource的。如果能做出P2P的客户端就好了,这样就不怕API Proxy被Block带来的问题。豆瓣API变化不大,新功能上挖掘不出来什么东西。

    Flex 4的Spark风格默认看上去就很简洁了,应该能满足我的需求了。以前请依树(@coletree)设计的客户端是挺好看的,但是实现上给我带来了很多的工作量。这次先努力实现功能,有一定反馈后再套到设计里面。也许Flash Catalyst的会带来便利,虽然目前我还没有成功的用它弄出点东西来。