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工作人员沟通无果,但数据不全其实是比较致命的,但是本次应用开发经验对其他应用功能开发依然有借鉴意义]