app_id = $param['app_id']; if ($param['app_secret'] != '') $this->app_secret = $param['app_secret']; if ($param['user_id'] != '') $this->user_id = $param['user_id']; if ($param['channel_id'] != '') $this->channel_id = $param['channel_id']; $this->timestamp = time() * 1000; } /** * Notes:h5创建SDK参数 * Created on: 2022/5/12 15:21 * Created by: dengbw * @return array */ function getLiveSdk() { $params_sign = [ 'appId' => $this->app_id, 'channelId' => $this->channel_id, 'timestamp' => $this->timestamp, ]; $sign = $this->getSign($params_sign); return ['channelId' => $this->channel_id, 'sign' => $sign, 'timestamp' => $this->timestamp, 'appId' => $this->app_id]; } /** * Notes:获取参数 * Created on: 2022/5/16 17:38 * Created by: dengbw * @return array */ function getLiveParam() { return ['appId' => $this->app_id, 'app_secret' => $this->app_secret, 'user_id' => $this->user_id, 'channelId' => $this->channel_id]; } /** * Notes:分页查询频道直播观看详情数据 * https://help.polyv.net/index.html#/live/api/channel/viewdata/viewlog_page * Created on: 2022/2/11 16:52 * Created by: dengbw * @param array $params * @return bool|string */ function getViewLog($params = []) { $params_sign = array( 'appId' => $this->app_id,//账号appid 'timestamp' => $this->timestamp,//当前13位毫秒级时间戳,3分钟内有效 ); $params['sessionIds'] && $params_sign['sessionIds'] = $params['sessionIds'];//场次ID, 多个场次使用,分隔 $params['page'] && $params_sign['page'] = $params['page'];//当前页码,默认为1 $params['pageSize'] && $params_sign['pageSize'] = $params['pageSize'];//每页显示的数据条数,默认每页显示1000条数据 $params['currentDay'] && $params_sign['currentDay'] = $params['currentDay'];//查询日期,格式:yyyy-MM-dd $params['startTime'] && $params_sign['startTime'] = $params['startTime'];//查询开始时间,为13位毫秒级时间戳 $params['endTime'] && $params_sign['endTime'] = $params['endTime'];//查询结束时间,13位毫秒级时间戳 $params['param1'] && $params_sign['param1'] = $params['param1'];//观看用户ID,默认查询全部 $params['param2'] && $params_sign['param2'] = $params['param2'];//观看用户昵称,默认查询全部 $params['param3'] && $params_sign['param3'] = $params['param3'];//观看日志类型,默认查询全部vod:观看回放 live:直播 $sign = $this->getSign($params_sign); $parts = http_build_query($params_sign); $url = $this->url . "/v2/statistics/{$this->channel_id}/viewlog?{$parts}&sign={$sign}"; return $this->curlGet($url); } /** * Notes:查询频道多场次概览统计数据 * https://help.polyv.net/index.html#/live/api/channel/viewdata/get_session_stats * Created on: 2022/2/9 16:40 * Created by: dengbw * @param array $params ['sessionIds' => 'g6uy09qeuq', 'startTime' => '1644310918000', 'endTime' => '1644318322000'] * @return bool|string */ function getSessionStats($params = []) { $params_sign = array( 'appId' => $this->app_id,//账号appid 'timestamp' => $this->timestamp,//当前13位毫秒级时间戳,3分钟内有效 'userId' => $this->user_id, 'channelId' => $params['channelId'] ? $params['channelId'] : $this->channel_id,//频道号 ); $params['sessionIds'] && $params_sign['sessionIds'] = $params['sessionIds']; //场次ID,多个场次使用逗号分隔,如:fw82mayhuy,fvipafupmh,场次ID和直播开始结束时间必填一项,场次ID和直播开始结束时间同时存在时,使用场次ID进行查询 $params['startTime'] && $params_sign['startTime'] = $params['startTime'];//直播开始时间,13位毫秒级时间戳,开始时间和结束时间相隔不可以超过30天 $params['endTime'] && $params_sign['endTime'] = $params['endTime'];//直播结束时间,13位毫秒级时间戳,场次ID和直播开始结束时间必填一项 $sign = $this->getSign($params_sign); $parts = http_build_query($params_sign); $url = $this->url . "/v3/channel/statistics/get-session-stats?{$parts}&sign={$sign}"; return $this->curlGet($url); } /** * Notes:查询频道某段时间的直播观看详情数据 * https://help.polyv.net/index.html#/live/api/channel/viewdata/summary * Created on: 2022/2/8 17:45 * Created by: dengbw * @param array $params ['channelId' => '2797712', 'startDay' => '2022-01-01', 'endDay' => '2022-02-08'] * @return bool|string */ function summary($params = []) { $params_sign = array( 'appId' => $this->app_id, 'timestamp' => $this->timestamp, 'startDay' => $params['startDay'], 'endDay' => $params['endDay'], ); $sign = $this->getSign($params_sign); $parts = http_build_query($params_sign); $url = $this->url . "/v2/statistics/{$params['channelId']}/summary?{$parts}&sign={$sign}"; return $this->curlGet($url); } /** * Notes:查询频道直播观看详情数据 * https://help.polyv.net/index.html#/live/api/channel/viewdata/viewlog_2 * Created on: 2022/2/8 16:08 * Created by: dengbw * @param array $params ['channelId' => '2797712', 'currentDay' => '2022-01-28'] * @return bool|string */ function viewLog($params = []) { $params_sign = array( 'appId' => $this->app_id, 'timestamp' => $this->timestamp, 'currentDay' => $params['currentDay'], 'userId' => $this->user_id, 'param1' => $this->user_id, ); $sign = $this->getSign($params_sign); $parts = http_build_query($params_sign); $url = $this->url . "/v1/statistics/{$params['channelId']}/viewlog?{$parts}&sign={$sign}"; return $this->curlGet($url); } /** * Notes:获取频道 * Created on: 2022/2/8 15:54 * Created by: dengbw * @return bool|string //{"status":"success","result":[2797712]} */ function channels() { $sign = $this->getSign(); $url = $this->url . "/v1/users/" . $this->user_id . "/channels?appId=" . $this->app_id . "×tamp=" . $this->timestamp . "&sign=" . $sign; return $this->curlGet($url); } /** * Notes:获取签名 * Created on: 2022/2/8 15:50 * Created by: dengbw * @param $params * @return string */ function getSign($params = '') { if (!$params) { $params = array( 'appId' => $this->app_id, 'timestamp' => $this->timestamp ); } // 1. 对加密数组进行字典排序 foreach ($params as $key => $value) { $arr[$key] = $key; } sort($arr); $str = $this->app_secret; foreach ($arr as $k => $v) { $str = $str . $arr[$k] . $params[$v]; } $restr = $str . $this->app_secret; $sign = strtoupper(md5($restr)); return $sign; } /** * Notes:Get请求 * Created on: 2022/2/8 15:51 * Created by: dengbw * @param string $url * @return bool|string */ public function curlGet($url = '') { $ch = curl_init() or die (curl_error()); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 360); $data = curl_exec($ch); curl_close($ch); $data = trim($data, chr(239) . chr(187) . chr(191)); $data = json_decode($data, true); return $data; } /** * Notes:Post请求 * Created on: 2022/2/8 15:51 * Created by: dengbw * @param string $url * @param string $postData * @param array $options * @return bool|string */ public function curlPost($url = '', $postData = '', $options = array()) { if (is_array($postData)) { $postData = http_build_query($postData); } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); curl_setopt($ch, CURLOPT_TIMEOUT, 30); //设置cURL允许执行的最长秒数 if (!empty($options)) { curl_setopt_array($ch, $options); } //https请求 不验证证书和host curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); $data = curl_exec($ch); curl_close($ch); $data = trim($data, chr(239) . chr(187) . chr(191)); $data = json_decode($data, true); return $data; } }