Facebook应用开发小结

更新时间:2023-10-02 04:45:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Facebook应用开发小结

最近公司需要一个可以定时发布feed流到我们网站的官方facebook号上,是一个专页,所以焦头烂额的忙了一个星期,从完全陌生到小有感觉,还是费了不少劲的。不过facebook和人人网的形式类似,我想做个人人网应用开发的大虾应该会很快理解facebook的开发方法,那小弟就献丑了。

这样的网站和空间、状态更新异曲同工,所谓展现出来的消息就是用户在网站的操作。下面就针对我所涉及的工作,使用的是Graph API+php。

一、申请应用

首先需要申请一个应用,在https://developers.facebook.com/

点击“创建应用”后弹出上图。

App Name:将来从这个应用出来的所有信息,都会呈现一个“来自于{App Nmae}” 如图:

App Namespace:以后可以通过这个名字访问你的应用 http://apps.facebook.com/{App Namespace} Web Hosting:一个选择让facebook的一个合作伙伴Heroku(其实我也不知道这个Heroku和facebook什么关系)给你一个空间,可以将应用放到上面,类似新浪的SAE。我没有用他的,因为这个地方的代码还是要翻墙才可以使用,所以??

1

“继续”然后输入验证码申请成功。如果你想用一个小号来创建应用有可能跳回填App Name的层,并提示不是一个真实的用户之类的。申请应用的用户需要这样的条件:You need to have at least 5 total users or 10 monthly active users before you can submit your application.(facebook文档的原话,多方查询呀??),创建应用的该用户需要有5个完整好友用户或者10个活跃月的好友用户。

我无奈使用大号申请的。成功如下如。

会有一个App ID和App Secret,会成为你以后的调用API的参数。

2

Facebook应用分几类如下如,所以创建应用后需要确定你的应用的类型。我的应用是第一类。其中的Site URL是授权成功后的跳转的页面。有些地址不可用,需要尝试。

左侧导航有个App Details中需要填写完成,提交,然后才能使用。 其中所有的图标都必须按照他的要求尺寸来。

有一个关键的项,Privacy Policy URL,这个需要提供一个网页,这个网页最好是有备案的。或者上网搜一个有说明自己的应用的干什么的,需要用到授权用户的什么信息的html网页。

然后提交,出现下面的页面就是成功了。

不像新浪应用,他不需要审核。

二、API调用

1.API分类

facebook的API分为三类:Graph API,FQL,Legacy REST Graph API:有SDK可以用,还提供了一个可视化的测试工具 (https://developers.facebook.com/tools/explorer),我用的就是这个。 FQL:想SQL语句一样调用的接口,也有一个可视化工具 (https://developers.facebook.com/tools/explorer)。 Legacy REST:传统的API,具体的调用真没了解。

3

2. 部分Graph API使用说明

由于需要翻墙才能访问facebook,所以,调用接口的方式我是在网上找了个免费的国外空间(一定要是国外的,有些国内的空间也宣传是国外的,可以在上他们网站的时候查下IP是属于哪里的,最好是美国的),然后把SDK和自己的调用文件也放在这个空间里。

以PHP SDK为例: ①授权

最关键的部分,facebook采用OAuth V2.0授权。我直说授权的过程。 浏览器翻墙的情况下键入网址

https://www.facebook.com/dialog/oauth?response_type=token&display=popup&client_id={App ID}&redirect_uri={Site URL(必须和填写的应用信息中的Site URL相一致)}&scope={需要的权限,多个以英文逗号隔开}

其中的所有参数值需要urlencode处理下。 例:

https://www.facebook.com/dialog/oauth?response_type=token&display=popup&client_id=523509020905851&redirect_uri=https://developers.facebook.com/tools/explorer/callback&scope=email,publish_actions

申请的是email和public_actions权限。

然后需要你用facebook账号登陆,然后允许这个应用获取你的这两个权限中的信息。

然后跳转到你的你的Site URL,这时他的跳转地址中带有了access_token参数。如:

http://abc.sina.com/a.html#access_token={token}&expires_in={有效时间}

由于它是用#分割的,所以我跳到一个html文件,然后用js处理获取这个参数:

Window.location.hash就可以拿到#后面的字符串,然后你处理出access_token参数,在作为新的url参数跳到一个php文件:

window.location.href=\

这样在这个php文件就可以使用$_REQUEST['token']获取access_token做后续操作了。

其中的expires_in是个有效时间,单位秒。一般是一个多小时。和明显不够用。至于每个access_token可以用多久可以到这里看到

https://developers.facebook.com/tools/debug,输入你获得token就可以看到了。

接着使用这个时间很短的token获取一个长效token,一般是60天。

$facebook=new Facebook(array('appId' =>{App ID},'secret' => {App Secret})); $facebook->setAccessToken({short_live_access_token});

$long_live_access_token=$facebook->setExtendedAccessToken(); 这样这个token就可以用60天了。

至于在官方文档中提到的授权时授offline_access权限就可以长久有效的token,我没有试出来,有这个权限与没有这个权限不影响我得到的token的时间。

4

②发布涂鸦墙信息

$facebook=new Facebook(array('appId' =>{App ID},'secret' => {App Secret})); $facebook->setAccessToken($access_token); $attachment = array( 'message' => $message);

$result=$facebook->api('/'.{ID}.'/feed/',\

这个ID可以使以个人的facebook ID,也可以是你有管理员权限的专页的ID,不过想在你有管理权限的专页上发东西需要授权的manage_pages权限。

③发布照片到涂鸦墙相册

$facebook=new Facebook(array('appId' =>{App ID},'secret' => {App Secret})); $attachment=array('access_token'=>$access_token); /*one*/

$account_array=$facebook->api(\/*two*/

foreach($account_array['data'] as $value) {

if($value['id']=={专页ID}) { $fb_qyer_admin=$value['access_token'];

} }

$attachment = array ( 'access_token' =>$fb_qyer_admin, 'message' => {message}, 'url' =>{images的完整url(不可以是本地的盘符地址)} ); /*three*/

//$facebook->setFileUploadSupport(true); $url='/'.{相册ID}.'/photos/'; /*fore*/

$result=$facebook->api($url,\

解释:

①facebook是一个空间类型的SNS,他有feed流中有图片的,但是那并不是像微博那样的带图微博,而是你上传了一张图片到自己的相册或者专页的相册,在feed中被当做一个更新status出现。所以带图的文字其实是配了说明的图片,只是feed中显示的方式不相同罢了。如果上传到普通相册就是就是说“XX上传了照片到YY相册”;如果上传到“涂鸦墙相册”就会是文字下面更图片,就像带图的微博一样。

②one:如果向专页分享需要先获取该用户相对应的专页的token。

/me/accounts接口会显示该用户所管理的所有专页和应用的详细内容包括id,name,access_token等,使用这个token对专页的相册进行操作。

5

③two:由于他返回的所有专页的信息顺序可能不一定,及这次A专页是第一个,B是第二个,但有可能下次在调用的时候就换了位置,所以我第一次直接写死要第几个的access_token结果有时候就是错的。所以这里去遍历判断,找出想要的那个专页的token。

④three:这行被我注释掉了,我也没明白这个的作用,加上与否没有影响,跟踪了API发现最终通过curl发出的请求没有什么不同。看看大家又没什么发现。

⑤fore:在这了我写成上面那样,var_dump($result);就什么都不输出,甚至连个null都没有。但是写成:

var_dump($facebook->api($url,\或者

return $facebook->api($url,\

就可以拿到值。找到原因,应该是php的不了解,还望大虾指点。

成功的返回一个数组:

{\这条记录的ID(可以通过www.facebook.com/ID访问该条记录)},\形式是“数字_数字”的形式(也可以像上面的方式访问)}} ④获取likes和commentary

$result=$facebook->api(\记录ID}.\所有的查询类接口都有limit参数,显示返回条数。

$result['likes']['data']和$result['comments']['data']即为赞的信息和评论的信息。

三、小结

其实API都大同小异只要看懂了文档,就很好使用。虽然相比较新浪微博的API文档来说不是很详细,但是还是有不尽如人意的地方,也有可能是因为英文的缘故,即时翻译过来或者自己看懂了也和中文的文档所指的不是一个东西,在一些概念上不太相同,所以看起来觉得不是很好,导致在前期的摸索阶段总是碰壁。

6

本文来源:https://www.bwwdw.com/article/ek5d.html

Top