Facebook应用开发
1.涉及工具:
1) facebooke开发应用平台
2. 逻辑流程(操作步骤):
1) 注册/设置开发者应用 =>
2) 下载fb-PHP-SDK =>
3) 手动获取所有主播的page_id =>
4) 接口获取page信息(根据page_id)+视频ID列表(过滤留下直播视频ID列表) =>
5) 接口获取video分析数据(根据video_id)
3. 涉及的接口
1) 获取page信息接口(page_id为必填参数)
A) 接口信息如图所示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190616191546572.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2R1cmluZ25vbmU=,size_16,color_FFFFFF,t_70)
B)代码片段:
/**
* 获取主页信息
* @param string $pageId 主页ID
* @param int $monthAgo 几个月前,默认2个月
* @param int $endTime 某个时间的时间戳
*/
public function getFBPageInfo($pageId , $monthAgo = 2, $endTime = null) {
$this->fb = new Facebook\Facebook([
'app_id' => '应用ID', // 应用ID
'app_secret' => '应用secret', //应用secret
'default_graph_version' => 'v3.2', // 应用版本号,我使用的是v3.2
]);
# 默认获取当天-前两个月的数据
$currDay = strtotime(date('Y-m-d 00:00:00'));
$untilTime = !empty($endTime) && $endTime < $currDay ? $endTime : $currDay; //指定时间戳|当天凌晨
$sinceTime = strtotime("-$monthAgo month", $untilTime); //2个月前的(指定日期|今天)凌晨
//$queryStr = '1349433135167312?fields=name,global_brand_page_name,fan_count,category,id,verification_status,videos.since(1555806977).until(1556460756).limit(100){length,id,title,content_category,created_time,updated_time,live_status}'; //20190421-20190428
$queryStr = $pageId .'?fields=name,global_brand_page_name,fan_count,category,id,verification_status,videos.since('.$sinceTime.').until('.$untilTime.').limit(100){length,id,title,content_category,created_time,updated_time,live_status}'; // 获取指定时间内的主页信息+video_id列表
$response = $this->fb->get($queryStr, self::$fbAccessToken);
$data = $response->getDecodedBody();
return $data;
}
2) 获取视频详情接口(video_id为必填参数)
A) 接口信息如图所示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190616192032650.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2R1cmluZ25vbmU=,size_16,color_FFFFFF,t_70)
B) 代码片段:
/**
* 获取单个视频分析数据
* @param string $videoId 视频ID
*/
public function getFBVideoAnalysisData($videoId) {
# 获取视频详情信息(视频简介+分析数据)
$this->fb = new Facebook\Facebook([
'app_id' => '应用ID', // 应用ID
'app_secret' => '应用secret', //应用secret
'default_graph_version' => 'v3.2', // 应用版本号,我使用的是v3.2
]);
$queryStr = $videoId . '/?fields=id,length,live_status,picture,created_time,updated_time,title,content_category,video_insights{id,name,title,values}';
$response = $this->fb->get($queryStr, self::$fbAccessToken);
$data = $response->getDecodedBody();
return $data;
}
3.遇到的问题&解决方案:
1) 问题一: 如果筛选出直播视频
答: 使用 获取主页信息中的video列表中的live_status字段值进行区分,live_status="VOD"的为直播视频
2) 问题二: 如何获取指定时间范围内容的视频列表
答:fb早期是支持FQL写法的,FQL类似SQL语法的一种fb查询语句,直接通过fb接口请求FQL字符串,就可以获取查询结果,但是fb现在已经不支持FQL语法格式; 但是根据技术直觉+不断调试,发现还有有迹可循的,比如上述获取主页信息接口的截图中使用的语句就是: //$queryStr = '1349433135167312?fields=name,global_brand_page_name,fan_count,category,id,verification_status,videos.since(1555806977).until(1556460756).limit(100); 其中page_id=1349433135167312,since表示查询起始时间,until表示查询截止时间,均为时间戳格式,limit(100),表示获取查询结果的前100条数据
3)问题三: 如何实时验证fb用户登录状态
答: 因为使用的是fb的Graph-SDK(图谱API),所以直接调用获取用户信息接口即可,若登录态未失效,则返回用户信息,否则抛出异常信息: "Invalid OAuth access token."(返回该SDK中,所有请求都需要先验证access_token,而access_token生产过程:是在用户授权登录,并且登录成功后,返回的一次性code和status作为请求参数,去请求fb接口生成的access_token),因此token失效等同于用户登录态失效
4)问题四: 如何获取提高开发应用的接口使用频率上限
答:应用接口调用频率为 (200*应用用户数量)/小时,例如我的应用有三个用户,则接口调用频率为600次/小时,这个600次是应用在一个小时之内的所有用户接口总调用次数,可以是用户A 调用599次,用户B调用1次,用户C 调用0 次,而非每个用户200次;
5)问题五:如何获取用户信息和直播视频信息,需要哪些权限授权
答:因为是内部使用,所以我没有经过审核,但是审核流程并不复杂,只需要使用接口将数据导入到数据库,并展示在应用网页中,即可提交审核,但务必保证是真实数据,不要使用自己造的假数据;详情见官方文档; 若是允许公开对外部可见的话,建议细分一下权限,一来公开需要审核权限,二来可以最大程度提高用户体验![在这里插入图片描述](https://img-blog.csdnimg.cn/20190616202215503.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2R1cmluZ25vbmU=,size_16,color_FFFFFF,t_70)
6) 问题六:用户登录开发应用的前提条件
答:
有两种情况:
A)情况一:
应用已通过fb审核,对所有fb用户可见,fb用户只需使用fb账号进行授权登录即可
B)情况二:
应用未通过权限审核,仅对部分用户可见; 首先必须在应用配置中添加访问用户,然后这些访问用户,使用fb账号进行登录应用即可
C)二者相同点:
无论是否通过审核,用户都必须使用fb第三方登录,进行fb用户授权(基于Auth2.0第三方授权机制)
D)注意:因为是内部使用,所以我没有经过审核,但是审核流程并不复杂,只需要使用接口将数据导入到数据库,并展示在应用网页中,即可提交审核,但务必保证是真实数据,不要使用自己造的假数据;详情见官方文档,
7)问题七:调试工具使用及注意事项
答:
调试工具链接: https://developers.facebook.com/tools/explorer/
A)注意事项: 调试工具必须要先进行授权,用到哪些权限就进行相关授权,为了方便,我是授权所有权限,有兴趣的同步可参照官方文档进行细分
B) 调试工具调用接口后,可以保存调用记录,可以得到一个会话ID: session_id,若有问题,可以去官方平台进行bug上报,并附上session_id
C) 使用如图所示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190616202226496.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2R1cmluZ25vbmU=,size_16,color_FFFFFF,t_70)
4.注意事项:
1) 因fb视频内容版权限制,接口获取到的视频ID不全,
2) 视频部分参数随时间增长而增长,需要定时更新,
3) fb应用/接口所有操作均依赖用户授权,即只有在用户登录时/接口token有效时,才能同步/更新fb数据到本地
4) 注意应用配置问题,***因为涉及的内容和细节较多,应用配置和sdk使用细节会单独写一篇博客描述,这篇博客主要以逻辑描述为主,具体操作请见后续博客
5.小结:
1) 优点: 客户端操作简单;
2) 缺点: 涉及版本的视频数据无法获取,导致数据不全 [这涉及到fb的隐私版权限制,经和fb工作人员沟通无果,但数据不全其实是比较致命的,但是本次应用开发经验对其他应用功能开发依然有借鉴意义]