`
superisaac
  • 浏览: 64310 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

微博API timeline压缩的想法

阅读更多
智能手机的用户越来越多,但是据统计有一半使用智能手机的人通过GPRS这样的慢速网络上网,当微博客户端使用慢速网络上网时,时间线的数据大小就成为用户体验的关键,如果能压缩数据传输,好处自然是不用说的。

让我们看看一个典型的Timeline是什么样的格式。实例如下.
{ created_at: 'Tue Nov 08 11:50:41 +0800 2011',
 id: 3377424618238221,
 text: '11月7日,开发区管委会与全美华人金融协会战略合作协议签订仪式在开发区投资服务中心举行。开发区(南港工业区)管委会党组副书记、管委会副主任孙胜,开发区(南港工业区)管委会副主任郎东会见全美华人金融协会会长、汉世纪投资管理有限公司管理合伙人、总裁吴皓一行,并共同出席签字仪式。',
 source: '<a href="http://weibo.com" rel="nofollow">新浪微博</a>',
 favorited: false,
 truncated: false,
 in_reply_to_status_id: '',
 in_reply_to_user_id: '',
 in_reply_to_screen_name: '',
 thumbnail_pic: 'http://ww1.sinaimg.cn/thumbnail/81ab7491tw1dmwcy8hekuj.jpg',
 bmiddle_pic: 'http://ww1.sinaimg.cn/bmiddle/81ab7491tw1dmwcy8hekuj.jpg',
 original_pic: 'http://ww1.sinaimg.cn/large/81ab7491tw1dmwcy8hekuj.jpg',
 geo: null,
 mid: '3377424618238221',
 user: 
  { id: 2175497361,
    screen_name: '天津开发区投促三局',
    name: '天津开发区投促三局',
    province: '12',
    city: '26',
    location: '天津 滨海新区',
    description: '天津开发区热情欢迎国内外客商来区考察、投资。有关区域发展详情和投资程序可咨询天津开发区投资网www.investteda.org',
    url: '',
    profile_image_url: 'http://tp2.sinaimg.cn/2175497361/50/5602903704/1',
    domain: '',
    gender: 'm',
    followers_count: 1328,
    friends_count: 154,
    statuses_count: 168,
    favourites_count: 0,
    created_at: 'Mon Jun 13 00:00:00 +0800 2011',
    following: false,
    allow_all_act_msg: false,
    geo_enabled: true,
    verified: true } }

以上代码是新浪微博一个典型消息的JSON格式,timeline就是由20个这样格式的消息组成。一个timeline请求通常响应大约30K的数据,经过gzip -9压缩后,仍然有大约7K字节数据。那么其尺寸消耗在哪里呢?第一部分:对象中很多属性客户端并不需要,也传了过去,另外一部分:属性名字占的字节数通常比属性值还要大。

属性名的作用是当我们拿到一个属性值的时候不知道其意义,需要名字来标识区分的。那么如果客户端和服务器端约定了某个字段是的意义,就不需要传输名字了。

基于以上两个想法,我在开源项目node-fanfou (https://github.com/FanfouAPI/node-fanfou)上实现了如下的压缩/解压缩过程
1. 指定了需要传输的timeline 属性名, 如下
var status_fields = ['id', 'text', 'created_at',
                     ['user', 'id'], ['user', 'name'],
                     ['user', 'screen_name'], ['user', 'profile_image_url'],
                     ['user', 'friends_count'], ['user', 'followers_count'],
                     ['user', 'statuses_count']];

这样的指定,以后也很方便添加新的属性
2: 对于从API获得的每个status对象,将一个属性的值放在一起,最后行程一个javascript对象
{
  'id': [111, 222, ...],
  'name': ['tom', 'jacky', 'mike', ...],
  'profile_image_url': [...]
  ...
}

对象的每个字段值是个等长的数组。
3: 由于我们知道字段名字的顺序,仅有的字段名字都可以省略, 变成如下结构,然后传送给客户端
[
  [111, 222, ...],
  ['tom', 'jacky', 'mike', ...],
  [...]
  ...
]

接收端根据约定好的字段进行解码就可以使用了。只要约定不出问题,就不会导致数据混乱。
由于node-fanfou是使用nodejs编程的,服务器端也使用javascript, 所有我偷了个巧,一个定义字段的文件同时被客户端和服务器端使用,就不需要考虑分发和修改的问题了。

结果是一个30K大小左右的timeline经过以上编码,尺寸变为6K字节大小。而gzip -9 压缩后2.6K字节大小,能有效缩小传输尺寸一半以上。

对于纯客户端开发者,也建议使用网站来缓冲微博网站的API, 压缩尺寸。这样对于用户体验提升有很大帮助。

再顺便说下node-fanfou, 这是一个饭否的实验性移动互联网网站,主要使用的技术有 css3, html5 localStorage, backbone.js, jquery还有服务器端的nodejs. 源代码在 https://github.com/FanfouAPI/node-fanfou 。欢迎参看.




分享到:
评论

相关推荐

    网易微博API源码示例(很好理解的哦)

    T163SDK访问网易微博API了。 示例程序演示如何使用web和winform调用网易微博接口验证,收发信息,上传图片等。 部分微博接口 方法名 微博列表(Timeline) 获取当前登录用户关注用户的最新微博列表(statuses/home_...

    新浪微博API调研

    微博基础数据接口 (Rest API) 获取下行数据集(timeline)接口 获取最新的公共微博消息 获取当前登录用户及其所关注用户的最新微博消息 (别名: statuses/home_timeline) 获取当前登录用户发布的微博消息列表 获取@当前...

    快速学习和使用新浪微博API开发WEB应用

    接着,我们关注SinaApiService.cs中的`user_timeline`方法,这是获取用户微博列表的API调用。原方法未使用OAuth授权,因此我们需要对其进行修改,增加一个使用OAuth授权的新方法: ```csharp /* 用户发表微薄列表 *...

    腾讯微博API JS/Flash/AIR-SDK

    `twt.timeline.getPublicTimeline()`则用于获取公共时间线上的最新微博。 接下来是Flash API。在一些需要富媒体内容的场景下,Flash API能提供更好的用户体验。它可以处理音频、视频等多媒体内容的上传和播放。例如...

    控制台应用程序调用新浪微博API的小例子

    在这个小例子中,我们将探讨如何使用C#编程语言来调用新浪微博的API,以便从这个流行的社交媒体平台上获取数据。新浪SDK(Software Development Kit)提供了与新浪微博交互所需的接口和工具。 首先,我们需要理解C#...

    新浪微博api接口开发实例c#

    2.获取当前登录用户及其所关注用户的最新微博消息 (别名: statuses/home_timeline) 3.获取用户发布的微博消息列表 4.获取@当前用户的微博列表 5.获取当前用户发送及收到的评论列表 6.获取当前用户发出的评论 7....

    新浪 sina微博api接口开发实例c#,asp.net版 用户获取,发布微博

    2.获取当前登录用户及其所关注用户的最新微博消息 (别名: statuses/home_timeline) 3.获取用户发布的微博消息列表 4.获取@当前用户的微博列表 5.获取当前用户发送及收到的评论列表 6.获取当前用户发出的评论 7....

    行业分类-设备装置-一种基于微博timeline的媒体数据发布方法和装置.zip

    标题中的“行业分类-设备装置-一种基于微博timeline的媒体数据发布方法和装置”表明了这个文件内容涉及的是信息技术领域,特别是与社交媒体、数据分析以及设备装置相关的一种创新方法和装置。这种技术可能涉及到如何...

    新浪微博安卓开发API

    在安卓平台上进行新浪微博开发,开发者可以利用一系列API接口来实现各种功能。这些API主要分为以下几个类别: 1. **微博读取接口**: - `statuses/public_timeline`:获取最新的公共微博,展示热门话题。 - `...

    网易微博SDK及示例源码

    T163SDK访问网易微博API了。 示例程序演示如何使用web和winform调用网易微博接口验证,收发信息,上传图片等。 部分微博接口 方法名 微博列表(Timeline) 获取当前登录用户关注用户的最新微博列表(statuses/home_...

    调用新浪微博DEMO

    在IT行业中,微博API的使用是一项常见的任务,特别是在社交媒体分析、数据抓取和自动化发布等领域。本示例涉及的是调用新浪微博的DEMO,通过OAuth认证实现与微博平台的交互,获取所需信息。OAuth是一种授权协议,...

    sina微博错误代码

    在使用Sina微博API进行开发时,可能会遇到各种错误代码,这些代码对于开发者来说是至关重要的反馈,它们帮助开发者定位问题并进行修正。本文将详细解析Sina微博API中常见的错误代码及其含义,帮助开发者更好地理解和...

    weibo.sdk.android.demo

    为了展示最新的微博动态,应用需要定时或在用户触发时调用`statuses/home_timeline`接口。返回的数据需解析并填充到ListView或RecyclerView中。"weibosdk_demo"可能封装了这个过程,包括网络请求、数据解析和UI更新...

    腾讯微博demo

    《腾讯微博API应用开发详解——基于QWeiBoShare demo》 在互联网社交领域,微博作为信息传播的重要载体,其开放平台为开发者提供了丰富的接口,使得我们可以构建自己的客户端应用。本篇将围绕“腾讯微博demo”展开...

    新浪微博的Node封装nodeweibo.zip

    node-weibo v2.0 是对新浪微博的API的封装,基于Node.js,认证方式采用OAuth2.相对node-weibo v2.0之前版本的特性有:(1)更加易于后面的拓展,比如新增函数,不会影响旧版本的使用(2)更加高效和管理,尊重微博API的...

    基于Python的新浪微博位置数据获取方法研究.zip

    获取位置数据时,可能需要调用`statuses/user_timeline`接口,该接口返回用户的最新微博,其中包含位置信息。 7. **数据清洗与存储**:获取到位置数据后,可能需要进行数据清洗,如去除空值、异常值,统一数据格式...

    android新浪微博实例,登录,获取微博信息

    常见的API接口有获取用户信息的/user/info,获取最新微博的/statuses/home_timeline等。需要注意的是,这些API调用可能需要根据返回的Refresh Token定期更新access_token,以保持登录状态的有效性。 在实际开发中,...

Global site tag (gtag.js) - Google Analytics