搜档网
当前位置:搜档网 › Facebook API 入门

Facebook API 入门

Facebook API 入门
Facebook API 入门

Facebook API 入门

Facebook 商业价值简介

Facebook 是一个社交网络服务网站,于2004 年2 月4 日上线,到2010 年2 月2 日,Facebook 正赶超雅虎将成为全球第三大网站,与微软谷歌领衔前三。Facebook 一个月内增加的新用户量相当于雅虎一年所增加的用户量,当前的注册用户为 3.5 亿,这些用户中有一半的人每天都会访问网站。面对如此庞大和活跃的的用户群体,企业已经看到了它所蕴含的巨大商机。许多品牌都在Facebook 上创建了企业账户,收集用户对产品的的评论反馈信息,及时对自己的产品和品牌做出调整,抢占市场先机。目前市场上有很多优秀的舆情智能分析工具,可以海量分析网络上各种媒体介质的信息,通过数据挖掘技术分析出用户的喜好和潜在的购买行为。

Facebook API 简介

获取Facebook 的数据最常用的途径是通过web 页面,以Coca-Cola 为例,用户可以登陆https://www.sodocs.net/doc/ee13217599.html,/cocacola从页面上获得各种数据,包括用户对该产品的评论、产品相册等。Facebook 前端界面做得非常友好,采用了很多最新的UI 技术,可以带来比较好的用户体验。类似的前端展示技术服务的对象是人,而程序在处理非结构化数据的时候有很多困难,随着前端页面布局的不断更新,仅仅使用网络爬虫的手段很难保证抓取信息的准确性。

图 1. facebook

Facebook 为了解决第三方程序访问数据的问题推出了一套Facebook API 平台,叫做Graph API。它让普通用户可以读写在Facebook Social Graph 的各种对象,这套API 设计得非常简单,开发人员不需要花大量时间阅读文档,在最短的时间内就可以上手。读者可以访问https://www.sodocs.net/doc/ee13217599.html,/docs/api 获得更多信息。

Facebook API 开发入门

RESTful 方法获取数据

以Coca-Cola 的Facebook 为例,如果我们想获得其它用户在其涂鸦墙(Wall) 上的评论,我们要做的仅仅是在浏览器中输入: https://https://www.sodocs.net/doc/ee13217599.html,/cocacola/feed, 系统将会以JSON 数组格式返回结果。

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。

图 2. 获得其它用户在其涂鸦墙(Wall) 上的评论

数据中包含了消息的ID、消息内容、作者、作者ID、发布时间等各种消息。不仅涂鸦墙(Wall),所有的Facebook 对象都可以用如下的URL 结构访问:https://https://www.sodocs.net/doc/ee13217599.html,/ID/CONNECTION_TYPE,下表列出了一些常用的对象。

Facebook对象访问方式

好友列表(Friends) https://https://www.sodocs.net/doc/ee13217599.html,/{ID}/friend s

新闻(News feed) https://https://www.sodocs.net/doc/ee13217599.html,/{ID}/home

用户喜好(Likes) https://https://www.sodocs.net/doc/ee13217599.html,/{ID}/likes

电影(Movies) https://https://www.sodocs.net/doc/ee13217599.html,/{ID}/movies

书籍(Books) https://https://www.sodocs.net/doc/ee13217599.html,/{ID}/books

相册(Photo Albums) https://https://www.sodocs.net/doc/ee13217599.html,/{ID}/albums

上传视频(V ideo Uploads) https://https://www.sodocs.net/doc/ee13217599.html,/{ID}/videos/uploaded

组(Groups) https://https://www.sodocs.net/doc/ee13217599.html,/{ID}/groups

只有该对象是public 的状态下才能直接通过以上方法访问,如果是private 的,需要提供access token 访问,文章的下面部分有对应的章节介绍。

JSON 解析框架处理数据

如果用Java 语言开发系统,拿到JSON 对象后我们还需要做一个JSON 对象到Java 对象的转换工作。当前有比较多的JSON 解析框架。在https://www.sodocs.net/doc/ee13217599.html,上公布了很多Java 下的JSON 解析工具,其中org.json 和json-lib 比较简单,两者的使用几乎是相同的,但是org.json 比json-lib 要轻量很多,前者没有任何依赖,而后者要依赖其它组件。利用org.json 处理JSON 非常简单,下面是一段获取Coca-Cola 涂鸦墙(Wall) 信息的代码片段。

/*

* Extract message from JSON format

* @param sb

* JSON content

*/

private

static

void getMessages(String sb) throws JSONException{

JSONObject jsonObj=new JSONObject(sb);

JSONArray array=new JSONArray(jsonObj.getString("data"));

for(int i=0;i

jsonObj=array.getJSONObject(i);

if(jsonObj.has("message"))

System.out.println("Facebook message: "+jsonObj.getString("message"));

}

}

除了自己处理JSON 到Java 的转换外,我们也有很多优秀的开源框架可供选择,比如RestFB。它不仅可以完成数据的转换,还对Graph API 进行了更好的封装,让用户不用过多了解Graph API 的技术细节。

Facebook API 开发进阶

使用access token 访问涂鸦墙

在上面的例子中,我们访问的Coca-Cola 公司涂鸦墙(Wall) 是Public 的属性,所有人都可以查看上面的内容,不需要任何的鉴权。但是大多数个人账户的涂鸦墙的属性都是private,需要提供正确的token 才能访问。

Facebook Graph API 使用OAuth 2.0 作为权限控制,它是一个简化版的OAuth, 利用SSL 协议作为API 的通信,而不是复杂的URL 签名和token 交换。使用access token 的方法特别简单,如果你想查看自己的朋友列表,URL 的的形式如下所示:https://https://www.sodocs.net/doc/ee13217599.html,/me/friends?access_token=XXXX me 是参数中的关键字,代表自己的ID,如果想访问别人的涂鸦墙,就应该用ID 来唯一确定一个用户。Access token 参数后面是一个系统随机的字符串。

获得ID 和Access token

前面概述了怎样使用access token 访问private 的涂鸦墙,下面将介绍一种获得ID 和access token 的方法。

首先登陆自己的Facebook 账户后,将鼠标移到头像位置,在浏览器的下面的URL 就包含该账户对应的唯一ID。

图 3. 获得ID 和access token 的方法

在浏览器里面打开一个新的页,访问如下网址: https://www.sodocs.net/doc/ee13217599.html,/docs/api, 点击该页中的一个链接,如下所示:

图 4. 访问如下网址

我们在浏览器的地址栏就可以看到访问自己账户的access token 了,从图中可以看到朋友列表也是以JSON 格式返回,包含了name 和id 属性。

图 5. 返回信息

为了验证access token 的有效性,可在浏览器中输入空的access token 或者错误的access token,比如: https://https://www.sodocs.net/doc/ee13217599.html,/me/friends,服务器将返回异常提示用户输入token。这种鉴权机制不仅十分有效的利用了RESTful 技术的简单易用的优点,又很好地保护了用户的隐私数据。

图 6. 验证access token 的有效性

使用FQL 访问Facebook 数据

FQL(Facebook Query Language) 是Facebook 提供给应用开发者使用的一种类似SQL 的数据库查询语言,FQL 相对其它的API 有如下优势:

1. FQL 提高网络利用效率。如果使用Graph API 来获取数据,你将获得记录的所有属性,包括你不需要的部分属性。而通过FQL 的select 语句,可以只取出需要的数据,在大数据量的情况下可以减少网络资源消耗。

2. FQL 提高执行效率。对于复杂的请求,FQL 能有效减少对服务器的请求次数。实际上,Graph API 调用是经过底层的FQL 进行包装过的,如果直接使用FQL 能得到性能上的提升。

3. FQL 与语言无关,Facebook 的API 有几个版本,比如: php、java 等,如果工作在多语言编程环境,FQL 无疑是种很好的选择。

如果你以前用过SQL,就会发现FQL 语法和SQL 几乎一致,只是在SQL 的基础上做了一些小的限制,比如:从效率考虑,FQL 不支持select * 这样一次取出所有属性。

可以使用https://https://www.sodocs.net/doc/ee13217599.html,/method/fql.query?query=QUERY的方式执行SQL,查询条件的结构类型:SELECT [fields] FROM [table] WHERE [conditions] ,我们还是通过获取Coca-Cola 涂鸦墙的数据示例FQL 的用法,在这个示例中将取出第一条用户的评论:

图7. 取出第一条用户的评论

只需要在浏览器中输入https://https://www.sodocs.net/doc/ee13217599.html,/method/fql.query?&query=SELECT message FROM stream WHERE post_id= '40796308305_485285273305' 就可以XML 形式返回用户的评论。

图8. 以XML 形式返回用户的评论

在使用FQL 的时候需要用户了解查询对应的表结构的定义,详细的资料可以参考:https://www.sodocs.net/doc/ee13217599.html,/docs/reference/fql/

小结

提供可扩展的API 是Facebook 成功的因素之一,现在Facebook 的开发社区已经有了相当数量的应用程序,极大增强了Facebook 的功能和易用性。Facebook 提供的API 不仅仅是读取涂鸦墙和朋友列表那么简单,用户可以在它的开发社区找到许多非常有创意和实用的应用。

参考资料

学习

?在Facebook API网站查找更加详细的资料,并包含各种示例程序。

?访问百度百科了解Facebook 网站的相关背景知识。

?在JSON官网上可以查询到该规范的详细信息。

?访问该站点了解FQL 的概述,并包含了一个简单入门教程。

?RestFB是一个基于Java 语言的Facebook Graph API 扩展,可以简化Graph API 的开发。

?访问developerWorks Open source 专区获得丰富的how-to 信息、工具和项目更新以及最受欢迎的文章和教程,帮助您用开放源码技术进行开发,并将它们与IBM 产品结合使用。

?随时关注developerWorks 技术活动和网络广播。

讨论

?欢迎加入My developerWorks 中文社区。

作者简介

袁俊峰,2008 年研究生毕业于北京邮电大学网络与交互国家重点实验室,毕业后就职于IBM Global Business Solution Center,从事过SOA项目的开发和测试,目前主要从事业务分析与优化(BAO) 的工作。李倩如,2007 北京航空航天大学本科毕业,目前就职于Global Business Solution Center, BAO team。

刘涛,2007 年研究生毕业于北京理工大学自然语言处理实验室,毕业后主要从事电信系统的开发。2010 年加入IBM Global Business Solution Center , 目前主要从事BAO 系统的开发。

建议

相关主题