2010年4月23日星期五

谷歌手机地图支持中文语音搜索

  距Google黑板报报道,早前,Google已经针对Android和黑莓智能手机用户推出了包含语音功能的谷歌地图服务。现在,使用Symbian S60和Windows Mobile操作系统的智能手机用户终于也能够体验Google地图的语音搜索了。

  早先,诺基亚S60V3机型的用户已经可以通过“谷歌手机软件”使用网页和图片的中文语音搜索服务,但是无法进行“谷歌地图”的中文语音搜索,现在,最新版的手机谷歌地图4.1版开始支持语音搜索,用户直接对着手机说话即可进行中文地图搜索,无需输入地址和搜索条目。

  谷歌手机地图的语音搜索支持Symbian S60和Windows Mobile手机。除了添加语音查询功能之外,谷歌地图4.1移动版的设置页面中还包含语言选择选项。

  移动版的谷歌地图手机下载地址 m.google.com/maps

2010年4月21日星期三

Google Buzz:机器人的世界

  据社交媒体调查公司PostRank的报道,Google Buzz大约有九成的内容都是通过机器人自动推送的信息,这让Google Buzz的前景看起来相当迷茫。

  该公司表示,有62.57%的Buzz内容来自于Twitter,通过RSS Feeds自动发布新闻和报道的网站内容占据了Buzz内容的26.47%,两者之和接近Google Buzz内容的九成。

  这也是我以前曾经对Buzz表示忧虑的地方,Buzz的各项功能都完全克隆FriendFeed,但实践证明FriendFeed模式完全无法和Twitter相匹敌,用户在上面绑定信息后就再也不登录了,而是继续上Twitter发布信息,现在,Buzz正在重复Friendfeed的失败之路,并且没有从中获取任何经验教训。

  Google的用户量、实时搜索技术都是非常优秀的,Google Buzz也有非常好的用户讨论体验,在上面讨论话题感觉非常不错,但目前Buzz上的垃圾信息实在太多,大部分信息都是由机器人自动发布的,同时Google也没有在信息过滤上解决这个问题,带来的问题就是非常严重的信息过载,这必然让用户访问Buzz的意愿降低,谁愿意把时间都浪费在机器人的海洋上呢?讨论的确是Buzz的强项,但总归要有人来讨论才行,而不是全是机器人。人们上Twitter是因为可以和“真实的人”进行互动交流,获得更多的信息,而不像Buzz这样的嘈杂的广场,有用的信息会被立刻淹没在信息海洋之中。

Google Buzz:机器人的世界

  解决Google Buzz这个问题的方法其实也不难,一种方法是过滤,让用户可以选择只看从Buzz发布的信息,不看自动推送的信息;另一种方法更简单,就是停止从Twitter和Feed上的同步信息到Buzz,这样虽然减少了Buzz的信息总量,但能提高Buzz上的有效信息。

  Google以前从来没有成功的运营过任何一款社会化产品,从Orkut到Jaiku,都是以失败而告终,从这次运营Buzz的现状看,很难对Buzz的未来表示乐观,或许Google的确不知道如何运营一个社会化产品。

  总之,在我看来,如果Buzz再不改变现状,那么这个很有特色的社会化交互性工具将无可避免将走向失败之路。

Twitter API中文文档

  目前的国内的微博客很多,不少微博客都提供Open API,然而,很多微博提供的API和Twitter的API有一些或多或少的差别,调用格式上并不完全相同。

  我建议所有提供API的微博客系统,都将各自的API统一为Twitter的API调用格式,例如目前较有影响的开源微博系统StatusNet(Laconica)的API格式就完全兼容Twitter,这种统一API对于开发者和用户都有很大的好处。对于开发者,针对某一个微博的应用可以快速移植到另一个微博,节省开发时间。对于用户,用户可以自定义客户端应用程序,只要换一下API地址,就能使用同一个应用程序,来访问各个不同的微博。例如目前很多人通过StatusNet的客户端来访问Twitter一样,使用起来很方便。

  Twitter的API具体是什么格式的呢?根据Twitter API文档和新浪微博开放平台的文档,这里提供了一个Twitter API的中文翻译文档,供开发者们参考。

Twitter

 

Twitter开放API文档

 

  Twitter通过API的方式开放一些应用接口,这篇文档用来介绍Twitter目前开放的接口,为希望开发基于Twitter服务扩展的工具或应用的开发人员提供技术和文档服务。

  认证

  除了部分API(如:公共时间线 ( public timeline ) )外,所有的API方法都必须要求用户认证,所有的返回都与认证用户相关。例如,尝试获取一个设置为私密的且不是您的好友的用户信息时,将会返回失败状态。

  Twitter目前仅支持HTTP Basic Authentication验证机制。当使用HTTP Basic Authentication时,请使用您在Twitter注册的“用户名”作为Session或Cookie的“用户名”部分的内容。

  多状态[RESTFull]结果传输

  Twitter API力求根据用户特定的请求返回对应特定格式的数据,您可以发现我们提供的API中有一个重要的便利之处,通过简单的更改URI中的文件后缀名,您可以获得您想要的返回结果的格式,这篇文档中将说明每个方法中有哪些格式可以用。

  Twitter目前支持以下的四种数据返回格式:XMLJSONRSS、Atom,您可以在每次请求时使用不同的请求方法指定不同的返回结果。

  参数

  一些API接受可选和必须的参数,当参数可用时,我们会在接下来的文档中提到这些参数。注意:当传送复杂字串时,请一定先将字串编码为UTF-8格式,并再做一次URL编码 ( Encode )。

  HTTP请求

  除非特意指明,Twitter的开放API通过HTTP GET方式的调用,需要提交信息或传送私密消息时使用POST方法。

  以下将说明API返回的信息格式的组成,一些API将返回与用户请求“内容”相关的信息,而有一些将返回与客户端发送的“HTTP头信息”相关的一些信息。例如,多数支持since参数的方法,同样会对HTTP头中的If-Modified-Since这个 HTTP头 感兴趣。需要注意的是,当某些行为既可以通过参数又可以通过HTTP头进行控制时,优先接受通过参数方式设定的值。

  当请求返回数据时,返回数据的编码统一为UTF-8格式,且我们会将一些外部符号编码为HTML实体(&#number; 或&text)格式。

  限制

  每一个客户端每小时最多允许150次请求。

  HTTP状态码

  Twitter API会对每次请求返回合适的HTTP状态。例如,当请求一个不存在的用户信息时,API会返回404 Not Found;当一次请求没有被认证并授权时,API会返回401 Not Authorized状态。 

  使用API的简便方法

  如果您的系统安装有curl,您已经有了一个非常强大的使用微博 API的工具。以下是使用curl的例子,非常简单: 

  非授权情况下访问public_timeline: curl http://api.twitter.com/statuses/public_timeline.xml

  获取朋友的timeline, 使用认证: curl -u email:password http://api.twitter.com/statuses/friends_timeline.xml

  仅获取头部信息: curl --head email:password http://api.twitter.com/statuses/friends_timeline.json

  用户状态相关方法

  statuses/public_timeline

  返回未设置私密的用户 ( 必须有自定义的用户头像 ) 的最近20条消息,该方法不需要身份认证。

  访问地址:http://api.twitter.com/statuses/public_timeline.format

  支持格式(format)xml, json, rss, atom

  参数列表:

  无。

  statuses/friends_timeline

  返回最近24小时内的最新的20条认证用户及其好友更新的消息。

  访问地址http://api.twitter.com/statuses/friends_timeline.format

  支持格式 ( format ) :xml, json, rss, atom

  参数列表:

  since_id: 可选参数(微博信息ID). 只返回ID比since_id大(比since_id时间晚的)的微博信息内容。

  示例: http://api.twitter.com/statuses/friends_timeline.xml?since_id=12345

  max_id: 可选参数(微博信息ID). 返回ID不大于max_id的微博信息内容。

  示例: http://api.twitter.com/statuses/friends_timeline.xml?max_id=54321

  count: 可选参数. 每次返回的最大记录数,不能超过200,默认20.

  示例: http://api.twitter.com/statuses/friends_timeline.xml?count=5

  page: 可选参数. 返回结果的页序号。注意:有分页限制。根据用户关注对象发表的数量,通常最多返回1,000条最新微博分页内容, 默认1

  示例: http://api.twitter.com/statuses/friends_timeline.xml?page=3

  statuses/user_timeline

  返回认证用户最近24小时内最新更新的20条消息,同样,通过给定userIdOrName参数,可以用来请求其他用户的最近的消息更新。该API可以不认证。

  访问地址http://api.twitter.com/statuses/user_timeline.format

  支持格式 ( format ):xml, json, rss, atom

  参数列表

  id: 可选参数. 根据指定用户UID或微博昵称来返回微博信息。

  示例: http://api.twitter.com/statuses/user_timeline/12345.xml

  user_id: 可选参数. 用户UID,主要是用来区分用户UID跟微博昵称一样,产生歧义的时候,特别是在微博昵称为数字导致和用户Uid发生歧义。

  示例: http://api.twitter.com/statuses/user_timeline.xml?user_id=1401881

  screen_name:可选参数.微博昵称,主要是用来区分用户UID跟微博昵称一样,产生歧义的时候。

  示例: http://api.twitter.com/statuses/user_timeline.xml?screen_name=101010

  since_id:可选参数(微博信息ID). 只返回ID比since_id大(比since_id时间晚的)的微博信息内容

  示例: http://api.twitter.com/statuses/user_timeline.xml?since_id=12345

  max_id: 可选参数(微博信息ID). 返回ID不大于max_id的微博信息内容。

  示例: Example: http://api.twitter.com/statuses/user_timeline.xml?max_id=54321

  count: 可选参数. 每次返回的最大记录数,最多返回200条,默认20。

  示例: http://api.twitter.com/statuses/user_timeline.xml?count=200

  page: 可选参数. 分页返回。注意:最多返回200条分页内容。

  示例: http://api.twitter.com/statuses/user_timeline.xml?page=3

  statuses/mentions

  显示20条最近的对用户的回复消息, ( 消息前缀为 @username ) 。该API只开放给认证用户,请求其他用户的收到的回复消息列表是非法的,无论其他用户设置私密与否。

  访问地址:http://api.twitter.com/statuses/replies.format

  支持格式 ( format ) :xml, json, rss, atom

  参数列表

  since_id. 可选参数. 返回ID比数值since_id大(比since_id时间晚的)的提到。

  示例: http://api.twitter.com/statuses/mentions.xml?since_id=12345

  max_id. 可选参数. 返回ID不大于max_id(时间不晚于max_id)的提到。

  示例: http://api.twitter.com/statuses/mentions.xml?max_id=54321

  count. 可选参数. 每次返回的最大记录数(即页面大小),不大于200,默认为20。

  示例: http://api.twitter.com/statuses/mentions.xml?count=200

  page. 可选参数. 返回结果的页序号。注意:有分页限制。

  示例: http://api.twitter.com/statuses/mentions.xml?page=3

  用户消息相关方法

  statuses/show

  返回指定Id的一条消息,返回信息中包含作者信息。

  访问地址:http://api.twitter.com/statuses/show/id.format或者

  http://api.twitter.com/statuses/show.format?id={id}

  支持格式 ( format ) :xml, json

  参数列表:

  id. 必须参数(微博信息ID),要获取已发表的微博ID,如ID不存在返回空

  示例: http://api.twitter.com/statuses/show/142277.xml

  statuses/update

  更新认证用户的消息,必须包含content参数,且必须以POST方式请求。 成功时按指定格式返回当前的消息。

  访问地址:http://api.twitter.com/statuses/update.format

  支持格式 ( format ):xml, json

  参数列表:

  status. 必填参数, 要更新的微博信息。必须做URLEncode,信息内容部超过140个汉字,为空返回400错误。

  in_reply_to_status_id. 可选参数,@ 需要回复的微博信息ID, 这个参数只有在微博内容以 @username 开头才有意义。

  lat. 可选参数,纬度,发表当前微博所在的地理位置,有效范围 -90.0到+90.0, +表示北纬。只有用户设置中geo_enabled=true时候地理位置才有效。

  long. 可选参数,经度。有效范围-180.0到+180.0, +表示东经。

  statuses/destroy

  根据指定的id删除一条消息,认证用户必须是消息的作者。

  访问地址:http://api.twitter.com/statuses/destroy/id.format

  支持格式 ( format ) :xml, json

  参数列表:

  id 必须,待删除的消息Id, 例如:

  http://api.twitter.com/statuses/destroy/12345.json

  或者

  http://api.twitter.com/statuses/destroy.xml?id=23456

  用户操作接口

  users/show

  显示指定用户的扩展信息,需要给定用户的id或显示名称。扩展信息包括用户的页面设置、微博次数等,因此第三方应用的开发者可以根据这些信息为用户提供合适的主题。

  注意:本API调用请求必须发自合法微博用户,不论请求自己/他人的扩展信息。

  访问地址:http://api.twitter.com/users/show.format

  支持格式 ( format ):xml, json

  参数列表:

  id. 用户UID或微博昵称。

  示例: http://api.twitter.com/users/show/12345.json 或 http://api.twitter.com/users/show/bob.xml

  user_id. 指定用户UID,主要是用来区分用户UID跟微博昵称一样,产生歧义的时候,特别是在用户账号为数字导致和用户Uid发生歧义。

  示例: http://api.twitter.com/users/show.xml?user_id=1401881

  screen_name. 指定微博昵称,主要是用来区分用户UID跟微博昵称一样,产生歧义的时候。

  示例: http://api.twitter.com/users/show.xml?screen_name=101010

  statuses/friends

  返回认证用户的朋友列表,内含每个用户的当前微博信息。这个方法同样可以用来请求其他用户的朋友列表,通过下面指明的方法传递id参数。

  访问地址:http://api.twitter.com/statuses/friends.format

  支持格式 ( format ):xml, json

  参数列表:

  id. 选填参数. 要获取的 UID或微博昵称

  示例: http://api.twitter.com/statuses/friends/12345.json

  http://api.twitter.com/statuses/friends/12345.xml

  user_id. 选填参数. 要获取的UID

  示例: http://api.twitter.com/statuses/friends.xml?user_id=1401881

  screen_name. 选填参数. 要获取的微博昵称

  示例: http://api.twitter.com/statuses/friends.xml?screen_name=101010

  cursor. 选填参数. 单页只能包含100个关注列表,为了获取更多则cursor默认从-1开始,通过增加或减少cursor来获取更多, 如果没有下一页,则next_cursor返回0

  的关注列表

  示例: http://api.twitter.com/statuses/friends/williamlong.xml?cursor=-1

  示例: http://api.twitter.com/statuses/friends/williamlong.xml?cursor=1300794057949944903

  count. 可选参数. 每次返回的最大记录数(即页面大小),不大于200,默认返回20。

  示例: http://api.twitter.com/statuses/friends/bob.xml?&count=200

  statuses/followers

  返回认证用户的订阅者,内含每个订阅者的当前消息。与friends一样,只需要把friends地址中的friends替换为followers即可,其余一切包括参数都不需要改变,都是一样的用法。

  访问地址:http://api.twitter.com/statuses/followers.format

  支持格式 ( format ):xml, json

  参数列表:

  id. 选填参数. 要获取粉丝的 UID或微博昵称

  示例: http://api.twitter.com/statuses/followers/12345.json or http://api.twitter.com/statuses/followers/bob.xml

  user_id. 选填参数. 要获取的UID

  示例: http://api.twitter.com/statuses/followers.xml?user_id=1401881

  screen_name. 选填参数. 要获取的微博昵称

  示例: http://api.twitter.com/statuses/followers.xml?screen_name=101010

  cursor. 选填参数. 单页只能包含100个粉丝列表,为了获取更多则cursor默认从-1开始,通过增加或减少cursor来获取更多的,如果没有下一页,则next_cursor返回0

  粉丝列表 示例: http://api.twitter.com/statuses/followers/barackobama.xml?cursor=-1 示例: http://api.twitter.com/statuses/followers/barackobama.xml?cursor=1300794057949944903

  count. 可选参数. 每次返回的最大记录数(即页面大小),不大于200,默认返回20。

  示例: http://api.twitter.com/statuses/followers/bob.xml?&count=200

  私信操作方法

  direct_messages

  返回用户的消息列表

  访问地址:http://api.twitter.com/direct_messages.format

  支持格式 ( format ) :xml, json, rss, atom

  参数列表:

  since_id. 可选参数. 返回ID比数值since_id大(比since_id时间晚的)的私信。

  示例: http://api.twitter.com/direct_messages.xml?since_id=12345

  max_id. 可选参数. 返回ID不大于max_id(时间不晚于max_id)的私信。

  示例: http://api.twitter.com/direct_messages.xml?max_id=54321

  count. 可选参数. 每次返回的最大记录数(即页面大小),不大于200。

  示例: http://api.twitter.com/direct_messages.xml?count=200

  page. 可选参数. 返回结果的页序号。注意:有分页限制。

  示例: http://api.twitter.com/direct_messages.xml?page=3

  direct_messages/sent

  返回用户的已发送消息列表

  访问地址:http://api.twitter.com/direct_messages/sent.format

  支持格式 ( format ) :xml, json, rss, atom

  参数列表:

  since_id. 可选参数. 返回ID比数值since_id大(比since_id时间晚的)的私信。

  示例: http://api.twitter.com/direct_messages.xml?since_id=12345

  max_id. 可选参数. 返回ID不大于max_id(时间不晚于max_id)的私信。

  示例: http://api.twitter.com/direct_messages.xml?max_id=54321

  count. 可选参数. 每次返回的最大记录数(即页面大小),不大于200。

  示例: http://api.twitter.com/direct_messages.xml?count=200

  page. 可选参数. 返回结果的页序号。注意:有分页限制。

  direct_messages/new

  以认证用户的身份向指定的其他用户发送一条有向消息,必须包含参数user和text,请求必须使用POST方式提交。成功将返回完整的发送消息必须包含参数user和text,必须使用POST方式提交。成功将返回完整的发送消息。

  访问地址:http://api.twitter.com/direct_messages/new.format

  支持格式 ( format ) :xml, json

  参数列表:

  user: user_id或者screen_name

  text: 必须参数. 要发生的消息内容,需要做URLEncode,文本大小必须小于300个汉字

  direct_messages/destroy

         通过给定的消息id,删除指定的有向消息,认证用户只能删除其作为接受者收到的消息。使用POST和GET方法都可以
访问地址:http://api.twitter.com/direct_messages/destroy/id.format

  支持格式 ( format ) :xml, json

  参数列表:

  id. 必填参数,要删除的私信主键ID.

  示例: http://api.twitter.com/direct_messages/destroy/12345.json

  好友关系操作方法

  friendships/create

  创建认证用户与给定的id参数指定的用户之间的好友关系;该操作执行成功时返回被加为好友的用户信息,执行失败则返回失败的状态字串。

  访问地址:http://api.twitter.com/friendships/create/id.format

  支持格式 ( format ) :xml, json

  参数列表:

  下面的参数必须有其中一个:

  id. 必填参数. 要关注的用户UID或微博昵称

  示例: http://api.twitter.com/friendships/create/12345.json or http://api.twitter.com/friendships/create/bob.xml

  user_id. 必填参数. 要关注的用户UID,主要是用在区分用户UID跟微博昵称一样,产生歧义的时候。

  示例: http://api.twitter.com/friendships/create.xml?user_id=1401881

  screen_name.必填参数. 要关注的微博昵称,主要是用在区分用户UID跟微博昵称一样,产生歧义的时候。

  示例: http://api.twitter.com/friendships/create.xml?screen_name=101010

  follow. 可选参数。暂不支持。

  friendships/destroy

  用来注销同指定id的用户的好友关系,当操作成功时,将返回被取消好友关系的用户,当失败时,将会返回失败信息。

  访问地址:http://api.twitter.com/friendships/destroy/id.format

  支持格式 ( format ) :xml, json

  参数列表:

  下面的参数必须有其中一个:

  id. 必填参数. 要取消关注的用户UID或微博昵称

  示例: http://api.twitter.com/friendships/destroy/12345.json or http://api.twitter.com/friendships/destroy/bob.xml

  user_id. 必填参数. 要取消关注的用户UID,主要是用在区分用户UID跟微博昵称一样,产生歧义的时候。

  示例: http://api.twitter.com/friendships/destroy.xml?user_id=1401881

  screen_name. 必填参数. 要取消的微博昵称,主要是用在区分用户UID跟微博昵称一样,产生歧义的时候。

  示例: http://api.twitter.com/friendships/destroy.xml?screen_name=101010

  friendships/exists

  用来检验两个用户的关系是否是朋友关系或者跟随与被跟随的关系。返回相互跟随的关系结果。比如:A跟随了B。B没有跟随A。将返回对应的格式数据:如xml,<result><AFollowB>true</AFollowB><BFollowA>false</BFollowA></result>

  访问地址: http://api.twitter.com/friendships/exists.format

  支持格式:xml, json

  参数列表:

  user_a. 必填参数,要判断的用户UID

  user_b. 必填参数,要判断的被关注人用户UID

  friendships/show

  返回两个用户关系的详细情况

  访问地址: http://api.twitter.com/friendships/show.format

  支持格式:xml, json

  参数列表:

  以下参数可不填写,如不填,则取当前用户

  source_id. 源用户UID

  示例: http://api.twitter.com/friendships/show.xml?source_id=10502

  source_screen_name. 源微博昵称

  示例: http://api.twitter.com/friendships/show.xml?source_screen_name=bob

  下面参数必须选填一个:

  target_id. 要判断的目的用户UID

  示例: http://api.twitter.com/friendships/show.xml?target_id=10503

  target_screen_name. 要判断的目的微博昵称

  示例: http://api.twitter.com/friendships/show.xml?target_screen_name=williamlong

  获取用户列表方法

  friends/ids

  用来获取指定的用户的朋友用户id。即自己跟随的人的id

  访问地址:http://api.twitter.com/friends/ids.format

  支持格式:xml, json

  参数列表

  id. 选填参数. 要获取好友的UID或微博昵称

  示例: http://api.twitter.com/friends/ids/12345.xml or http://api.twitter.com/statuses/friends/bob.xml

  user_id. 选填参数. 要获取的UID

  示例: http://api.twitter.com/friends/ids.xml?user_id=1401881

  screen_name. 选填参数. 要获取的微博昵称

  示例: http://api.twitter.com/friends/ids.xml?screen_name=101010

  cursor. 选填参数. 单页只能包含5000个id,为了获取更多则cursor默认从-1开始,通过增加或减少cursor来获取更多的关注列表

  示例: http://api.twitter.com/friends/ids.xml?cursor=-1 示例: http://api.twitter.com/friends/ids.xml?cursor=1300794057949944903

  count. 可选参数. 每次返回的最大记录数(即页面大小),不大于5000,默认返回500。

  示例: http://api.twitter.com/friends/ids.xml?count=200

  followers/ids

  用来获取指定的用户被跟随的用户id。

  访问地址:http://api.twitter.com/followers/ids.format

  支持格式:xml,json

  参数列表

  id. 选填参数. 要获取好友的UID或微博昵称

  示例: http://api.twitter.com/followers/ids/12345.xml or http://api.twitter.com/statuses/friends/bob.xml

  user_id. 选填参数,要获取的UID

  示例: http://api.twitter.com/followers/ids.xml?user_id=1401881

  screen_name. 选填参数,要获取的微博昵称

  示例: http://api.twitter.com/followers/ids.xml?screen_name=101010

  cursor. 选填参数. 单页只能包含5000个id,为了获取更多则cursor默认从-1开始,通过增加或减少cursor来获取更多的关注列表

  示例: http://api.twitter.com/followers/ids.xml?cursor=-1

  示例: http://api.twitter.com/followers/ids.xml?cursor=1300794057949944903

  count. 可选参数. 每次返回的最大记录数(即页面大小),不大于5000,默认返回500。

  示例: http://api.twitter.com/followers/ids.xml?count=200

  用户帐号方法

  account/verify_credentials

  如果用户身份验证成功则返回 http状态为 200;如果是不则返回401的状态和错误信息。此方法用了判断用户身份是否合法。

  访问地址:http://api.twitter.com/account/verify_credentials.format

  支持格式:xml, json

  参数列表:

  account/update_profile

  自定义微博页面的参数。只会修改参数更新项。

  访问地址:http://api.twitter.com/account/update_profile.format

  支持格式:xml, json

  参数列表

  必须有一下参数中的一个或多个,参数值为字符串. 进一步的限制,请参阅下面的各个参数描述.

  name. 昵称,可选参数.不超过20个汉字

  gender 性别,可选参数. m,男,f,女。

  province 可选参数. 参考省份城市编码表

  city 可选参数. 参考省份城市编码表,1000为不限

  description. 可选参数. 不超过160个汉字.

  收藏相关方法

  favorites

  返回授权用户的最新的20条收藏的状态信息。也可以通过id或者用户名来指定一个用户,查询他最新的20条收藏的状态信息。

  访问地址:http://api.twitter.com/favorites.format

  支持格式:xml, json, rss, atom

  参数列表

  page: 可选参数. 返回结果的页序号。注意:有分页限制。

  示例: http://api.twitter.com/favorites/11075.xml?page=3

  favorites/create

  收藏一条状态信息POST提交

  访问地址:

  http://api.twitter.com/favorites/create.format

  支持格式:xml, json

  参数列表

  id 必须,授权用户要收藏的状态信息id。

  favorites/destroy

  删除授权用户收藏的一条状态信息

  访问地址:http://api.twitter.com/favorites/destroy/id.format

  支持格式:xml, json

  参数列表

  id 授权用户收藏的状态信息id。

2010年4月20日星期二

网站技术分析报告之——开心网

  读者投稿:一直在研究互联网技术,经常访问这样那样的网站,突发奇想,为什么我们不去看看这些网站的技术架构是怎么样的呢?研究一下源代码?于是便有了这个系列,首先找谁呢?还是找山寨版的开心网开刀吧,这个开心网,不是那个开心网,呵呵。

  坦白说,我不太想注册,也不想研究太多太多,一般来说,一个网站最重要的是首页,Ok,那我们就从首页开始吧。

  本系列文章仅仅是个人研究发布,仅供参考。

  分析工具:各种浏览器,firebug(一个基于firefox的插件)

  开心网首页是一个简单的登陆页,居然做到了385.2KB之大,像开心网这么大的流量,每多1kb就意味着每天N多的钱哪。我没有找到官方的pv 或独立Ip的数据,根据alexa的数据参考一下吧,估计日均独立IP为528,000,我们估计按每独立IP访问一次登陆吧,实际上可能少一些,因为很多用户可能直接在首页上登陆了(alexa的数据也不是那么可靠,供参考吧)。

  开心网的网页每增加1k,我们需要多少带宽?算一下,我们需要528,000/1024=515MB/天的带宽,然后我们平均一下,按一天24小时用户访问很平均来计算(实际上不可能,一般峰值访问会是平均值的一倍以上),每秒需要消耗带宽是528000 / (24小时 * 60分钟 * 60秒)=6Kb,考虑到峰值,估计要到12k以上。

  看官,像开心网这么简单的登陆,完全可以控制在100k以内的大小,为什么要这么多呢,一会儿看网页的分析就可以知道了。这是什么概念?385-100=285k,再算出带宽得出:285k * 12k / 1024 = 3.3M.乖乖,开心网每天需要添加3.3M的独享带宽。3.3M的带宽会是多少钱呢?我们就以中档的机房来举例,北京中档的3M独立带宽,怎么也得3-5万块吧,再加上CDN的带宽,估计开心网每年需要为此增加5-8万的费用。

开心网

  分析一下开心网存在的问题:

  1. Javascript文件直接写在了网页当中

  开心网的登陆页有大量的javascript的代码,这样的代码一方面不利于维护,另一方面,也不利用用户加载页面。大致计算了一下,开心网登陆页一个有180余行的javascript代码,而总代码仅在336行,也就是说代码中的javascript代码占了1/2 强。

  2. 网页没有开启gzip

  根据文件头返回的信息可以看到,开心网应该在linux上搭建了nginx ,添加gzip应该不会是很难的事吧?而且像html及静态js/css这些文件,gzip后起码可以减少50%的传输量,当是这一项,就可以每年省下上百万的费用。

  当然有人会反对,认为gzip会加重服务器的压力,并且客户端解压的时间与减小文件大小带来的传输速度不会有太多好处。但我认为,对于静态文件来说,可以放到独立的服务器,这个服务器可以把文件压缩后放到缓存中,这样不用去读IO,响应速度会提高。同时,虽然现在用户的带宽都已经是512k的 adsl以上了,但是为什么我不可以让用户更快的看到我们的网页呢?退一万步说,用户真的在乎这个快几秒的,那么我们为什么不可以减小带宽的压力以节省成本呢?如果把节省下的这些钱去奖励员工,没准他们可以给我带来更多的惊喜呢。

  3. Javascript没有做任何处理

  开心网的 javascript可真有意思,他们的开发人员代码质量还不错,起码注释写得还不错,可是问题是,你需要把这些注释都发到客户端么,难道开心网想教我们怎么写javascript代码?这样的代码发到客户端,既占带宽又会泄密网站的代码。

  开心网的核心javascript文件xn.core.js有105k,这么大的其中注释占了不少的代码,我尝试使用yahoo和google的压缩工具进行压缩,但因为代码中有错误无法完成,所以只好放弃。但我估计这个js,最基本的压缩去除空行和注释,可以减少1/5左右的大小,如果进行一些混淆的话,应该可以在40k左右,如果再gzip的话,应该就只有15k以内了。

  4. 图片文件过大

  登录页有一个157k的sys-bj2.jpeg文件,天啦,这么大的。我下载这张图片一看,发现这个图片实际是同几张图片组合的。他们的设计人员其实是想减少网页对服务器的请求数,所以把几个图片合并到一块。但是,他们这种做法是错误的。

  我们要减少请求数,一般是把小图片,一般是几k的36 px* 36px以下的小图片合并,而不是把大图片也合并。因为小图片数量多,而大图的合并,也会增加图片的大小。我将这个图片用ps再优化一下,优化到 66k,也没发现明显的失真。所以我认为,就算是大图,也可以优化到80k以内,而不是如此157k大小的图片。

  再多一句,这个图片总量才5个合并是完全没有必要的,并且图片最大的有600px*255px,而最小的只有10px*10px以下,这种合并没有任何益处,百害而无一益!

  总结

  开心网作为一个访问量非常大的网站,网页结构也非常简单,理应做得更小,比如在100k以内。从我的分析中可以看出,主要问题集中在 javascript,gzip和图片上,代码质量总体还可以。当然,我们不仅只是挑刺,也应该看到一些好的地方,如下:

  1. 首页处理得比较到位,虽然javascript也没有压缩,但总大小只有108k

  2. 文件请求数较少,这个和开心网本身有关,开心网本来就不是一个网页结构复杂的网站,所以文件数自然会比较少了

  3. 静态文件和网页分开部署

  4. Javascript注释比较好,但不应该发到客户端

  重要建议:

  1. 开启gzip压缩

  2. 压缩javascript及css,并将这些文件缓存起来

  最后,这次的分析就写到这里了,就事论事而已,和任何网站及相关的人员没有任何关系,呵呵。

  来源:读者Conis投稿,原文地址。版权声明:本文授转月光博客刊登,其他非授权网站媒体转载,需要添加作者网站地址http://iove.net,否则视为侵权。

2010年4月19日星期一

后谷歌时代的中国互联网生态

  Google的搜索服务退出了中国市场,到了香港的新家,很多互联网从业者都非常关注的一个问题是,谷歌之后,中国的搜索引擎市场格局将会发生什么变化,中国搜索引擎产业将如何继续发展,给各个相关IT企业带来什么样的影响,中国互联网的未来将会怎样,月光博客将从各个方面分析后谷歌时代中国的互联网生态。

  中国搜索市场现状

  据艾瑞咨询的《中国互联网市场年度总结报告2009年》显示,中国互联网经济整体市场规模达743亿,网络广告市场规模达206亿元人民币,其中搜索引擎广告市场规模69亿,同比增长率达到了38.2%的高速增长态势,成为中国整体网络广告市场增长的动因之一。据艾瑞分析,在经济危机期间网络广告市场逆势上扬,主要是因为部分大广告主(主要为品牌广告主)将更多预算转移至性价比更高的搜索引擎营销,无意中经济危机成为网络广告的增长契机。

2003-2009年中国网络经济核心行业市场结构

图1:2003-2009年中国网络经济核心行业市场结构(来源:艾瑞咨询)

  而艾瑞的数据又显示,在这69亿搜索引擎广告市场里,已经形成了百度、谷歌双寡头的格局,百度和谷歌两家公司的营收份额之和超过96.2%,基本垄断了中国搜索引擎广告市场,其他互联网公司则处于第二梯队,包括雅虎、搜狗、腾讯SOSO、微软Bing、新浪爱问、网易有道、阿里巴巴等,广告营收均不超过1.1%。

2003-2009年中国搜索引擎市场营收份额

图2:2003-2009年中国搜索引擎市场营收份额(来源:艾瑞咨询)

  谷歌做为全球最大的以广告驱动的科技公司,它的主要收入来源于谷歌站点上的广告,其中大多来自于谷歌搜索。2009年,谷歌公布的全球总收入为240亿美元,如果减去谷歌支付给合作伙伴的收益分成和流量获取成本共计60亿美元,谷歌去年的净收入为180亿美元,绝大多数收入来自谷歌站点的广告,还有很少的一部分来自谷歌广告联盟(AdSense)业务,极小部分来自于授权交易和其他营收(包括Google Search Appliance、Google Apps等)。

Google全球收入来源

图3:Google全球收入来源(来源:Business Insider)

  在中国市场,谷歌在2009年的增长是相当惊人的,2009年谷歌中国的年收入为22.7亿人民币,同比增长超过50%,市场占有率达到32%,大部分收入也是来自谷歌中国网站上的广告。

  瓜分市场论为时尚早

  随着谷歌将搜索服务迁移到香港之后,搜索服务的稳定性和可用性将不可避免地有所下降,其中国内地的广告收入则会受到一定影响。在这种预期下,很多公司纷纷摩拳擦掌,开始计划瓜分谷歌走后留下的超过30%的市场份额。

  实际上,这种瓜分市场论为时尚早,根据谷歌公司的声明,谷歌只是将搜索业务转移到香港,而研发和销售团队则依旧保留在中国,并处理相关业务,保证用户能正常访问谷歌香港,这种切换是相当平滑而稳健的,不会对于谷歌搜索产生很大的冲击,从Alexa流量的数据统计上来看,Google.cn的流量在3月23日大幅下降,而Google.com.hk的流量则在同日大幅上升,同时达到Google.cn原有的用户量后保持稳定,这说明谷歌中国的搜索服务较为稳定的切换到了谷歌香港,原有用户流失并不多。

谷歌退出中国前后流量对比

图4:谷歌退出中国前后流量对比(来源:Alexa)

  以目前谷歌撤出中国的结果来看,实际上类似于回到2006年之前Google进入中国之前的状态,中国网民依旧可以使用Google.com.hk的简体中文界面进行搜索,Google很多热门产品,如Gmail、Google Earth、Picasa、Google Reader等都是独立运作,不会受到影响,Google在2006年之后在中国发展的非搜索类项目,如谷歌音乐、问答、来吧、热榜、谷歌拼音输入法、265网站导航等项目,也继续在中国大陆运营,这些项目虽然不盈利,但可以带来大量流量和用户,以增加谷歌在中国的市场份额。

  想当年,在2005年刚进入中国的时候,谷歌中国已经有了13.9%的收入份额,网页搜索的用户访问量也有20.3%,因此,除非谷歌搜索的用户体验出现非常大的下降,谷歌中国的搜索市场份额未必会下滑到刚进入中国之前的份额。

  广告市场的机遇和挑战

  尽管谷歌的搜索份额在短期内不会出现大幅下滑,但从长远来看,谷歌香港的搜索体验无疑将面临巨大的挑战,搜索服务的稳定性和可用性均难以得到保证,尽管拥有大量免费服务的谷歌造就了一大批忠诚用户,但如果无法保证搜索服务的可靠性和稳定性,谷歌在中国的用户基础就会受到侵蚀,很多原有的谷歌用户将不得不改用其竞争对手(例如百度)的搜索服务,这种情况在2002年曾经发生过一次,并导致了之后谷歌的市场占有率被百度反超。

  谷歌中国目前的盈利主要来自谷歌推广(AdWords)业务,少部分来自谷歌广告联盟(AdSense)业务,这两部分业务都面临百度推广和百度联盟的有力竞争,虽然谷歌推广(AdWords)业务面对百度推广处于下风,但谷歌广告联盟(AdSense)业务相比百度联盟来说占据绝对优势,对于联盟网站给予高额分成比例赢得了广大中小网站的青睐,成为网站发布商的首选产品,由于AdSense业务独立于搜索业务单独运营,因此不受此次事件影响,使这种优势在短期内难以撼动。

  然而,谷歌推广(AdWords)业务是基于谷歌搜索服务的广告系统,因此当搜索服务受影响时,AdWords也会受到牵连,搜索推广业务除了百度之外,至少还有七八家公司参与竞争。

  搜索推广的业务量和搜索市场份额密切相关,搜索份额的扩大对于推广业务至关重要,根据iUserTracker的数据显示,百度相对于除了谷歌之外的二线搜索引擎来说具有相当明显的优势,百度可能将会是谷歌离开后的最大受益者。

网页搜索请求量市场份额

图5:网页搜索请求量市场份额(来源:艾瑞咨询)

  百度是类似谷歌的技术性公司,在中文搜索的排序算法上有着扎实的基础,普通的中文搜索质量和谷歌不相上下,如果用户访问谷歌出现了故障,那么很有可能会换用百度进行搜索,从而导致谷歌的市场份额慢慢下降。但无可否认的是,在很多领域,如技术、商务、外贸等,谷歌搜索都是难以替代的,百度虽然在娱乐搜索上领先,但在短时间内依然无法在专业搜索领域和英文搜索上超越谷歌。

  腾讯是搜索领域的新手,之前长期采用谷歌作为内置搜索,之后于2009年9月开始独立运作腾讯SOSO搜索引擎,被艾瑞评为中国成长最快的搜索引擎。和其他中国互联网公司相比,腾讯有一个强大的杀手锏:QQ客户端。拥有1亿同时在线用户数的腾讯QQ是一个可怕的对手,只要腾讯简单地在客户端QQ上集成搜索引擎,就足够让其他竞争对手头疼了,QQ拼音输入法的推出更是为了阻击搜狗输入法、谷歌输入法的进攻。由于腾讯的用户群以青少年为主,因此腾讯SOSO可能会慢慢蚕食百度在娱乐方面的搜索市场,同时,SOSO的广告销售体系和代理渠道体系已经初步成型,相对于其他二线搜索引擎,腾讯的机会最大。

  搜狗、有道和必应的中文搜索质量目前还无法与谷歌和百度相抗衡,但可以通过走本地化道路和一些特色的搜索服务来吸引不同需求的用户。例如搜狗搜索和输入法的整合,以及有道的实时搜索功能。

  搜狗通过搜狗拼音输入法成功地提升了自身的品牌,成为最热门的输入法之一,为提高搜狗的搜索份额奠定了良好的基础,然而这种发展已经遭到腾讯QQ输入法的阻击。除了输入法之外,搜狗浏览器也是搜狗的客户端战略之一,毕竟用户的大部分搜索是基于浏览器而不是输入法,然而,搜狗浏览器的推出却没有得到类似搜狗输入法一样的成功,之后被后来居上的奇虎360浏览器所超越。

  有道的实时搜索是另一个有特色的搜索服务,是谷歌实时搜索的中文本地化克隆产品,可以实时搜索网易微博和新浪微博的动态,这也是除谷歌外第一个基于中文的本地化实时搜索服务,这种特色搜索服务在一些专业领域具有一定的价值。可以说,网易的实时搜索服务的确是一个不错的创新,然而,在中国当前的互联网环境下,创新往往预示着不可预知的风险,这的确是件悲哀的事情。

搜搜、搜狗、有道、爱问的流量统计

图6:搜搜、搜狗、有道、爱问的流量统计(来源:Alexa)

  综合来看,未来中国的整个搜索市场会有所变化,百度和其他搜索公司都会努力竞争谷歌退出后的市场份额。在“后谷歌时代”,谷歌的搜索份额的流失将是一个缓慢而长期的过程,中国互联网的搜索市场必然会面临重新洗牌,这其中肯定有不少的机会存在。中国的互联网企业要想填补后谷歌时代真空,除了要在搜索引擎技术上的不断突破之外,还要有自己的创新,在细分领域上建立自己的优势,提供给互联网用户更好的搜索体验,只有把自己的产品做得更好用,才能赢得用户的心,最终在日益激烈的市场竞争中创造属于自己的“蓝海”。

2010年4月17日星期六

智能手机必备软件推荐

  随着手机的日益普及,手机应用也成为了用户的关注重点。对此,一些PC平台的知名产品,也根据对应所需,分别推出了专属的手机版产品,对此,笔者也将分别为大家介绍这些知名软件的手机版本,笔者当前也正在使用,或许这些,也同样是大家手机上的“装机必备”软件……

    一、手机QQ

  手机QQ是将QQ聊天软件搬到手机上,满足随时随地免费聊天的需求。新版手机QQ更引入了语音视频、拍照、传文件等功能,与电脑端无缝连接,包括音乐 试听、手机影院等功能。

  手机QQ本身为免费软件,软件开发商不收取任何费用,但在下载及使用手机QQ的过程中,会产生GPRS流量费用,该费用由运营商收取,所以强烈建议您开通GPRS包月套餐,我的GPRS是08年7月份就开通的,当时是每月5元包10M,不知什么时候变成30M了。不过现在开通GPRS好象已经变成10月30M了,我想应该是和电信在抢客户的手机和策略吧。

  我用手机试着进农场,可以偷菜,但是有种种限制,我虽然是QQ会员,但是还是不可能用,腾讯简直是穷到极点了,什么都要钱。

  下载地址:http://mobile.qq.com

手机QQ

  二、QQ手中邮

  QQ手中邮是QQ邮箱团队开发的手机邮箱客户端软件,与QQ邮箱双向同步,可以把手机上的电话号码全部同步到QQ邮箱里,使用都是免费的,使用的过程中只收GPRS流量费,相对中国移动的号薄管家就好多了,号薄管家每月2元。

  不过目前已支持的手机类型不是很多:Symbian手机:S60 3rd系统;Windows手机:Pocket PC及Smartphone。

  下载地址:在你QQ邮箱里,有个“体验室”。

QQ手中邮

  三、搜狗手机输入法

  搜狗手机输入法由搜狗手机输入法开发团队进行开发。搜狗手机输入法采用全拼输入的模式,支持数字键盘和全键盘手机的自适应。

  安装发短信速度很快,可以把节约下来的时间用来偷菜,哈哈。

  下载地址:http://shouji.sogou.com

搜狗手机输入法

  四、信安易手机卫士

  1.信安易卫士手机防火墙是一款功能十分强大的手机短信+来电防火墙软件,它不仅可以过滤短信,还能拒绝来电,功能强大而且设置简单,有了它您不必再为不受欢迎的短信及来电而头痛。

  2.设置隐私管理增加“隐私管理”、可以单独设置隐私名单。对于隐私名单的来电、可采用“正常接听”和“立刻挂断”2种方式、并且可以根据时间设置自动切换处理方式。隐私名单所有的通话记录和收发短信彩信等都将加密保持在信安易卫士的隐私通讯记录中。隐私通讯支持定制的提醒方式:不做处理、响铃、震动、弹出提醒文字,隐私名单提醒和普通拦截提醒区分对待。

  3.个性化归属显示支持用户自定义来、去电归属地的显示方式、包括:字体、字体大小、字体属性、背景颜色、字体颜色、显示位置等(信安易安装后会自动选择最合适的字体。如果用户自己选择字体、请注意该字体是否支持中文。如果用户选择了不支持中文的字体,来电显示将为方框。

  4.增加“空闲检测”、当5分钟没有操作手机,信安易卫士会自动退出以免被他人操作。

  5.每次启动服务、会自动检测以往通讯记录、将黑名单和隐私名单的通讯记录也自动移到信安易卫士的相应记录中。

  下载地址:http://www.msafe.com.cn

信安易手机卫士

  五、UC浏览器

  UC浏览器是优视科技(原UCWEB公司)开发的一款手机浏览器,支持WEB,WAP页面浏览,速度快而稳定,具有视频播放,网站导航,搜索,下载,个人数据管理等功能,用户能随时随地通过UC浏览器进行无线冲浪:编辑个人博客,登录网络社区,收发电子邮件,订阅热点RSS等,是适配平台较多的手机浏览器之一。

  下载地址:http://www.uc.cn

UC浏览器

  六、天天动听

  天天动听手机音乐盒是一款集播放、音效、搜索、下载等众多功能于一身,完全免费的手机音乐播放器。由于其支持最多手机机型和音频格式,支持丰富的皮肤下载等功能,同时其与手机搭配和谐、操作简易、管理人性的特点,深受拇指一族的青睐。是目前国内最受欢迎的手机音乐播放软件之一。

  下载地址:http://www.ttpod.com

天天动听

  七、飞信

  飞信是中国移动的综合通信服务,即融合语音(IVR)、GPRS、短信等多种通信方式,覆盖三种不同形态(完全实时的语音服务、准实时的文字和小数据量通信服务、非实时的通信服务)的客户通信需求,实现互联网和移动网间的无缝通信服务。

  如果你想给好友免费发短信,必须先加为好友。

  下载地址:http://www.fetion.com.cn/download/mobileclient

飞信

  来源:读者白强投稿

诺基亚S60手机同步Google日历

  Google早先曾经发布过Google Sync在线手机同步工具,该服务能够把手机的内容与Google服务器进行同步,支持同步邮件、通讯录、日历等数据。

  我先前曾经写过一篇文章详细介绍了支持SyncML协议的S60手机使用该工具在线同步通讯录的方法,不过,目前SyncML仅仅只支持通讯录同步,还不支持Google日历同步,今天我就介绍一下S60手机使用Google Sync同步Google日历到手机上的方法。

  同步日历使用的是ActiveSync协议,用户需要下载一个Nokia开发的Mail for Exchange的软件,该软件可以在诺基亚的英文网站上免费下载或者在安装光盘中找,在诺基亚手机商店里也有免费提供,下载安装完成之后,就可以使用Microsoft Exchange ActiveSync通信协议与Google服务器进行同步日历了。

  打开Mail For Exchange,会提示建立一个配置文件,选择建立。

诺基亚S60手机同步Google日历

  配置“连接”设置:Exchange的服务器是 m.google.com,安全连接选“是”,接入点选“CMNET”或“CMWAP”均可

诺基亚S60手机同步Google日历

  配置“证书”设置:用户名:你的Gmail邮件地址,密码:你的Gmail密码,域:m.google.com

诺基亚S60手机同步Google日历

  配置“同步日程”:高峰期和非高峰期同步日程均选手动,冲突时:服务器优先

诺基亚S60手机同步Google日历

  配置“日历”:同步日历:是,同步日历回溯:可以设置2周,1个月或者1年;初次同步:如果你希望保留手机上的日历内容,请务必选择“保留手机项目”

诺基亚S60手机同步Google日历

  其他配置:任务选不同步,联系人可以选同步或不同步,但不要同时使用ActiveSync协议和SyncML协议同步联系人,电邮通常选不同步,除非你想把你的Gmail邮件下载到手机上。

  最后,点“选择”-“同步”,即可将Google日历上的数据同步到诺基亚S60手机上。

诺基亚S60手机同步Google日历

  如果同步成功,会显示出上次同步的内容和时间。

诺基亚S60手机同步Google日历

  通常我们可以在Google日历上录入自己每天的日程,然后通过Google Sync同步到手机上,这样就可以通过手机来规划和提醒自己每天的行程,随着工作的展开,每天都有很多事务需要处理,使用Google和手机日历,就可以有一个清晰的日程安排及合理规划。