- 优化服务

v6 v6.0.129
李光春 4 years ago
parent 32f4f33140
commit 27c58aa8df

@ -1,4 +1,7 @@
## v6.0.127 / 2020-11-26 ## v6.0.129 / 2020-11-26
- 优化服务
## v6.0.128 / 2020-11-26
- 优化服务 - 优化服务
## v6.0.127 / 2020-11-25 ## v6.0.127 / 2020-11-25

@ -25,7 +25,7 @@ use DtApp\ThinkLibrary\service\SystemService;
/** /**
* 定义当前版本 * 定义当前版本
*/ */
const VERSION = '6.0.128'; const VERSION = '6.0.129';
if (!function_exists('get_ip_info')) { if (!function_exists('get_ip_info')) {
/** /**

@ -51,7 +51,7 @@ class WatermarkService extends Service
* @return $this * @return $this
* @throws DtaException * @throws DtaException
*/ */
public function url($str) public function url($str): self
{ {
if (Pregs::isLink($str)) { if (Pregs::isLink($str)) {
$url = $this->judgeUrl($str); $url = $this->judgeUrl($str);

@ -83,18 +83,6 @@ class Ks3Service extends Service
*/ */
public function upload(string $object, string $filePath): ?bool public function upload(string $object, string $filePath): ?bool
{ {
//是否使用VHOST
define("KS3_API_VHOST", FALSE);
//是否开启日志(写入日志文件)
define("KS3_API_LOG", FALSE);
//是否显示日志(直接输出日志)
define("KS3_API_DISPLAY_LOG", FALSE);
//定义日志目录(默认是该项目log下)
define("KS3_API_LOG_PATH", "");
//是否使用HTTPS
define("KS3_API_USE_HTTPS", FALSE);
//是否开启curl debug模式
define("KS3_API_DEBUG_MODE", FALSE);
require_once(__DIR__ . "/bin/Ks3Client.class.php"); require_once(__DIR__ . "/bin/Ks3Client.class.php");
$client = new Ks3Client($this->accessKeyID, $this->accessKeySecret, $this->endpoint); $client = new Ks3Client($this->accessKeyID, $this->accessKeySecret, $this->endpoint);
$content = fopen($filePath, 'rb'); $content = fopen($filePath, 'rb');

@ -4,26 +4,33 @@
date_default_timezone_set('Asia/Shanghai'); date_default_timezone_set('Asia/Shanghai');
//检测API路径 //检测API路径
if(!defined("KS3_API_PATH")) if (!defined("KS3_API_PATH")) {
define("KS3_API_PATH", dirname(__FILE__)); define("KS3_API_PATH", __DIR__);
}
//是否使用VHOST //是否使用VHOST
if(!defined("KS3_API_VHOST")) if (!defined("KS3_API_VHOST")) {
define("KS3_API_VHOST",TRUE); define("KS3_API_VHOST", FALSE);
}
//是否开启日志(写入日志文件) //是否开启日志(写入日志文件)
if(!defined("KS3_API_LOG")) if (!defined("KS3_API_LOG")) {
define("KS3_API_LOG",TRUE); define("KS3_API_LOG", FALSE);
}
//是否显示日志(直接输出日志) //是否显示日志(直接输出日志)
if(!defined("KS3_API_DISPLAY_LOG")) if (!defined("KS3_API_DISPLAY_LOG")) {
define("KS3_API_DISPLAY_LOG", TRUE); define("KS3_API_DISPLAY_LOG", FALSE);
}
//定义日志目录(默认是该项目log下) //定义日志目录(默认是该项目log下)
if(!defined("KS3_API_LOG_PATH")) if (!defined("KS3_API_LOG_PATH")) {
define("KS3_API_LOG_PATH", ""); define("KS3_API_LOG_PATH", "");
}
//是否使用HTTPS //是否使用HTTPS
if(!defined("KS3_API_USE_HTTPS")) if (!defined("KS3_API_USE_HTTPS")) {
define("KS3_API_USE_HTTPS", FALSE); define("KS3_API_USE_HTTPS", FALSE);
}
//是否开启curl debug模式 //是否开启curl debug模式
if(!defined("KS3_API_DEBUG_MODE")) if (!defined("KS3_API_DEBUG_MODE")) {
define("KS3_API_DEBUG_MODE", FALSE); define("KS3_API_DEBUG_MODE", FALSE);
}
define("KS3_API_Author", "lijunwei@kingsoft.com"); define("KS3_API_Author", "lijunwei@kingsoft.com");
define("KS3_API_Version", "1.2"); define("KS3_API_Version", "1.2");
@ -42,10 +49,10 @@ if(function_exists('get_loaded_extensions')){
//检测curl扩展 //检测curl扩展
$extensions = get_loaded_extensions(); $extensions = get_loaded_extensions();
if ($extensions) { if ($extensions) {
if(!in_array('curl', $extensions)){ if (!in_array('curl', $extensions, true)) {
throw new Ks3ClientException("please install curl extension"); throw new Ks3ClientException("please install curl extension");
} }
if(!in_array('mbstring', $extensions)){ if (!in_array('mbstring', $extensions, true)) {
throw new Ks3ClientException("please install mbstring extension"); throw new Ks3ClientException("please install mbstring extension");
} }
@ -56,12 +63,15 @@ if(function_exists('get_loaded_extensions')){
throw new Ks3ClientException(); throw new Ks3ClientException();
} }
class Ks3Client{ class Ks3Client
{
private $accessKey; private $accessKey;
private $secretKey; private $secretKey;
private $endpoint; private $endpoint;
private $log; private $log;
public function __construct($accessKey = NULL, $secretKey = NULL, $endpoint = NULL ){
public function __construct($accessKey = NULL, $secretKey = NULL, $endpoint = NULL)
{
$this->accessKey = $accessKey; $this->accessKey = $accessKey;
$this->secretKey = $secretKey; $this->secretKey = $secretKey;
@ -73,42 +83,48 @@ class Ks3Client{
$this->signers = array(); $this->signers = array();
$this->log = new Logger(); $this->log = new Logger();
} }
/** /**
方法列表:(具体使用请参考readme.md) * 方法列表:(具体使用请参考readme.md)
listBuckets,罗列bucket * listBuckets,罗列bucket
deleteBucket删除bucket * deleteBucket删除bucket
deleteBucketCORS删除bucket跨域配置 * deleteBucketCORS删除bucket跨域配置
createBucket,新建bucket * createBucket,新建bucket
setBucketAcl设置bucket访问权限 * setBucketAcl设置bucket访问权限
setBucketCORS,设置bucket跨域配置 * setBucketCORS,设置bucket跨域配置
setBucketLogging,设置bucket日志配置 * setBucketLogging,设置bucket日志配置
listObjects,罗列object * listObjects,罗列object
getBucketAcl,获取bucket访问权限 * getBucketAcl,获取bucket访问权限
getBucketCORS,获取bucket跨域配置 * getBucketCORS,获取bucket跨域配置
getBucketLocation,获取bucket地点配置 * getBucketLocation,获取bucket地点配置
getBucketLogging,获取bucket日志配置 * getBucketLogging,获取bucket日志配置
bucketExists,判断bucket是否存在 * bucketExists,判断bucket是否存在
listMutipartUploads,罗列当前bucket下尚未结束的分块上传 * listMutipartUploads,罗列当前bucket下尚未结束的分块上传
putObjectByContent,上传文件 * putObjectByContent,上传文件
putObjectByFile,上传文件 * putObjectByFile,上传文件
setObjectAcl设置object访问权限 * setObjectAcl设置object访问权限
copyObject,复制object * copyObject,复制object
getObjectMeta获取object元数据 * getObjectMeta获取object元数据
objectExists判断object是否存在 * objectExists判断object是否存在
deleteObject删除object * deleteObject删除object
deleteObjects删除多个object * deleteObjects删除多个object
getObject下载object * getObject下载object
getObjectAcl获取object访问权限 * getObjectAcl获取object访问权限
initMultipartUpload初始化分块上传 * initMultipartUpload初始化分块上传
uploadPart上传块 * uploadPart上传块
abortMultipartUpload终止分块上传 * abortMultipartUpload终止分块上传
listParts罗列已经上传的块 * listParts罗列已经上传的块
completeMultipartUpload完成分块上传 * completeMultipartUpload完成分块上传
generatePresignedUrl生成文件外链 * generatePresignedUrl生成文件外链
putAdp,添加异步数据处理任务 * putAdp,添加异步数据处理任务
getAdp,查询异步数据处理任务 * getAdp,查询异步数据处理任务
* @param $method
* @param array $args
* @return ResponseCore|string|string[]|null
* @throws Exception
*/ */
public function __call($method,$args=array()){ public function __call($method, $args = array())
{
$holder = new MessageHolder(); $holder = new MessageHolder();
$holder->msg = "------------------Logging Start-------------------------\r\n"; $holder->msg = "------------------Logging Start-------------------------\r\n";
@ -122,11 +138,14 @@ class Ks3Client{
} }
$holder->msg .= "------------------Logging End-------------------------\r\n"; $holder->msg .= "------------------Logging End-------------------------\r\n";
$this->log->info($holder->msg); $this->log->info($holder->msg);
if($ex !=NULL) if ($ex != NULL) {
throw $ex; throw $ex;
}
return $result; return $result;
} }
private function invoke($method,$args=array(),$holder,$location=NULL){
private function invoke($method, $args = array(), $holder, $location = NULL)
{
$api = API::$API[$method]; $api = API::$API[$method];
if (!$api) { if (!$api) {
throw new Ks3ClientException($method . " Not Found API"); throw new Ks3ClientException($method . " Not Found API");
@ -148,11 +167,7 @@ class Ks3Client{
} else { } else {
$request->bucket = $args["Bucket"]; $request->bucket = $args["Bucket"];
} }
$position = "Key"; $position = $api["objectPostion"] ?? "Key";
//position主要为queryadp接口用的
if(isset($api["objectPostion"])){
$position = $api["objectPostion"];
}
if (empty($args[$position])) { if (empty($args[$position])) {
if ($api["needObject"]) { if ($api["needObject"]) {
throw new Ks3ClientException($method . " this api need " . $position); throw new Ks3ClientException($method . " this api need " . $position);
@ -161,13 +176,13 @@ class Ks3Client{
$key = $args[$position]; $key = $args[$position];
$preEncoding = mb_detect_encoding($key, array("ASCII", "UTF-8", "GB2312", "GBK", "BIG5")); $preEncoding = mb_detect_encoding($key, array("ASCII", "UTF-8", "GB2312", "GBK", "BIG5"));
$holder->msg .= "key encoding " . $preEncoding . "\r\n"; $holder->msg .= "key encoding " . $preEncoding . "\r\n";
if(strtolower($preEncoding) != "utf-8"){ if (strtolower($preEncoding) !== "utf-8") {
$key = iconv($preEncoding, "UTF-8", $key); $key = iconv($preEncoding, "UTF-8", $key);
} }
$request->key = $key; $request->key = $key;
} }
$method = $api["method"]; $method = $api["method"];
if($method == "Method"){ if ($method === "Method") {
if (empty($args["Method"])) { if (empty($args["Method"])) {
$request->method = "GET"; $request->method = "GET";
} else { } else {
@ -176,10 +191,12 @@ class Ks3Client{
} else { } else {
$request->method = $api["method"]; $request->method = $api["method"];
} }
if(KS3_API_USE_HTTPS) if (KS3_API_USE_HTTPS) {
$request->scheme = "https://"; $request->scheme = "https://";
else }
else {
$request->scheme = "http://"; $request->scheme = "http://";
}
$request->endpoint = $this->endpoint; $request->endpoint = $this->endpoint;
//add subresource //add subresource
if (!empty($api["subResource"])) { if (!empty($api["subResource"])) {
@ -189,7 +206,7 @@ class Ks3Client{
if (isset($api["queryParams"])) { if (isset($api["queryParams"])) {
foreach ($api["queryParams"] as $key => $value) { foreach ($api["queryParams"] as $key => $value) {
$required = FALSE; $required = FALSE;
if(substr($value,0,1)==="!"){ if (strpos($value, "!") === 0) {
$required = TRUE; $required = TRUE;
$value = substr($value, 1); $value = substr($value, 1);
} }
@ -203,7 +220,7 @@ class Ks3Client{
} else { } else {
$curkey = $value1; $curkey = $value1;
//星号表示所有,按照暂时的业务,默认星号后面就没了 //星号表示所有,按照暂时的业务,默认星号后面就没了
if($curkey == "*"){ if ($curkey === "*") {
foreach ($curIndexArg as $queryK => $queryV) { foreach ($curIndexArg as $queryK => $queryV) {
if (!is_array($queryV)) { if (!is_array($queryV)) {
$request->addQueryParams($queryK, $queryV); $request->addQueryParams($queryK, $queryV);
@ -212,19 +229,20 @@ class Ks3Client{
$add = FALSE; $add = FALSE;
$required = FALSE; $required = FALSE;
break; break;
}else{
$curIndexArg = $curIndexArg[$value1];
} }
$curIndexArg = $curIndexArg[$value1];
} }
} }
if (!empty($curIndexArg) && $add) { if (!empty($curIndexArg) && $add) {
$request->addQueryParams($curkey, $curIndexArg); $request->addQueryParams($curkey, $curIndexArg);
continue; continue;
} }
if($required) if ($required) {
throw new Ks3ClientException($method . " param " . $value . " is required"); throw new Ks3ClientException($method . " param " . $value . " is required");
} }
} }
}
if (isset($api["body"])) { if (isset($api["body"])) {
if (isset($api["body"]["builder"])) { if (isset($api["body"]["builder"])) {
$builderName = $api["body"]["builder"]; $builderName = $api["body"]["builder"];
@ -267,11 +285,13 @@ class Ks3Client{
if ($signer === NULL || !($signer instanceof QueryAuthSigner)) { if ($signer === NULL || !($signer instanceof QueryAuthSigner)) {
$url = $request->toUrl($this->endpoint); $url = $request->toUrl($this->endpoint);
if($location!=NULL) if ($location != NULL) {
$url = $location; $url = $location;
}
$httpRequest = new RequestCore($url); $httpRequest = new RequestCore($url);
if(KS3_API_DEBUG_MODE===TRUE) if (KS3_API_DEBUG_MODE === TRUE) {
$httpRequest->debug_mode = TRUE; $httpRequest->debug_mode = TRUE;
}
$httpRequest->set_method($request->method); $httpRequest->set_method($request->method);
foreach ($request->headers as $key => $value) { foreach ($request->headers as $key => $value) {
$httpRequest->add_header($key, $value); $httpRequest->add_header($key, $value);
@ -288,8 +308,7 @@ class Ks3Client{
$read_stream = $request->read_stream; $read_stream = $request->read_stream;
$read_length = $request->getHeader(Headers::$ContentLength); $read_length = $request->getHeader(Headers::$ContentLength);
$seek_position = $request->seek_position; $seek_position = $request->seek_position;
if(isset($read_stream)) if (isset($read_stream)) {
{
$httpRequest->set_read_stream($read_stream, $read_length); $httpRequest->set_read_stream($read_stream, $read_length);
$httpRequest->set_seek_position($seek_position); $httpRequest->set_seek_position($seek_position);
$httpRequest->remove_header(Headers::$ContentLength); $httpRequest->remove_header(Headers::$ContentLength);
@ -312,7 +331,7 @@ class Ks3Client{
if ($data->status == 307) { if ($data->status == 307) {
$respHeaders = $httpRequest->get_response_header(); $respHeaders = $httpRequest->get_response_header();
$location = $respHeaders["location"]; $location = $respHeaders["location"];
if(substr($location,0,4) == "http"){ if (strpos($location, "http") === 0) {
$holder->msg .= "response code->" . $httpRequest->get_response_code() . "\r\n"; $holder->msg .= "response code->" . $httpRequest->get_response_code() . "\r\n";
$holder->msg .= "response headers->" . serialize($httpRequest->get_response_header()) . "\r\n"; $holder->msg .= "response headers->" . serialize($httpRequest->get_response_header()) . "\r\n";
$holder->msg .= "response body->" . $body . "\r\n"; $holder->msg .= "response body->" . $body . "\r\n";
@ -330,14 +349,16 @@ class Ks3Client{
$data = $handler->handle($data); $data = $handler->handle($data);
} }
return $data; return $data;
}else{ }
$url = $request->toUrl($this->endpoint); $url = $request->toUrl($this->endpoint);
$holder->msg .= $url . "\r\n"; $holder->msg .= $url . "\r\n";
return $url; return $url;
} }
}
//用于生产表单上传时的签名信息 //用于生产表单上传时的签名信息
public function postObject($bucket ,$postFormData=array(),$unknowValueFormFiled=array(),$filename=NULL,$expire=18000){ public function postObject($bucket, $postFormData = array(), $unknowValueFormFiled = array(), $filename = NULL, $expire = 18000): array
{
$policy = array(); $policy = array();
$expireTime = Utils::iso8601(time() + $expire); $expireTime = Utils::iso8601(time() + $expire);
@ -347,14 +368,14 @@ class Ks3Client{
foreach ($postFormData as $key => $value) { foreach ($postFormData as $key => $value) {
$condition = array(); $condition = array();
$condition[$key] = str_replace("\${filename}", $filename, $value); $condition[$key] = str_replace("\${filename}", $filename, $value);
array_push($conditions,$condition); $conditions[] = $condition;
} }
foreach ($unknowValueFormFiled as $key => $value) { foreach ($unknowValueFormFiled as $key => $value) {
$condition = array(); $condition = array();
array_push($condition,"starts-with"); $condition[] = "starts-with";
array_push($condition,"\$".$value); $condition[] = "\$" . $value;
array_push($condition,""); $condition[] = "";
array_push($conditions,$condition); $conditions[] = $condition;
} }
$policy["conditions"] = $conditions; $policy["conditions"] = $conditions;
$json = json_encode($policy); $json = json_encode($policy);
@ -367,4 +388,4 @@ class Ks3Client{
} }
} }
?>

@ -0,0 +1,132 @@
<?php
// +----------------------------------------------------------------------
// | ThinkLibrary 6.0 for ThinkPhP 6.0
// +----------------------------------------------------------------------
// | 版权所有 2017~2020 [ https://www.dtapp.net ]
// +----------------------------------------------------------------------
// | 官方网站: https://gitee.com/liguangchun/ThinkLibrary
// +----------------------------------------------------------------------
// | 开源协议 ( https://mit-license.org )
// +----------------------------------------------------------------------
// | gitee 仓库地址 https://gitee.com/liguangchun/ThinkLibrary
// | github 仓库地址 https://github.com/GC0202/ThinkLibrary
// | gitlab 仓库地址 https://gitlab.com/liguangchun/thinklibrary
// | weixin 仓库地址 https://git.weixin.qq.com/liguangchun/ThinkLibrary
// | huaweicloud 仓库地址 https://codehub-cn-south-1.devcloud.huaweicloud.com/composer00001/ThinkLibrary.git
// | Packagist 地址 https://packagist.org/packages/liguangchun/think-library
// +----------------------------------------------------------------------
namespace DtApp\ThinkLibrary\service\kuaishou;
use DtApp\ThinkLibrary\facade\Pregs;
use DtApp\ThinkLibrary\Service;
use GuzzleHttp\Client;
use GuzzleHttp\Cookie\CookieJar;
use GuzzleHttp\Psr7\Stream;
/**
* 快手-视频去水印
* Class WatermarkService
* @package DtApp\ThinkLibrary\service\kuaishou
*/
class WatermarkService extends Service
{
/**
* @var
*/
private $url, $contents, $backtrack;
/**
* 设置网址
* @param $url
* @return $this
*/
public function setUrl($url): self
{
if (Pregs::isLink($url)) {
$this->url = $url;
} else {
preg_match_all('#\bhttps?://[^,\s()<>]+(?:\([\w\d]+\)|([^,[:punct:]\s]|/))#', $url, $match);
$this->url = $match[0][0];
}
return $this;
}
/**
* 获取接口全部信息
* @return WatermarkService
* @throws \GuzzleHttp\Exception\GuzzleException
*/
private function getApi(): self
{
$this->contents = $this->getContents($this->url);
return $this;
}
/**
* 获取全部信息
* @return $this
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function getAll(): self
{
$this->getApi();
$data = [
'video_src' => $this->contents['video_src'],
'cover_image' => $this->contents['cover_image'],
];
$this->backtrack = $data;
return $this;
}
/**
* 返回Array
* @return array|mixed
*/
public function toArray()
{
if (empty($this->backtrack)) {
return [];
}
if (is_array($this->backtrack)) {
return $this->backtrack;
}
return json_decode($this->backtrack, true);
}
/**
* 获取
* @param $url
* @return array
* @throws \GuzzleHttp\Exception\GuzzleException
*/
private function getContents($url): array
{
$headers = [
'Connection' => 'keep-alive',
'User-Agent' => 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_1_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/16D57 Version/12.0 Safari/604.1'
];
$client = new Client(['timeout' => 2, 'headers' => $headers, 'http_errors' => false,]);
$data['headers'] = $headers;
$data['verify'] = __DIR__ . DIRECTORY_SEPARATOR . 'cacert.pem';
$jar = new CookieJar();
$data['cookies'] = $jar;
$response = $client->request('GET', $url, $data);
$body = $response->getBody();
if ($body instanceof Stream) {
$body = $body->getContents();
}
$result = htmlspecialchars_decode($body);
$pattern = '#"srcNoMark":"(.*?)"#';
preg_match($pattern, $result, $match);
$data['video_src'] = $match[1];
$pattern = '#"poster":"(.*?)"#';
preg_match($pattern, $result, $match);
if (!empty($match[1])) {
$data['cover_image'] = $match[1];
return $data;
}
return [];
}
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,124 @@
<?php
namespace DtApp\ThinkLibrary\service\weishi;
use DtApp\ThinkLibrary\facade\Pregs;
use DtApp\ThinkLibrary\Service;
use GuzzleHttp\Client;
use GuzzleHttp\Cookie\CookieJar;
use GuzzleHttp\Psr7\Stream;
/**
* Class WatermarkService
* @package DtApp\ThinkLibrary\service\weishi
*/
class WatermarkService extends Service
{
/**
* @var
*/
private $url, $contents, $backtrack;
/**
* 设置网址
* @param $url
* @return WatermarkService
*/
public function setUrl($url): self
{
if (Pregs::isLink($url)) {
$this->url = $url;
} else {
preg_match_all('#\bhttps?://[^,\s()<>]+(?:\([\w\d]+\)|([^,[:punct:]\s]|/))#', $url, $match);
$this->url = $match[0][0];
}
return $this;
}
/**
* 获取接口全部信息
* @return WatermarkService
* @throws \GuzzleHttp\Exception\GuzzleException
*/
private function getApi(): self
{
$this->contents = $this->getContents($this->url);
return $this;
}
/**
* 获取全部信息
* @return $this
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function getAll(): self
{
$this->getApi();
$data = [
'video_src' => $this->contents['video_src'],
'cover_image' => $this->contents['cover_image'],
];
$this->backtrack = $data;
return $this;
}
/**
* 返回Array
* @return array|mixed
*/
public function toArray()
{
if (empty($this->backtrack)) {
return [];
}
if (is_array($this->backtrack)) {
return $this->backtrack;
}
return json_decode($this->backtrack, true);
}
/**
* 获取
* @param $url
* @return array
* @throws \GuzzleHttp\Exception\GuzzleException
*/
private function getContents($url): array
{
$url = urldecode($url);
$headers = [
'Connection' => 'keep-alive',
'User-Agent' => 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_1_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/16D57 Version/12.0 Safari/604.1'
];
$client = new Client(['timeout' => 2, 'headers' => $headers, 'http_errors' => false,]);
$data = [];
if ($headers) {
$data['headers'] = $headers;
}
$data['verify'] = __DIR__ . DIRECTORY_SEPARATOR . 'cacert.pem';
$jar = new CookieJar;
$data['cookies'] = $jar;
if (!$params) {
$response = $client->request('GET', $url, $data);
} else {
$data ['form_params'] = $params;
$response = $client->request('POST', $url, $data);
}
$body = $response->getBody();
if ($body instanceof Stream) {
$body = $body->getContents();
}
$result = json_decode($body, true);
$file = 'weishi.txt';
$fp = fopen($file, 'ab');
fwrite($fp, $body);
fclose($fp);
if ($result['ret'] == 0) {
$video = $result['data']['feeds'][0];
$data['video_src'] = $video['video_url'];
$data['cover_image'] = $video['images'][0]['url'];
return $data;
}
return [];
}
}

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save