You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
think-library/src/service/douyin/WatermarkService.php

752 lines
41 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?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
// | Packagist 地址 https://packagist.org/packages/liguangchun/think-library
// +----------------------------------------------------------------------
namespace DtApp\ThinkLibrary\service\douyin;
use DtApp\ThinkLibrary\exception\DtaException;
use DtApp\ThinkLibrary\facade\Pregs;
use DtApp\ThinkLibrary\Service;
use DtApp\ThinkLibrary\service\aliyun\OssService;
use DtApp\ThinkLibrary\service\baidu\BosService;
use DtApp\ThinkLibrary\service\huaweicloud\ObsService;
use DtApp\ThinkLibrary\service\ksyun\Ks3Service;
use DtApp\ThinkLibrary\service\qiniu\KodoService;
use DtApp\ThinkLibrary\service\StorageService;
use DtApp\ThinkLibrary\service\tencent\CosService;
use DtApp\ThinkLibrary\service\upyun\UssService;
use Exception;
use stdClass;
/**
* 抖音-视频去水印
* Class WatermarkService
* @package DtApp\ThinkLibrary\service\douyin
*/
class WatermarkService extends Service
{
/**
* @var
*/
private $url, $apiUrl, $itemId, $dytk, $contents, $backtrack, $storage, $storagePath;
/**
* 配置网址
* @param $str
* @return $this
* @throws DtaException
*/
public function url($str): self
{
if (Pregs::isLink($str)) {
$url = $this->judgeUrl($str);
if (empty($url)) {
throw new DtaException('配置网址内容不正确');
}
$this->url = $url;
} else {
preg_match_all('#\bhttps?://[^,\s()<>]+(?:\([\w\d]+\)|([^,[:punct:]\s]|/))#', $str, $match);
$url = $this->judgeUrl($match[0][0]);
if (empty($url)) {
throw new DtaException('配置网址内容不正确');
}
$this->url = $url;
}
$content = $this->getContents($this->url);
$this->itemId = $this->getItemId($content);
$this->dytk = $this->getDyTk($content);
return $this;
}
/**
* 云存储
* @param string $type
* @param string $path
* @return $this
*/
public function storage(string $type, string $path): self
{
$this->storage = $type;
$this->storagePath = $path;
return $this;
}
/**
* 获取作者信息
* @return string
*/
public function getAuthorInfo()
{
$this->getApi();
$data = json_decode($this->contents, true);
if (empty($data['status_code'])) {
$item_list = $data['item_list'][0];
$backtrack = [];
$backtrack['uid'] = $item_list['author']['uid'];
$backtrack['nickname'] = $item_list['author']['nickname'];
$backtrack['unique_id'] = $item_list['author']['unique_id'];
$backtrack['short_id'] = $item_list['author']['short_id'];
$backtrack['avatar'] = $this->cAuthorAvatar($item_list['author']);
$this->backtrack = $backtrack;
} else {
$this->backtrack = [];
}
return $this;
}
/**
* 获取分享信息
* @return string
*/
public function getShareInfo()
{
$this->getApi();
$data = json_decode($this->contents, true);
if (empty($data['status_code'])) {
$item_list = $data['item_list'][0];
$backtrack = [];
$backtrack['weibo_desc'] = $item_list['share_info']['share_weibo_desc'];
$backtrack['desc'] = $item_list['share_info']['share_desc'];
$backtrack['title'] = $item_list['share_info']['share_title'];
$backtrack['url'] = $item_list['share_url'];
$this->backtrack = $backtrack;
} else {
$this->backtrack = [];
}
return $this;
}
/**
* 获取音乐信息
* @return string
*/
public function getMusicInfo(): string
{
$this->getApi();
$data = json_decode($this->contents, true);
if (empty($data['status_code'])) {
$item_list = $data['item_list'][0];
$backtrack = [];
$backtrack['id'] = $item_list['music']['id'];
$backtrack['mid'] = $item_list['music']['mid'];
$backtrack['title'] = $item_list['music']['title'];
$backtrack['author'] = $item_list['music']['author'];
$backtrack['avatar'] = $this->cMusicAvatar($item_list['music']);
$backtrack['play'] = $item_list['music']['play_url']['uri'];
$backtrack['cover'] = $item_list['music']['cover_large']['url_list'][0];
$this->backtrack = $backtrack;
} else {
$this->backtrack = [];
}
return $this;
}
/**
* 获取视频信息
* @return string
*/
public function getVideoInfo()
{
$this->getApi();
$data = json_decode($this->contents, true);
if (empty($data['status_code'])) {
$item_list = $data['item_list'][0];
$backtrack = [];
$backtrack['vid'] = $item_list['video']['vid'];
$backtrack['desc'] = $item_list['desc'];
$backtrack['width'] = $item_list['video']['width'];
$backtrack['height'] = $item_list['video']['height'];
$cVideoAvatar = $this->cVideoAvatar($item_list['video']);
$backtrack['dynamic'] = $cVideoAvatar['dynamic'];
$backtrack['origin_cover'] = $cVideoAvatar['origin_cover'];
$backtrack['cover'] = $cVideoAvatar['cover'];
$backtrack['play'] = $this->cVideoPlayUrl($item_list['video']['play_addr']['url_list'][0], 'play');
$backtrack['playwm'] = $this->cVideoPlayUrl($item_list['video']['play_addr']['url_list'][0], 'playwm');
$this->backtrack = $backtrack;
} else {
$this->backtrack = [];
}
return $this;
}
/**
* 获取接口全部信息
* @return $this
*/
public function getApi(): self
{
$this->apiUrl = "https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids={$this->itemId}&dytk={$this->dytk}";
$this->contents = $this->getContents($this->apiUrl);
$this->backtrack = $this->contents;
return $this;
}
/**
* 获取全部信息
* @return $this
* @throws Exception
*/
public function getAll()
{
$this->getApi();
$data = json_decode($this->contents, true);
if (empty($data['status_code'])) {
$item_list = $data['item_list'][0];
$backtrack = [];
// 作者信息
$backtrack['author_info']['uid'] = $item_list['author']['uid'];
$backtrack['author_info']['nickname'] = $item_list['author']['nickname'];
$backtrack['author_info']['unique_id'] = $item_list['author']['unique_id'];
$backtrack['author_info']['short_id'] = $item_list['author']['short_id'];
$backtrack['author_info']['avatar'] = $this->cAuthorAvatar($item_list['author']);
// 分享信息
$backtrack['share_info']['weibo_desc'] = $item_list['share_info']['share_weibo_desc'];
$backtrack['share_info']['desc'] = $item_list['share_info']['share_desc'];
$backtrack['share_info']['title'] = $item_list['share_info']['share_title'];
$backtrack['share_info']['url'] = $item_list['share_url'];
// 音乐信息
$backtrack['music_info']['id'] = $item_list['music']['id'] ?? '';
$backtrack['music_info']['mid'] = $item_list['music']['mid'] ?? '';
$backtrack['music_info']['title'] = $item_list['music']['title'] ?? '';
$backtrack['music_info']['author'] = $item_list['music']['author'] ?? '';
$backtrack['music_info']['avatar'] = isset($item_list['music']) ? $this->cMusicAvatar($item_list['music']) : '';
$backtrack['music_info']['play'] = $item_list['music']['play_url']['uri'] ?? '';
$backtrack['music_info']['cover'] = $item_list['music']['cover_large']['url_list'][0] ?? '';
// 视频信息
$backtrack['video_info']['vid'] = $item_list['video']['vid'];
$backtrack['video_info']['desc'] = $item_list['desc'];
$backtrack['video_info']['width'] = $item_list['video']['width'];
$backtrack['video_info']['height'] = $item_list['video']['height'];
$cVideoAvatar = $this->cVideoAvatar($item_list['video']);
$backtrack['video_info']['dynamic'] = $cVideoAvatar['dynamic'];
$backtrack['video_info']['origin_cover'] = $cVideoAvatar['origin_cover'];
$backtrack['video_info']['cover'] = $cVideoAvatar['cover'];
$backtrack['video_info']['play'] = $this->cVideoPlayUrl($item_list['video']['play_addr']['url_list'][0], 'play');
$backtrack['video_info']['playwm'] = $this->cVideoPlayUrl($item_list['video']['play_addr']['url_list'][0], 'playwm');
$this->storagePath .= $backtrack['author_info']['uid'] . "/";
if (!empty($this->storage)) {
// 保存文件
// 作者头像
$author_info_avatar = StorageService::instance()
->path($this->storagePath)
->remotely($backtrack['author_info']['avatar'])
->save($backtrack['author_info']['uid'] . ".jpeg");
// 音频头像
$music_info_avatar = StorageService::instance()
->path($this->storagePath)
->remotely($backtrack['music_info']['avatar'])
->save($backtrack['music_info']['mid'] . ".jpeg");
// 音频文件
if (!empty($backtrack['music_info']['play'])) {
$music_info_play = StorageService::instance()
->path($this->storagePath)
->remotely($backtrack['music_info']['play'])
->save($backtrack['music_info']['mid'] . ".mp3");
} else {
$music_info_play = ['size' => '0kb'];
}
// 音频封面
$music_info_cover = StorageService::instance()
->path($this->storagePath)
->remotely($backtrack['music_info']['cover'])
->save($backtrack['music_info']['mid'] . "_cover" . ".jpeg");
// 视频封面
$video_info_dynamic = StorageService::instance()
->path($this->storagePath)
->remotely($backtrack['video_info']['dynamic'])
->save($backtrack['video_info']['vid'] . "_dynamic" . ".jpeg");
// 视频封面
$video_info_origin_cover = StorageService::instance()
->path($this->storagePath)
->remotely($backtrack['video_info']['origin_cover'])
->save($backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg");
// 视频封面
$video_info_cover = StorageService::instance()
->path($this->storagePath)
->remotely($backtrack['video_info']['cover'])
->save($backtrack['video_info']['vid'] . "_cover" . ".jpeg");
// 视频文件
$video_info_play = StorageService::instance()
->path($this->storagePath)
->remotely($backtrack['video_info']['play'])
->save($backtrack['video_info']['vid'] . "_play" . ".mp4");
// 视频文件
$video_info_playwm = StorageService::instance()
->path($this->storagePath)
->remotely($backtrack['video_info']['playwm'])
->save($backtrack['video_info']['vid'] . "_playwm" . ".mp4");
$system_path = StorageService::instance()
->path($this->storagePath)
->getPath();
$yun_path = "douyin/" . $backtrack['author_info']['uid'] . '/';
// 上传到云存储
$backtrack['yun']['platform'] = $this->storage;
switch ($this->storage) {
case "aliyun":
// 作者头像
$backtrack['yun']['author_info']['avatar'] = OssService::instance()
->upload($yun_path . $backtrack['author_info']['uid'] . ".jpeg", $system_path . $backtrack['author_info']['uid'] . ".jpeg");
// 音频头像
$backtrack['yun']['music_info']['avatar'] = OssService::instance()
->upload($yun_path . $backtrack['music_info']['mid'] . ".jpeg", $system_path . $backtrack['music_info']['mid'] . ".jpeg");
// 音频文件
if (!empty($backtrack['music_info']['play'])) {
$backtrack['yun']['music_info']['play'] = OssService::instance()
->upload($yun_path . $backtrack['music_info']['mid'] . ".mp3", $system_path . $backtrack['music_info']['mid'] . ".mp3");
} else {
$backtrack['yun']['music_info']['play'] = '';
}
// 音频封面
$backtrack['yun']['music_info']['cover'] = OssService::instance()
->upload($yun_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg", $system_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg");
// 视频封面
$backtrack['yun']['video_info']['dynamic'] = OssService::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg");
// 视频封面
$backtrack['yun']['video_info']['origin_cover'] = OssService::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg");
// 视频封面
$backtrack['yun']['video_info']['cover'] = OssService::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg");
// 视频文件
$backtrack['yun']['video_info']['play'] = OssService::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_play" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_play" . ".mp4");
// 视频文件
$backtrack['yun']['video_info']['playwm'] = OssService::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4");
break;
case "tencentcloud":
// 作者头像
$backtrack['yun']['author_info']['avatar'] = CosService::instance()
->upload($yun_path . $backtrack['author_info']['uid'] . ".jpeg", $system_path . $backtrack['author_info']['uid'] . ".jpeg");
// 音频头像
$backtrack['yun']['music_info']['avatar'] = CosService::instance()
->upload($yun_path . $backtrack['music_info']['mid'] . ".jpeg", $system_path . $backtrack['music_info']['mid'] . ".jpeg");
// 音频文件
if (!empty($backtrack['music_info']['play'])) {
$backtrack['yun']['music_info']['play'] = CosService::instance()
->upload($yun_path . $backtrack['music_info']['mid'] . ".mp3", $system_path . $backtrack['music_info']['mid'] . ".mp3");
} else {
$backtrack['yun']['music_info']['play'] = '';
}
// 音频封面
$backtrack['yun']['music_info']['cover'] = CosService::instance()
->upload($yun_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg", $system_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg");
// 视频封面
$backtrack['yun']['video_info']['dynamic'] = CosService::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg");
// 视频封面
$backtrack['yun']['video_info']['origin_cover'] = CosService::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg");
// 视频封面
$backtrack['yun']['video_info']['cover'] = CosService::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg");
// 视频文件
$backtrack['yun']['video_info']['play'] = CosService::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_play" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_play" . ".mp4");
// 视频文件
$backtrack['yun']['video_info']['playwm'] = CosService::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4");
break;
case "huaweicloud":
// 作者头像
$backtrack['yun']['author_info']['avatar'] = ObsService::instance()
->upload($yun_path . $backtrack['author_info']['uid'] . ".jpeg", $system_path . $backtrack['author_info']['uid'] . ".jpeg");
// 音频头像
$backtrack['yun']['music_info']['avatar'] = ObsService::instance()
->upload($yun_path . $backtrack['music_info']['mid'] . ".jpeg", $system_path . $backtrack['music_info']['mid'] . ".jpeg");
// 音频文件
if (!empty($backtrack['music_info']['play'])) {
$backtrack['yun']['music_info']['play'] = ObsService::instance()
->upload($yun_path . $backtrack['music_info']['mid'] . ".mp3", $system_path . $backtrack['music_info']['mid'] . ".mp3");
} else {
$backtrack['yun']['music_info']['play'] = '';
}
// 音频封面
$backtrack['yun']['music_info']['cover'] = ObsService::instance()
->upload($yun_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg", $system_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg");
// 视频封面
$backtrack['yun']['video_info']['dynamic'] = ObsService::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg");
// 视频封面
$backtrack['yun']['video_info']['origin_cover'] = ObsService::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg");
// 视频封面
$backtrack['yun']['video_info']['cover'] = ObsService::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg");
// 视频文件
$backtrack['yun']['video_info']['play'] = ObsService::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_play" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_play" . ".mp4");
// 视频文件
$backtrack['yun']['video_info']['playwm'] = ObsService::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4");
break;
case "baiducloud":
// 作者头像
$backtrack['yun']['author_info']['avatar'] = BosService::instance()
->upload($yun_path . $backtrack['author_info']['uid'] . ".jpeg", $system_path . $backtrack['author_info']['uid'] . ".jpeg");
// 音频头像
$backtrack['yun']['music_info']['avatar'] = BosService::instance()
->upload($yun_path . $backtrack['music_info']['mid'] . ".jpeg", $system_path . $backtrack['music_info']['mid'] . ".jpeg");
// 音频文件
if (!empty($backtrack['music_info']['play'])) {
$backtrack['yun']['music_info']['play'] = BosService::instance()
->upload($yun_path . $backtrack['music_info']['mid'] . ".mp3", $system_path . $backtrack['music_info']['mid'] . ".mp3");
} else {
$backtrack['yun']['music_info']['play'] = '';
}
// 音频封面
$backtrack['yun']['music_info']['cover'] = BosService::instance()
->upload($yun_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg", $system_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg");
// 视频封面
$backtrack['yun']['video_info']['dynamic'] = BosService::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg");
// 视频封面
$backtrack['yun']['video_info']['origin_cover'] = BosService::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg");
// 视频封面
$backtrack['yun']['video_info']['cover'] = BosService::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg");
// 视频文件
$backtrack['yun']['video_info']['play'] = BosService::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_play" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_play" . ".mp4");
// 视频文件
$backtrack['yun']['video_info']['playwm'] = BosService::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4");
break;
case "qiniu":
// 作者头像
$backtrack['yun']['author_info']['avatar'] = KodoService::instance()
->upload($yun_path . $backtrack['author_info']['uid'] . ".jpeg", $system_path . $backtrack['author_info']['uid'] . ".jpeg");
// 音频头像
$backtrack['yun']['music_info']['avatar'] = KodoService::instance()
->upload($yun_path . $backtrack['music_info']['mid'] . ".jpeg", $system_path . $backtrack['music_info']['mid'] . ".jpeg");
// 音频文件
if (!empty($backtrack['music_info']['play'])) {
$backtrack['yun']['music_info']['play'] = KodoService::instance()
->upload($yun_path . $backtrack['music_info']['mid'] . ".mp3", $system_path . $backtrack['music_info']['mid'] . ".mp3");
} else {
$backtrack['yun']['music_info']['play'] = '';
}
// 音频封面
$backtrack['yun']['music_info']['cover'] = KodoService::instance()
->upload($yun_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg", $system_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg");
// 视频封面
$backtrack['yun']['video_info']['dynamic'] = KodoService::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg");
// 视频封面
$backtrack['yun']['video_info']['origin_cover'] = KodoService::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg");
// 视频封面
$backtrack['yun']['video_info']['cover'] = KodoService::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg");
// 视频文件
$backtrack['yun']['video_info']['play'] = KodoService::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_play" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_play" . ".mp4");
// 视频文件
$backtrack['yun']['video_info']['playwm'] = KodoService::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4");
break;
case "upyun":
// 作者头像
$backtrack['yun']['author_info']['avatar'] = UssService::instance()
->upload($yun_path . $backtrack['author_info']['uid'] . ".jpeg", $system_path . $backtrack['author_info']['uid'] . ".jpeg");
// 音频头像
$backtrack['yun']['music_info']['avatar'] = UssService::instance()
->upload($yun_path . $backtrack['music_info']['mid'] . ".jpeg", $system_path . $backtrack['music_info']['mid'] . ".jpeg");
// 音频文件
if (!empty($backtrack['music_info']['play'])) {
$backtrack['yun']['music_info']['play'] = UssService::instance()
->upload($yun_path . $backtrack['music_info']['mid'] . ".mp3", $system_path . $backtrack['music_info']['mid'] . ".mp3");
} else {
$backtrack['yun']['music_info']['play'] = '';
}
// 音频封面
$backtrack['yun']['music_info']['cover'] = UssService::instance()
->upload($yun_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg", $system_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg");
// 视频封面
$backtrack['yun']['video_info']['dynamic'] = UssService::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg");
// 视频封面
$backtrack['yun']['video_info']['origin_cover'] = UssService::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg");
// 视频封面
$backtrack['yun']['video_info']['cover'] = UssService::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg");
// 视频文件
$backtrack['yun']['video_info']['play'] = UssService::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_play" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_play" . ".mp4");
// 视频文件
$backtrack['yun']['video_info']['playwm'] = UssService::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4");
break;
case "ksyun":
// 作者头像
$backtrack['yun']['author_info']['avatar'] = Ks3Service::instance()
->upload($yun_path . $backtrack['author_info']['uid'] . ".jpeg", $system_path . $backtrack['author_info']['uid'] . ".jpeg");
// 音频头像
$backtrack['yun']['music_info']['avatar'] = Ks3Service::instance()
->upload($yun_path . $backtrack['music_info']['mid'] . ".jpeg", $system_path . $backtrack['music_info']['mid'] . ".jpeg");
// 音频文件
if (!empty($backtrack['music_info']['play'])) {
$backtrack['yun']['music_info']['play'] = Ks3Service::instance()
->upload($yun_path . $backtrack['music_info']['mid'] . ".mp3", $system_path . $backtrack['music_info']['mid'] . ".mp3");
} else {
$backtrack['yun']['music_info']['play'] = '';
}
// 音频封面
$backtrack['yun']['music_info']['cover'] = Ks3Service::instance()
->upload($yun_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg", $system_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg");
// 视频封面
$backtrack['yun']['video_info']['dynamic'] = Ks3Service::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg");
// 视频封面
$backtrack['yun']['video_info']['origin_cover'] = Ks3Service::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg");
// 视频封面
$backtrack['yun']['video_info']['cover'] = Ks3Service::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg");
// 视频文件
$backtrack['yun']['video_info']['play'] = Ks3Service::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_play" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_play" . ".mp4");
// 视频文件
$backtrack['yun']['video_info']['playwm'] = Ks3Service::instance()
->upload($yun_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4");
break;
case "storage":
$domain_name = config('dtapp.storage.domain_name');
$new_yun_path = config("dtapp.storage.domain_list.{$domain_name}") . "upload/watermark/{$yun_path}";
// 本地存储
// 作者头像
$backtrack['yun']['author_info']['avatar'] = ($new_yun_path) . $backtrack['author_info']['uid'] . ".jpeg";
// 音频头像
$backtrack['yun']['music_info']['avatar'] = $new_yun_path . $backtrack['music_info']['mid'] . ".jpeg";
// 音频文件
if (!empty($backtrack['music_info']['play'])) {
$backtrack['yun']['music_info']['play'] = $new_yun_path . $backtrack['music_info']['mid'] . ".mp3";
} else {
$backtrack['yun']['music_info']['play'] = $new_yun_path;
}
// 音频封面
$backtrack['yun']['music_info']['cover'] = $new_yun_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg";
// 视频封面
$backtrack['yun']['video_info']['dynamic'] = $new_yun_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg";
// 视频封面
$backtrack['yun']['video_info']['origin_cover'] = $new_yun_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg";
// 视频封面
$backtrack['yun']['video_info']['cover'] = $new_yun_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg";
// 视频文件
$backtrack['yun']['video_info']['play'] = $new_yun_path . $backtrack['video_info']['vid'] . "_play" . ".mp4";
// 视频文件
$backtrack['yun']['video_info']['playwm'] = $new_yun_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4";
break;
default:
break;
}
// 大小信息
// 作者头像
$backtrack['size']['author_info']['avatar'] = $author_info_avatar['size'];
// 音频头像
$backtrack['size']['music_info']['avatar'] = $music_info_avatar['size'];
// 音频文件
$backtrack['size']['music_info']['play'] = $music_info_play['size'];
// 音频封面
$backtrack['size']['music_info']['cover'] = $music_info_cover['size'];
// 视频封面
$backtrack['size']['video_info']['dynamic'] = $video_info_dynamic['size'];
// 视频封面
$backtrack['size']['video_info']['origin_cover'] = $video_info_origin_cover['size'];
// 视频封面
$backtrack['size']['video_info']['cover'] = $video_info_cover['size'];
// 视频文件
$backtrack['size']['video_info']['play'] = $video_info_play['size'];
// 视频文件
$backtrack['size']['video_info']['playwm'] = $video_info_playwm['size'];
}
$this->backtrack = $backtrack;
} else {
$this->backtrack = [];
}
return $this;
}
/**
* 获取
* @param $url
* @return bool|string
*/
private function getContents($url)
{
ini_set('user_agent', 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1');
return file_get_contents($url);
}
/**
* 判断网址是否确认
* @param $url
* @return string
*/
private function judgeUrl($url)
{
if (strpos($url, 'douyin.com') !== false) {
return $url;
}
if (strpos($url, 'iesdouyin.com') !== false) {
return $url;
}
return '';
}
/**
* 正则匹配 mid
* @param $content
* @return mixed
* @throws DtaException
*/
private function getItemId($content)
{
preg_match('/"(?<=itemId:\s\")\d+"/', $content, $matches);
if (!isset($matches[0])) {
throw new DtaException('视频不存在');
}
preg_match("~\"(.*?)\"~", $matches[0], $matches2);
if (!isset($matches2[1])) {
throw new DtaException('视频不存在');
}
return $matches2[1];
}
/**
* 正则匹配 dytk
* @param $content
* @return mixed
* @throws DtaException
*/
private function getDyTk($content)
{
preg_match("~dytk(.*?)}~", $content, $matches);
if (!isset($matches[1])) {
throw new DtaException('视频不存在');
}
$Dytk = $matches[1];
preg_match("~\"(.*?)\"~", $Dytk, $matches2);
if (!isset($matches2[1])) {
throw new DtaException('视频不存在');
}
return $matches2[1];
}
/**
* 返回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);
}
/**
* 返回Object
* @return object|string|mixed
*/
public function toObject()
{
if (empty($this->backtrack)) {
return '';
}
if (is_object($this->backtrack)) {
return $this->backtrack;
}
$obj = new StdClass();
foreach ($this->backtrack as $key => $val) {
$obj->$key = $val;
}
return $obj;
}
/**
* 处理作者头像 大到小
* @param $data
* @return string
*/
private function cAuthorAvatar($data): string
{
// 1080x1080
return $data['avatar_larger']['url_list'][0] ?? $data['avatar_medium']['url_list'][0] ?? $data['avatar_thumb']['url_list'][0] ?? '';
}
/**
* 处理音乐作者头像 大到小
* @param $data
* @return string
*/
private function cMusicAvatar($data): string
{
// 1080x1080
return $data['cover_hd']['url_list'][0] ?? $data['cover_medium']['url_list'][0] ?? $data['cover_thumb']['url_list'][0] ?? '';
}
/**
* 处理视频封面 大到小
* @param $data
* @return array
*/
private function cVideoAvatar($data): array
{
$array = [];
$array['dynamic'] = '';
$array['origin_cover'] = '';
$array['cover'] = '';
// 动态
if (isset($data['dynamic_cover']['url_list'][0])) {
$array['dynamic'] = substr($data['dynamic_cover']['url_list'][0], 0, strpos($data['dynamic_cover']['url_list'][0], '?from='));
}
// width封面
if (isset($data['origin_cover']['url_list'][0])) {
$array['origin_cover'] = substr($data['origin_cover']['url_list'][0], 0, strpos($data['origin_cover']['url_list'][0], '?from='));
}
// height封面
if (isset($data['cover']['url_list'][0])) {
$array['cover'] = substr($data['cover']['url_list'][0], 0, strpos($data['cover']['url_list'][0], '?from='));
}
return $array;
}
/**
* 返回302网址
* @param $url
* @param $type
* @return mixed
*/
private function cVideoPlayUrl($url, $type)
{
if ($type === 'play') {
$headers = get_headers(str_replace("/playwm/", "/play/", $url), TRUE);
} else {
$headers = get_headers($url, TRUE);
}
//输出跳转到的网址
return $headers['location'];
}
}