你现在的位置:首页 > PHP网站建设知识库 > facebook api > 正文

Facebook API详解

Facebook平台介绍
Facebook为开发者提供接入方法和数据的一个服务网站。我们已经制作了尽可能简单易懂的方法,还有所有相关的文档来帮助facebook开发了解更多。
Facebook开发维客
对每个在facebook平台上进行开发的人而言,这是一个很好的资源。
接口(应用程序编程接口)
Facebook的应用程序接口是用一种基于REST的接口(REST是 Representational State Transfer 的缩写,它是一种基于网络的体系架构模式。摘自Roy Fielding博士论文)这意味着我们的facebook方法调用是通过internet中用远程方法HTTP,GET,POST发送来响应我们的 REST服务。通过这些接口,你可以在使用个人信息,好友,相册和活动数据时,添加社会环境信息到你的应用中。
查询(facebook 查询语言)
Facebook查询语言或称为FQL,允许你用一个接口来用结构化查询语言风格来更简单地查询数据,你可以通过facebook的API函数来使用这个接口。
FQL是一种通过其他API函数来查询facebook相同数据的方法,但是它是一种类结构化查询语言。事实上很多常见的API调用是一种对FQL的简单封装。所有常用的保密检测都是可以被应用的。以下是一个典型的查询语句:
SELECT name, pic FROM user WHERE uid=211031 OR uid=4801660
综上所述,为什么你要使用FQL呢?用FQL主要替代我们传统的很多API方法主要优点如下:
• 浓缩的XML降低带宽和分析成本。你可以获得这个领域你要想的,仅仅是一系列条款匹配的特殊条件,代替了获取所有大量条款的有用信息。你能请求具体的信息在用WHERE语句加上某些约束的时候,还有在用SELECT语句的时候。
XML(eXtensible Markup Language的缩写。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据.摘自《XML 基础教程》作者:(美)雅可布斯 著,许劲松 等译)
                                                                  
• 更多复杂的请求更减低这些请求的必要性。通常你尝试得到的数据是依靠前一个方法的调用得到的。例如:传统的API,为了获得一个用户的好友名称,你首先要 调用friend.get方法,然后跳过这个结果调用users.getinfo得到的返回结果,现在你只执行用一个子查询得到好友信息的FQL语句,这 样减少了额外的执行开销和相关的延迟。
• 提供一个单独的一致标准的接口用于你所有的数据。为了取代不得不学习属于特殊行为大量不同的方法,你可以用一个返回一致类型数据的函数来实现你的请求。此外,如果你需要调用传统的方法,将返回一个相似的XML。所以用于调换函数的开销使微不足道的。
• 这很有趣!在FQL查询语句模板中,可以检查可用例子,尝试用测试操作台来做你的测试。其实在这种模式下你可以做很多应用来填充它。
查询语言
希望现在你已经相信FQL对你使很有用的。那么现在你该这么使用它呢?如果你已经只到SQL,那就会很简单了。查询语句就像这样:SELECT [查询内容] FROM [表] WHERE [条件] (你可以选择的添加ORDER BY 和 LIMIT 语句这样他们也会像在MYSQL中一样工作)。不像SQL,FQL语句只能涉及一张单表。在SELECT 或者WHERE语句中,你可以用IN这样的关键字来做子查询(就像在fql.query和 FQL查询语句模板中的例子一样),但是子查询不能引用查询范围以外的的参数。
MYSQL:MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司.
ORDER BY:行的排序方式,默认的为升序.
LIMIT:sql语句中操作行数。

另一种主要的约束是你的查询必须是可索引的。在你的查询语句中,你不能限制你的查询范围在一个特殊,可数的一系列序列号中,像这样,WHERE1作为WHERE语句。(FQL表显示那些列是索引)假如你违反这个规则,它将返回604错误。
FQL介绍了一种方法,用于处理一些本身是数组或者是结构体的属性列。(例如:在user表中的education_history属性列,它本身包含一 个education_info数组,或者current_location的结构体)。你可以引用整体几结构,或者你可以通过过滤,保留你所要的信息。
例如这样, 
SELECT education_history, current_location
这样得到整个结构,或者你也可以这样:
SELECT education_history.name, current_location.zip
这样就可以获得这个结构中单独的一项了。 
这是特别有用的WHERE语句。例如:
WHERE "Stanford" IN education_history.name OR current_location.zip = 07079
注:最后我例子不是可索引的,同时也需要添加对USER ID 额外的约束。
学习FQL最简单的方法就是去实践它。我们鼓励你用测试控制台来测试你的FQL语句.如果你不确定在执行WHERE语句之后会发生什么,那就确保在语句的合法性,还有SELECT语句中的合法性,使用你可以添加一些语句来检查你的语句是否在正常运行。
注意继承的属性
当用JSON作为返回类型时,一个特定的查询语句返回一个继承属性的最大值。如果3个继承属性被请求,前两个会被忽视,然而最后一个会被带着名称anon被返回。
JSON: 作为一种更轻、更友好的 Web services客户端的格式(多采用浏览器的形式或访问 REST风格 Web服务的Ajax应用程序的形式).
例如这样的FQL:
SELECT "aa", "bb", "cc", uid FROM user
用效的SQL是这样的:
SELECT "cc" AS anon, uid FROM user
如果你用XML做为返回类型,所有被请求的继承属性都会被带着anon名称被返回。
JSON与XML另一个不同点是被请求的继承的属性的顺序在XML保存下来,而在JSON中却没有。
标记(facebook标记语言)
Facebook标记能使你建立完整的facebook平台应用,能更深地结合用户的facebook开发经历。你能介入很多facebook与用户接合的点,像个人信息,个人活动,画布,Feed新闻,迷你Feed。
Feed:表示这是用来接收该信息来源更新的接口,
facebook标记语言是html的一个子集,删掉的一些元素,同时为Facebook添加了一些特定元素。你通过调用profile.setFBML 来设置FBML。直到profile.setFBML通过画布页面被再次调用时,FBML就缓存到facebook的服务器中。
安装
你应用的进入点能被配置到开发者账号表中。安装选项如下:

编辑URL(可选)
URL:统一资源定位符 (Uniform Resource Locator, URL) 
是用于完整地描述Internet上网页和其他资源的地址的一种标识方法。

这个URL应该连接到用户能配置你应用的页面, 然后是特定的,编辑URL就要被用于以下的地方:
• 在用户安装你的应用后,他们将重定位用鉴别记号重定位URL.
• 一个编辑链接将为一个用户显示在你的应用的配置盒子的标题栏上。
• 一个编辑链接将出现在一个用户进入你的应用的编辑应用页面。
   
边导航URL(可选)

在特定条件下,一个入口将出现在每一个用户拥有你应用图标和链接URL标题的边导航中。这个URL必须链接到一个facebook画布的页面。

卸载URL(可选)

在特定条件下,当一个用户卸载应用时,facebook将发送一个POST请求到这个URL。这个请求将包括以下参数:

• fb_sig_uninstall – 设置为1,表示卸载 
• fb_sig_time – 当卸载发生时,显示unix的事件
• fb_sig_user – 卸载该应用的用户ID
• fb_sig_session_key –用户和应用API的会话的标识

• fb_sig –用于描述FBML表的标识
注:当用POST发送安装应用到URL时,不设置via帐户表。同时应用也不会被通知。

画布页面URL(可选)

如果你想要创建facebook画布页面,你必须给你的页面一个特定的路径名。路径名都是唯一的,使用你不能申明另一个相同名字的应用。一旦你指定了路径名,http://apps.facebook.com/YOUR_DIRECTORY_NAME/pagex.abc 将从你的回调地址中提供pagex.abc给facebook画布页面。你也能指定你要像你的页面以FBML或者是iframe形式被加载。

默认 FBML

一旦用户安装了你的应用,FBML将显示用户的档案页面,但是在这之前你没有被用户点击过.

附件:

你的应用允许创建消息或者墙(留言板)的附件,包括附件信息和回调URL.这个操作既会出现在墙的下拉菜单中,又会出现在消息编辑器的一个按钮上。 当用户选择这个操作,这些附件内容将会从回调地址或者消息文本域中提取出来。内容包括FBML。它必须包括一个隐藏输入的URL还又其他的输入域。
这个应用在FBML使用标记fb:attachment_preview提供预览链接(这个标记之前被命名为fb_message_preview,仅仅 是在编辑器中工作,很快就不被认同了)。这个链接从隐藏的URL中提取出FBML,同时取代附件框中的内容。只要 fb:attachment_preview 标记和url包括在最新提取的内容中,预览就会重复出现。
当消息被发送时,附件框中的内容将会被检测。FBML内容从所有被发送输入表单中的隐藏地址中被提取。一个另外的隐藏输入将名为message_sent通过这个检测。最后,提取出的FBML内容被显示在信息的主体上。
开发这应该意识到发送墙附件和消息附件的不同。消息附件的最快达到360像素,而发送墙附件只达到316像素。因此,用固定的宽度或者固定的定位将有可能根据内容,造成不同地显示。

其他功能

与facebook.com互动

目前的API版本不支持在facebook.com上直接执行活动,你可以在facebook页面上定位你的用户去执行活动。为了做到这点,只要你的用户链接上以下页面就行了。
http://www.facebook.com/profile.php?id=XXXXX 
查看指定用户的档案
http://www.facebook.com/poke.php?id=XXXXX 
提醒你指定的用户(像MSN振动功能一样) 
http://www.facebook.com/message.php?id=XXXXX&subject=XXXXX&msg=XXXXX 
发动一个消息给之指定的用户,subject 和 msg 参数是可选的,在预填的信息内容中。(在发送前用户可以一直编辑消息)
http://www.facebook.com/addfriend.php?id=XXXXX 
添加指定的用户为朋友
http://www.facebook.com/photos.php?id=XXXXX 
看指定用户拍的照片
http://www.facebook.com/photo_search.php?id=XXXXX 
看指定用户的照片
http://www.facebook.com/wall.php?id=XXXXX 
读取或者发送指定用户的留言板
http://www.facebook.com/notes.php?id=XXXXX 
读取指定用户的提示信息(不鼓励你的用户滥用这个功能)