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']; } }