当前位置: 首页 > news >正文

快手开放平台对接内容管理demo

其中包括用户授权,获取accessToken,获取用户信息,自动上传视频,发布视频,视频列表,删除视频等

<?php
namespace app\controller;use app\BaseController;
use think\Exception;
use think\facade\App;class KuaiShou extends BaseController
{private $accessToken = "";private $appId = "";private $appSecret = "";private $uploadToken; // 上传令牌private $endpoint;//上传网关的域名private $redirectUri = '';/*** 用户授权* */public function authorize($name = 'ThinkPHP6'){// 要请求的 URL$url = 'https://open.kuaishou.com/oauth2/authorize?';$params = ['app_id'                    => $this->appId,  // 应用唯一标识'scope'                     => 'user_info,user_base,user_video_publish,user_video_delete,user_video_info', // code'response_type'             => 'code','redirect_uri'              => $this->redirectUri,// 应用授权作用域,多个授权作用域以英文逗号(,)分隔'state'                     => '123456789', //安全参数,标识和用户或者设备相关的授权请求。建议开发者实现。回调的时候会带回。'ua'                        => 'pc', // 运行环境,普通网页传pc, H5网页不传此参数即可];//// 调用 CURL GET 请求方法$result = $this->performCurlGetRequestWithParameters($url,$params);exit;}/*** 获取access_token* */public function getAccessToken(){$url = "https://open.kuaishou.com/oauth2/access_token?";$data = ['app_id' => $this->appId,'app_secret' => $this->appSecret,'code' => 'b0881372a93aa4434335c4d3e9a1773dcc8cd759c65b965a727a6ec18b85699867841685','grant_type' => 'authorization_code',];$result = $this->performCurlGetRequestWithParameters($url,$data);dd($result);}/*** 刷新token* */public function refreshAccessToken(){$url = "https://open.kuaishou.com/oauth2/refresh_token?";$data = ['app_id' => $this->appId,'app_secret' => $this->appSecret,"refresh_token" => "ChJvYXV0aC5yZWZyZXNoVG9rZW4SoAEWZ1a48M_hdbBMnUf1R2Tep9mcpFOllaVLX_uHdVL-1D7pLxV1PrdS-cy44h1ecc8LaWeyA6By76joHJXUE8LHnPjWSq1lotOS1a4GczDxoDo9bAzkoln3lGdTxh3OaHkuXUAPku_IW7H7ql81DPORYZmVK6RQHNb3EVkLBuelvp9nxTwThxZxUYe1LZcMsKGAsbFrXtfMaIhrXclDfIVTGhJmpGi_HIZyL3299lSodYIPN3UiIInoA_U1haHPefAICe8rsnU1-tjTZu3NxcCPR3vzLlERKAUwAQ",'grant_type' => 'refresh_token',];$result = $this->performCurlGetRequestWithParameters($url,$data);dd($result);}/*** 获取用户信息* */public function getUserInfo(){$url = "https://open.kuaishou.com/openapi/user_info?";$data = ['app_id' => $this->appId,'access_token' => $this->accessToken];$result = $this->performCurlGetRequestWithParameters($url,$data);dd($result);}/*** 获取用户手机号码* */public function getUserPhone(){$url = "https://open.kuaishou.com/openapi/user_phone?";$data = ['app_id' => $this->appId,'access_token' => $this->accessToken];$result = $this->performCurlGetRequestWithParameters($url,$data);dd($result);}/*** 发起上传* */public function startUpload(){$url = "https://open.kuaishou.com/openapi/photo/start_upload?";$data = ['app_id' => $this->appId,'access_token' => $this->accessToken];$params = '';foreach ($data as $key => $val) {$params .= "$key=$val&";}$url .= rtrim($params, '&');$res = $this->sendPostRequest($url);$res = json_decode($res, true);if ($res['result'] == 1) {$this->uploadToken = $res['upload_token'];$this->endpoint = $res['endpoint'];}}/*** 视频上传 FormData* */public function uploadForFormData(){$basePath = App::getBasePath();// 构造runtime文件夹的完整路径$runtimePath = $basePath . '../runtime/storage/';;// 获取表单上传文件 例如上传了001.jpg$file = request()->file('file');// 上传到本地服务器$savename = \think\facade\Filesystem::putFile( 'topic', $file);$url = "http://{$this->endpoint}/api/upload/multipart?upload_token={$this->uploadToken}";$file_path = $runtimePath.$savename;$result = $this->sendPostFileRequest($url, $file_path);dd($result);}/*** body二进制 视频上传* */public function uploadForBinaryData(){$basePath = App::getBasePath();// 构造runtime文件夹的完整路径$runtimePath = $basePath . '../runtime/storage/';;// 获取表单上传文件 例如上传了001.jpg$file = request()->file('file');// 上传到本地服务器$savename = \think\facade\Filesystem::putFile( 'topic', $file);$url = "http://{$this->endpoint}/api/upload?upload_token={$this->uploadToken}";$file_path = $runtimePath.$savename;$result = $this->sendPostBinaryDataRequest($url, $file_path);dd($result);}/*** 分片上传* */public function uploadFragment(){$basePath = App::getBasePath();// 构造runtime文件夹的完整路径$runtimePath = $basePath . '../runtime/storage/';;// 获取表单上传文件 例如上传了001.jpg$file = request()->file('file');// 上传到本地服务器$savename = \think\facade\Filesystem::putFile( 'topic', $file);$file_path = $runtimePath.$savename;// 使用示例$chunkSize = 1024 * 1024 * 2; // 分片大小,例如:1MB$chunks = $this->splitFileIntoChunks($file_path, $chunkSize);$is_file = false;foreach ($chunks as $k => $chunk) {// 对每个分片进行处理,例如上传到服务器或写入到另一个文件$url = "http://{$this->endpoint}/api/upload/fragment?fragment_id={$k}&upload_token={$this->uploadToken}";$result = $this->sendPostBinaryDataRequest($url, $chunk, $is_file);}echo $k;}/*** 断点续传* */public function uploadResume(){$endpoint = "upload.kuaishouzt.com";$url = "http://{$endpoint}/api/upload/resume?upload_token={$this->uploadToken}";$this->performCurlGetRequestWithParameters($url);}/*** 完成分片上传* */public function uploadComplete(){$fragment_count = 10;$url = "http://{$this->endpoint}/api/upload/complete?upload_token={$this->uploadToken}&fragment_count={$fragment_count}";$this->sendPostRequest($url);}function splitFileIntoChunks($filePath, $chunkSize) {$fileHandle = fopen($filePath, 'rb'); // 以二进制读取模式打开文件if ($fileHandle === false) {return false;// 如果文件打开失败,返回false}$chunks = [];while (!feof($fileHandle)) {$buffer = fread($fileHandle, $chunkSize);// 读取文件的一个片段if ($buffer === false) {break;// 如果读取失败,跳出循环}$chunks[] = $buffer; // 将片段添加到数组中}fclose($fileHandle); // 关闭文件句柄return $chunks;// 返回包含所有片段的数组}/*** 发布视频* */public function publish(){$basePath = App::getBasePath();// 构造runtime文件夹的完整路径$runtimePath = $basePath . '../runtime/storage/';;// 获取表单上传文件 例如上传了001.jpg$file = request()->file('file');// 上传到本地服务器$savename = \think\facade\Filesystem::putFile( 'topic', $file);$file_path = $runtimePath.$savename;$url = "https://open.kuaishou.com/openapi/photo/publish?";$data = ['app_id' => $this->appId,'access_token' => $this->accessToken,'upload_token' => $this->uploadToken,];$params = '';foreach ($data as $key => $val) {$params .= "$key=$val&";}$url .= rtrim($params, '&');$title = "分片";$res = $this->sendPostFileRequest1($url,$file_path,$title);dd($res);}/*** 查询用户视频列表* */public function userVideoList(){$url = "https://open.kuaishou.com/openapi/photo/list?";$data = ['access_token'	=> $this->accessToken,'app_id'	=> $this->appId];$this->performCurlGetRequestWithParameters($url, $data);}/*** 删除视频* */public function deleteVideo(){$url = "https://open.kuaishou.com/openapi/photo/delete?";$data = ['access_token'	=> $this->accessToken,'app_id'	=> $this->appId,'photo_id' => '3xurpbkusbyh6hw'];$params = '';foreach ($data as $key => $val) {//if ($key=='redirect_uri') $val = urlEncode($val);$params .= "$key=$val&";}$url .= rtrim($params, '&');$res = $this->sendPostRequest($url);dd($res);}/*** params string $url 请求的url* $file_path 文件路径* */public function sendPostFileRequest1($url,$file_path, $title){// 初始化cURL会话$ch = curl_init();// 设置目标URLcurl_setopt($ch, CURLOPT_URL, $url);// 启用POST方法,并设置请求体的类型为multipart/form-datacurl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, array('cover' => new \CURLFile($file_path),'caption' => $title));curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// 为cURL会话设置适当的请求头curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data'));// 设置cURL选项,以便将响应结果直接作为字符串返回,而不是输出到浏览器curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// 执行cURL请求并获取结果$response = curl_exec($ch);// 检查是否有错误发生if (curl_errno($ch)) {echo 'cURL error: ' . curl_error($ch);}// 关闭cURL会话curl_close($ch);// 输出响应结果echo $response;return $response;}public function sendPostBinaryDataRequest($url, $binaryData, $is_file = true){// 初始化cURL会话$ch = curl_init();// 设置目标URL,替换{endpoint}为实际的服务器地址// 设置请求头$headers = array('Content-Type: video/mp4');if ($is_file) {// 准备二进制数据,这里假设$binaryData是文件的二进制内容$binaryData = file_get_contents($binaryData);}// 替换为实际的文件二进制内容// 设置cURL选项curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);curl_setopt($ch, CURLOPT_POSTFIELDS, $binaryData);// 设置cURL选项,以便将响应结果直接作为字符串返回,而不是输出到浏览器curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// 执行cURL请求$response = curl_exec($ch);// 检查是否有错误发生if(curl_errno($ch)) {echo 'cURL error: ' . curl_error($ch);}// 关闭cURL会话curl_close($ch);// 输出响应结果return $response;}public function sendPostFileRequest($url,$file_path ){// 初始化cURL会话$ch = curl_init();// 设置目标URLcurl_setopt($ch, CURLOPT_URL, $url);// 启用POST方法,并设置请求体的类型为multipart/form-datacurl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, array('file' => new \CURLFile($file_path),));// 为cURL会话设置适当的请求头curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data'));// 设置cURL选项,以便将响应结果直接作为字符串返回,而不是输出到浏览器curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// 执行cURL请求并获取结果$response = curl_exec($ch);// 检查是否有错误发生if (curl_errno($ch)) {echo 'cURL error: ' . curl_error($ch);}// 关闭cURL会话curl_close($ch);// 输出响应结果echo $response;return $response;}public function sendPostRequest($url, $data = array(), $headers = array()) {// 创建 curl 实例$ch = curl_init();// 设置请求 URLcurl_setopt($ch, CURLOPT_URL, $url);// 设置 POST 请求方式curl_setopt($ch, CURLOPT_POST, 1);// 设置请求头为 application/json//$headers[] = "Content-Type: application/json";if ($data) {// 将数据以 JSON 格式发送curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));}curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);// 忽略 SSL 认证curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);// 设置cURL选项,以便将响应结果直接作为字符串返回,而不是输出到浏览器curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// 执行 curl 请求$response = curl_exec($ch);// 获取响应代码$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);// 关闭 curl 连接curl_close($ch);return $response;}function performCurlGetRequestWithParameters($url, $parameters = []) {// 构建带有参数的 URL$params = '';foreach ($parameters as $key => $val) {//if ($key=='redirect_uri') $val = urlEncode($val);$params .= "$key=$val&";}$url .= rtrim($params, '&');header("Content-Type: application/json");header("Location: $url");die();var_dump($url);exit;// 执行 CURL GET 请求$this->performCurlGetRequest($url);}/*** 执行 CURL GET 请求的方法** @param string $url 要请求的 URL* @return string 请求的结果*/function performCurlGetRequest($url,$data = array()) {// 初始化 CURL$ch = curl_init();// 设置请求方式为 GETcurl_setopt($ch, CURLOPT_HTTPGET, true);// 设置要请求的 URLcurl_setopt($ch, CURLOPT_URL, $url);// 禁用 SSL 证书验证curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// 设置默认的头部信息$headers = ['Content-Type: application/json'];curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);// 将数据以 JSON 格式发送curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));// 执行请求$result = curl_exec($ch);// 检查请求是否成功if (curl_errno($ch)) {// 处理请求失败的情况echo "CURL 请求失败: ". curl_error($ch);return;}// 关闭 CURL 连接curl_close($ch);// 返回请求结果return $result;}}
http://www.lryc.cn/news/334784.html

相关文章:

  • 2024年32款数据分析工具分五大类总览
  • WPS的JS宏如何批量实现文字的超链接
  • 0203逆矩阵-矩阵及其运算-线性代数
  • 加州大学欧文分校英语基础语法专项课程03:Simple Past Tense 学习笔记(完结)
  • 基于Java微信小程序的医院挂号小程序,附源码
  • 7.网络编程-安全
  • 信息泄露漏洞的JS整改方案
  • WKWebView的使用
  • iOS MT19937随机数生成,结合AES-CBC加密算法实现。
  • 阿里云2024年优惠券获取方法及使用教程详解
  • hadoop中hdfs的fsimage文件与edits文件
  • 最新版两款不同版SEO超级外链工具PHP源码
  • .net框架和c#程序设计第二次测试
  • 芒果YOLOv8改进组合157:动态标签分配ATSS+新颖高效AsDDet检测头组合改进,共同助力VisDrone涨点1.8%,小目标高效涨点
  • 自媒体内容创作助手:7款必备ai写作工具一览! #学习方法#科技#其他
  • 文心一言 vs GPT-4 -- 全面横向比较
  • Leetcode C语言习题
  • 比 Nest.js 更优雅的 TS 控制反转策略 - 依赖查找
  • java算法day43 | 动态规划part05 ● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零
  • STM32无刷电机全套开发资料(源码、原理图、PCB工程及说明文档)
  • 工地安全监测识别摄像机
  • 【零基础学数据结构】顺序表实现书籍存储
  • 【智能算法】黑寡妇优化算法(BWO)原理及实现
  • C#-非托管代码
  • 计算机视觉之三维重建(7)---多视图几何(下)
  • AUTOSAR配置工具开发教程 - 开篇
  • 配置VM开机自启动
  • 工作的第四天
  • 前端开发语言概览:从HTML、CSS到JavaScript
  • 《Java面试自救指南》(专题二)计算机网络