WatermarkService.php 33.7 KB
Newer Older
李光春's avatar
李光春 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
<?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
// +----------------------------------------------------------------------

李光春's avatar
李光春 已提交
17
namespace DtApp\ThinkLibrary\service\douyin;
李光春's avatar
李光春 已提交
18

李光春's avatar
李光春 已提交
19
use DtApp\ThinkLibrary\exception\DtaException;
李光春's avatar
李光春 已提交
20 21
use DtApp\ThinkLibrary\facade\Pregs;
use DtApp\ThinkLibrary\Service;
李光春's avatar
李光春 已提交
22 23 24 25 26
use DtApp\ThinkLibrary\service\aliyun\OssService;
use DtApp\ThinkLibrary\service\baidu\BosService;
use DtApp\ThinkLibrary\service\huaweicloud\ObsService;
use DtApp\ThinkLibrary\service\StorageService;
use DtApp\ThinkLibrary\service\tencent\CosService;
李光春's avatar
李光春 已提交
27
use Exception;
李光春's avatar
李光春 已提交
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
use stdClass;

/**
 * 抖音-视频去水印
 * Class WatermarkService
 * @package DtApp\ThinkLibrary\service\douyin
 */
class WatermarkService extends Service
{
    private $url;
    private $api_url;
    private $itemId;
    private $dytk;
    private $contents;
    private $backtrack;
李光春's avatar
李光春 已提交
43
    private $storage;
李光春's avatar
李光春 已提交
44
    private $storagePath;
李光春's avatar
李光春 已提交
45 46 47 48 49

    /**
     * 配置网址
     * @param $str
     * @return $this
李光春's avatar
李光春 已提交
50
     * @throws DtaException
李光春's avatar
李光春 已提交
51 52 53 54 55
     */
    public function url($str)
    {
        if (Pregs::isLink($str)) {
            $url = $this->judgeUrl($str);
李光春's avatar
李光春 已提交
56
            if (empty($url)) throw new DtaException('配置网址内容不正确');
李光春's avatar
李光春 已提交
57 58 59 60
            $this->url = $url;
        } else {
            preg_match_all('#\bhttps?://[^,\s()<>]+(?:\([\w\d]+\)|([^,[:punct:]\s]|/))#', $str, $match);
            $url = $this->judgeUrl($match[0][0]);
李光春's avatar
李光春 已提交
61
            if (empty($url)) throw new DtaException('配置网址内容不正确');
李光春's avatar
李光春 已提交
62 63 64 65
            $this->url = $url;
        }
        $content = $this->getContents($this->url);
        $this->itemId = $this->getItemId($content);
李光春's avatar
李光春 已提交
66
        $this->dytk = $this->getDyTk($content);
李光春's avatar
李光春 已提交
67 68 69
        return $this;
    }

李光春's avatar
李光春 已提交
70 71 72
    /**
     * 云存储
     * @param string $type
李光春's avatar
李光春 已提交
73
     * @param string $path
李光春's avatar
李光春 已提交
74 75
     * @return $this
     */
李光春's avatar
李光春 已提交
76
    public function storage(string $type, string $path)
李光春's avatar
李光春 已提交
77 78
    {
        $this->storage = $type;
李光春's avatar
李光春 已提交
79
        $this->storagePath = $path;
李光春's avatar
李光春 已提交
80 81 82
        return $this;
    }

李光春's avatar
李光春 已提交
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
    /**
     * 获取作者信息
     * @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()
    {
        $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'];
李光春's avatar
李光春 已提交
172 173
            $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');
李光春's avatar
李光春 已提交
174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195
            $this->backtrack = $backtrack;
        } else {
            $this->backtrack = [];
        }
        return $this;
    }

    /**
     * 获取接口全部信息
     * @return $this
     */
    public function getApi()
    {
        $this->api_url = "https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids={$this->itemId}&dytk={$this->dytk}";
        $this->contents = $this->getContents($this->api_url);
        $this->backtrack = $this->contents;
        return $this;
    }

    /**
     * 获取全部信息
     * @return $this
李光春's avatar
李光春 已提交
196
     * @throws Exception
李光春's avatar
李光春 已提交
197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232
     */
    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'] = $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'];
李光春's avatar
李光春 已提交
233 234
            $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');
李光春's avatar
李光春 已提交
235
            if (!empty($this->storage)) {
李光春's avatar
李光春 已提交
236
                // 作者头像
李光春's avatar
李光春 已提交
237
                StorageService::instance()
李光春's avatar
李光春 已提交
238
                    ->path($this->storagePath . $backtrack['author_info']['uid'] . "/")
李光春's avatar
李光春 已提交
239
                    ->remotely($backtrack['author_info']['avatar'])
李光春's avatar
李光春 已提交
240
                    ->save($backtrack['author_info']['uid'] . ".jpeg");
李光春's avatar
李光春 已提交
241 242 243 244 245 246
                // 音频头像
                StorageService::instance()
                    ->path($this->storagePath . $backtrack['author_info']['uid'] . "/")
                    ->remotely($backtrack['music_info']['avatar'])
                    ->save($backtrack['music_info']['mid'] . ".jpeg");
                // 音频文件
李光春's avatar
李光春 已提交
247
                StorageService::instance()
李光春's avatar
李光春 已提交
248
                    ->path($this->storagePath . $backtrack['author_info']['uid'] . "/")
李光春's avatar
李光春 已提交
249
                    ->remotely($backtrack['music_info']['play'])
李光春's avatar
李光春 已提交
250
                    ->save($backtrack['music_info']['mid'] . ".mp3");
李光春's avatar
李光春 已提交
251 252 253 254 255 256
                // 音频封面
                StorageService::instance()
                    ->path($this->storagePath . $backtrack['author_info']['uid'] . "/")
                    ->remotely($backtrack['music_info']['cover'])
                    ->save($backtrack['music_info']['mid'] . "_cover" . ".jpeg");
                // 视频封面
李光春's avatar
李光春 已提交
257
                StorageService::instance()
李光春's avatar
李光春 已提交
258
                    ->path($this->storagePath . $backtrack['author_info']['uid'] . "/")
李光春's avatar
李光春 已提交
259
                    ->remotely($backtrack['video_info']['dynamic'])
李光春's avatar
李光春 已提交
260
                    ->save($backtrack['video_info']['vid'] . "_dynamic" . ".jpeg");
李光春's avatar
李光春 已提交
261
                // 视频封面
李光春's avatar
李光春 已提交
262
                StorageService::instance()
李光春's avatar
李光春 已提交
263
                    ->path($this->storagePath . $backtrack['author_info']['uid'] . "/")
李光春's avatar
李光春 已提交
264
                    ->remotely($backtrack['video_info']['origin_cover'])
李光春's avatar
李光春 已提交
265
                    ->save($backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg");
李光春's avatar
李光春 已提交
266
                // 视频封面
李光春's avatar
李光春 已提交
267
                StorageService::instance()
李光春's avatar
李光春 已提交
268
                    ->path($this->storagePath . $backtrack['author_info']['uid'] . "/")
李光春's avatar
李光春 已提交
269
                    ->remotely($backtrack['video_info']['cover'])
李光春's avatar
李光春 已提交
270
                    ->save($backtrack['video_info']['vid'] . "_cover" . ".jpeg");
李光春's avatar
李光春 已提交
271
                // 视频文件
李光春's avatar
李光春 已提交
272
                StorageService::instance()
李光春's avatar
李光春 已提交
273
                    ->path($this->storagePath . $backtrack['author_info']['uid'] . "/")
李光春's avatar
李光春 已提交
274
                    ->remotely($backtrack['video_info']['play'])
李光春's avatar
李光春 已提交
275
                    ->save($backtrack['video_info']['vid'] . "_play" . ".mp4");
李光春's avatar
李光春 已提交
276
                // 视频文件
李光春's avatar
李光春 已提交
277
                StorageService::instance()
李光春's avatar
李光春 已提交
278
                    ->path($this->storagePath . $backtrack['author_info']['uid'] . "/")
李光春's avatar
李光春 已提交
279
                    ->remotely($backtrack['video_info']['playwm'])
李光春's avatar
李光春 已提交
280
                    ->save($backtrack['video_info']['vid'] . "_playwm" . ".mp4");
李光春's avatar
李光春 已提交
281
                $system_path = StorageService::instance()
李光春's avatar
李光春 已提交
282 283
                    ->path($this->storagePath . $backtrack['author_info']['uid'] . "/")
                    ->getPath();
李光春's avatar
李光春 已提交
284 285 286 287 288
                $yun_path = "douyin/" . $backtrack['author_info']['uid'] . '/';
                // 删除到云存储
                $backtrack['yun']['platform'] = $this->storage;
                switch ($this->storage) {
                    case "aliyun":
李光春's avatar
李光春 已提交
289
                        // 作者头像
李光春's avatar
李光春 已提交
290
                        $backtrack['yun']['author_info']['avatar'] = OssService::instance()
李光春's avatar
李光春 已提交
291
                            ->upload($yun_path . $backtrack['author_info']['uid'] . ".jpeg", $system_path . $backtrack['author_info']['uid'] . ".jpeg");
李光春's avatar
李光春 已提交
292 293 294 295
                        // 音频头像
                        $backtrack['yun']['music_info']['avatar'] = OssService::instance()
                            ->upload($yun_path . $backtrack['music_info']['mid'] . ".jpeg", $system_path . $backtrack['music_info']['mid'] . ".jpeg");
                        // 音频文件
李光春's avatar
李光春 已提交
296
                        $backtrack['yun']['music_info']['play'] = OssService::instance()
李光春's avatar
李光春 已提交
297
                            ->upload($yun_path . $backtrack['music_info']['mid'] . ".mp3", $system_path . $backtrack['music_info']['mid'] . ".mp3");
李光春's avatar
李光春 已提交
298 299
                        // 音频封面
                        $backtrack['yun']['music_info']['cover'] = OssService::instance()
李光春's avatar
李光春 已提交
300
                            ->upload($yun_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg", $system_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg");
李光春's avatar
李光春 已提交
301
                        // 视频封面
李光春's avatar
李光春 已提交
302
                        $backtrack['yun']['video_info']['dynamic'] = OssService::instance()
李光春's avatar
李光春 已提交
303
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg");
李光春's avatar
李光春 已提交
304
                        // 视频封面
李光春's avatar
李光春 已提交
305
                        $backtrack['yun']['video_info']['origin_cover'] = OssService::instance()
李光春's avatar
李光春 已提交
306
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg");
李光春's avatar
李光春 已提交
307
                        // 视频封面
李光春's avatar
李光春 已提交
308
                        $backtrack['yun']['video_info']['cover'] = OssService::instance()
李光春's avatar
李光春 已提交
309
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg");
李光春's avatar
李光春 已提交
310
                        // 视频文件
李光春's avatar
李光春 已提交
311
                        $backtrack['yun']['video_info']['play'] = OssService::instance()
李光春's avatar
李光春 已提交
312
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_play" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_play" . ".mp4");
李光春's avatar
李光春 已提交
313
                        // 视频文件
李光春's avatar
李光春 已提交
314
                        $backtrack['yun']['video_info']['playwm'] = OssService::instance()
李光春's avatar
李光春 已提交
315
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4");
李光春's avatar
李光春 已提交
316 317
                        break;
                    case "tencent":
李光春's avatar
李光春 已提交
318
                        // 作者头像
李光春's avatar
李光春 已提交
319
                        $backtrack['yun']['author_info']['avatar'] = CosService::instance()
李光春's avatar
李光春 已提交
320
                            ->upload($yun_path . $backtrack['author_info']['uid'] . ".jpeg", $system_path . $backtrack['author_info']['uid'] . ".jpeg");
李光春's avatar
李光春 已提交
321 322 323 324
                        // 音频头像
                        $backtrack['yun']['music_info']['avatar'] = CosService::instance()
                            ->upload($yun_path . $backtrack['music_info']['mid'] . ".jpeg", $system_path . $backtrack['music_info']['mid'] . ".jpeg");
                        // 音频文件
李光春's avatar
李光春 已提交
325
                        $backtrack['yun']['music_info']['play'] = CosService::instance()
李光春's avatar
李光春 已提交
326
                            ->upload($yun_path . $backtrack['music_info']['mid'] . ".mp3", $system_path . $backtrack['music_info']['mid'] . ".mp3");
李光春's avatar
李光春 已提交
327 328
                        // 音频封面
                        $backtrack['yun']['music_info']['cover'] = CosService::instance()
李光春's avatar
李光春 已提交
329
                            ->upload($yun_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg", $system_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg");
李光春's avatar
李光春 已提交
330
                        // 视频封面
李光春's avatar
李光春 已提交
331
                        $backtrack['yun']['video_info']['dynamic'] = CosService::instance()
李光春's avatar
李光春 已提交
332
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg");
李光春's avatar
李光春 已提交
333
                        // 视频封面
李光春's avatar
李光春 已提交
334
                        $backtrack['yun']['video_info']['origin_cover'] = CosService::instance()
李光春's avatar
李光春 已提交
335
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg");
李光春's avatar
李光春 已提交
336
                        // 视频封面
李光春's avatar
李光春 已提交
337
                        $backtrack['yun']['video_info']['cover'] = CosService::instance()
李光春's avatar
李光春 已提交
338
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg");
李光春's avatar
李光春 已提交
339
                        // 视频文件
李光春's avatar
李光春 已提交
340
                        $backtrack['yun']['video_info']['play'] = CosService::instance()
李光春's avatar
李光春 已提交
341
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_play" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_play" . ".mp4");
李光春's avatar
李光春 已提交
342
                        // 视频文件
李光春's avatar
李光春 已提交
343
                        $backtrack['yun']['video_info']['playwm'] = CosService::instance()
李光春's avatar
李光春 已提交
344
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4");
李光春's avatar
李光春 已提交
345 346
                        break;
                    case "huaweicloud":
李光春's avatar
李光春 已提交
347
                        // 作者头像
李光春's avatar
李光春 已提交
348
                        $backtrack['yun']['author_info']['avatar'] = ObsService::instance()
李光春's avatar
李光春 已提交
349
                            ->upload($yun_path . $backtrack['author_info']['uid'] . ".jpeg", $system_path . $backtrack['author_info']['uid'] . ".jpeg");
李光春's avatar
李光春 已提交
350 351 352 353
                        // 音频头像
                        $backtrack['yun']['music_info']['avatar'] = ObsService::instance()
                            ->upload($yun_path . $backtrack['music_info']['mid'] . ".jpeg", $system_path . $backtrack['music_info']['mid'] . ".jpeg");
                        // 音频文件
李光春's avatar
李光春 已提交
354
                        $backtrack['yun']['music_info']['play'] = ObsService::instance()
李光春's avatar
李光春 已提交
355
                            ->upload($yun_path . $backtrack['music_info']['mid'] . ".mp3", $system_path . $backtrack['music_info']['mid'] . ".mp3");
李光春's avatar
李光春 已提交
356 357
                        // 音频封面
                        $backtrack['yun']['music_info']['cover'] = ObsService::instance()
李光春's avatar
李光春 已提交
358
                            ->upload($yun_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg", $system_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg");
李光春's avatar
李光春 已提交
359
                        // 视频封面
李光春's avatar
李光春 已提交
360
                        $backtrack['yun']['video_info']['dynamic'] = ObsService::instance()
李光春's avatar
李光春 已提交
361
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg");
李光春's avatar
李光春 已提交
362
                        // 视频封面
李光春's avatar
李光春 已提交
363
                        $backtrack['yun']['video_info']['origin_cover'] = ObsService::instance()
李光春's avatar
李光春 已提交
364
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg");
李光春's avatar
李光春 已提交
365
                        // 视频封面
李光春's avatar
李光春 已提交
366
                        $backtrack['yun']['video_info']['cover'] = ObsService::instance()
李光春's avatar
李光春 已提交
367
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg");
李光春's avatar
李光春 已提交
368
                        // 视频文件
李光春's avatar
李光春 已提交
369
                        $backtrack['yun']['video_info']['play'] = ObsService::instance()
李光春's avatar
李光春 已提交
370
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_play" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_play" . ".mp4");
李光春's avatar
李光春 已提交
371
                        // 视频文件
李光春's avatar
李光春 已提交
372
                        $backtrack['yun']['video_info']['playwm'] = ObsService::instance()
李光春's avatar
李光春 已提交
373
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4");
李光春's avatar
李光春 已提交
374 375
                        break;
                    case "baidu":
李光春's avatar
李光春 已提交
376
                        // 作者头像
李光春's avatar
李光春 已提交
377
                        $backtrack['yun']['author_info']['avatar'] = BosService::instance()
李光春's avatar
李光春 已提交
378
                            ->upload($yun_path . $backtrack['author_info']['uid'] . ".jpeg", $system_path . $backtrack['author_info']['uid'] . ".jpeg");
李光春's avatar
李光春 已提交
379 380 381 382
                        // 音频头像
                        $backtrack['yun']['music_info']['avatar'] = BosService::instance()
                            ->upload($yun_path . $backtrack['music_info']['mid'] . ".jpeg", $system_path . $backtrack['music_info']['mid'] . ".jpeg");
                        // 音频文件
李光春's avatar
李光春 已提交
383
                        $backtrack['yun']['music_info']['play'] = BosService::instance()
李光春's avatar
李光春 已提交
384
                            ->upload($yun_path . $backtrack['music_info']['mid'] . ".mp3", $system_path . $backtrack['music_info']['mid'] . ".mp3");
李光春's avatar
李光春 已提交
385 386
                        // 音频封面
                        $backtrack['yun']['music_info']['cover'] = BosService::instance()
李光春's avatar
李光春 已提交
387
                            ->upload($yun_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg", $system_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg");
李光春's avatar
李光春 已提交
388
                        // 视频封面
李光春's avatar
李光春 已提交
389
                        $backtrack['yun']['video_info']['dynamic'] = BosService::instance()
李光春's avatar
李光春 已提交
390
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg");
李光春's avatar
李光春 已提交
391
                        // 视频封面
李光春's avatar
李光春 已提交
392
                        $backtrack['yun']['video_info']['origin_cover'] = BosService::instance()
李光春's avatar
李光春 已提交
393
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg");
李光春's avatar
李光春 已提交
394
                        // 视频封面
李光春's avatar
李光春 已提交
395
                        $backtrack['yun']['video_info']['cover'] = BosService::instance()
李光春's avatar
李光春 已提交
396
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg");
李光春's avatar
李光春 已提交
397
                        // 视频文件
李光春's avatar
李光春 已提交
398
                        $backtrack['yun']['video_info']['play'] = BosService::instance()
李光春's avatar
李光春 已提交
399
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_play" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_play" . ".mp4");
李光春's avatar
李光春 已提交
400
                        // 视频文件
李光春's avatar
李光春 已提交
401
                        $backtrack['yun']['video_info']['playwm'] = BosService::instance()
李光春's avatar
李光春 已提交
402
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4");
李光春's avatar
李光春 已提交
403 404 405 406 407
                        break;
                    default:
                        break;
                }
                // 大小信息
李光春's avatar
李光春 已提交
408
                // 作者头像
李光春's avatar
李光春 已提交
409
                $backtrack['size']['author_info']['avatar'] = StorageService::instance()
李光春's avatar
李光春 已提交
410
                    ->path($this->storagePath . $backtrack['author_info']['uid'] . "/")
李光春's avatar
李光春 已提交
411
                    ->remotely($backtrack['author_info']['avatar'])
李光春's avatar
李光春 已提交
412
                    ->bytes($backtrack['author_info']['uid'] . ".jpeg");
李光春's avatar
李光春 已提交
413 414 415 416 417 418
                // 音频头像
                $backtrack['size']['music_info']['avatar'] = StorageService::instance()
                    ->path($this->storagePath . $backtrack['author_info']['uid'] . "/")
                    ->remotely($backtrack['music_info']['avatar'])
                    ->bytes($backtrack['music_info']['mid'] . ".jpeg");
                // 音频文件
李光春's avatar
李光春 已提交
419
                $backtrack['size']['music_info']['play'] = StorageService::instance()
李光春's avatar
李光春 已提交
420
                    ->path($this->storagePath . $backtrack['author_info']['uid'] . "/")
李光春's avatar
李光春 已提交
421
                    ->remotely($backtrack['music_info']['play'])
李光春's avatar
李光春 已提交
422
                    ->bytes($backtrack['music_info']['mid'] . ".mp3");
李光春's avatar
李光春 已提交
423 424 425 426 427 428
                // 音频封面
                $backtrack['size']['music_info']['cover'] = StorageService::instance()
                    ->path($this->storagePath . $backtrack['author_info']['uid'] . "/")
                    ->remotely($backtrack['music_info']['cover'])
                    ->bytes($backtrack['music_info']['mid'] . "_cover" . ".jpeg");
                // 视频封面
李光春's avatar
李光春 已提交
429
                $backtrack['size']['video_info']['dynamic'] = StorageService::instance()
李光春's avatar
李光春 已提交
430
                    ->path($this->storagePath . $backtrack['author_info']['uid'] . "/")
李光春's avatar
李光春 已提交
431
                    ->remotely($backtrack['video_info']['dynamic'])
李光春's avatar
李光春 已提交
432
                    ->bytes($backtrack['video_info']['vid'] . "_dynamic" . ".jpeg");
李光春's avatar
李光春 已提交
433
                // 视频封面
李光春's avatar
李光春 已提交
434
                $backtrack['size']['video_info']['origin_cover'] = StorageService::instance()
李光春's avatar
李光春 已提交
435
                    ->path($this->storagePath . $backtrack['author_info']['uid'] . "/")
李光春's avatar
李光春 已提交
436
                    ->remotely($backtrack['video_info']['origin_cover'])
李光春's avatar
李光春 已提交
437
                    ->bytes($backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg");
李光春's avatar
李光春 已提交
438
                // 视频封面
李光春's avatar
李光春 已提交
439
                $backtrack['size']['video_info']['cover'] = StorageService::instance()
李光春's avatar
李光春 已提交
440
                    ->path($this->storagePath . $backtrack['author_info']['uid'] . "/")
李光春's avatar
李光春 已提交
441
                    ->remotely($backtrack['video_info']['cover'])
李光春's avatar
李光春 已提交
442
                    ->bytes($backtrack['video_info']['vid'] . "_cover" . ".jpeg");
李光春's avatar
李光春 已提交
443
                // 视频文件
李光春's avatar
李光春 已提交
444
                $backtrack['size']['video_info']['play'] = StorageService::instance()
李光春's avatar
李光春 已提交
445
                    ->path($this->storagePath . $backtrack['author_info']['uid'] . "/")
李光春's avatar
李光春 已提交
446
                    ->remotely($backtrack['video_info']['play'])
李光春's avatar
李光春 已提交
447
                    ->bytes($backtrack['video_info']['vid'] . "_play" . ".mp4");
李光春's avatar
李光春 已提交
448
                // 视频文件
李光春's avatar
李光春 已提交
449
                $backtrack['size']['video_info']['playwm'] = StorageService::instance()
李光春's avatar
李光春 已提交
450
                    ->path($this->storagePath . $backtrack['author_info']['uid'] . "/")
李光春's avatar
李光春 已提交
451
                    ->remotely($backtrack['video_info']['playwm'])
李光春's avatar
李光春 已提交
452
                    ->bytes($backtrack['video_info']['vid'] . "_playwm" . ".mp4");
李光春's avatar
李光春 已提交
453
                // 删除文件
李光春's avatar
李光春 已提交
454
                // 作者头像
李光春's avatar
李光春 已提交
455
                StorageService::instance()
李光春's avatar
李光春 已提交
456
                    ->path($this->storagePath . $backtrack['author_info']['uid'] . "/")
李光春's avatar
李光春 已提交
457
                    ->remotely($backtrack['author_info']['avatar'])
李光春's avatar
李光春 已提交
458
                    ->delete($backtrack['author_info']['uid'] . ".jpeg");
李光春's avatar
李光春 已提交
459 460 461 462 463 464 465
                // 音频头像
                $backtrack['size']['music_info']['avatar'] = StorageService::instance()
                    ->path($this->storagePath . $backtrack['author_info']['uid'] . "/")
                    ->remotely($backtrack['music_info']['avatar'])
                    ->delete($backtrack['music_info']['mid'] . ".jpeg");
                // 音频文件
                $backtrack['size']['music_info']['play'] = StorageService::instance()
李光春's avatar
李光春 已提交
466
                    ->path($this->storagePath . $backtrack['author_info']['uid'] . "/")
李光春's avatar
李光春 已提交
467
                    ->remotely($backtrack['music_info']['play'])
李光春's avatar
李光春 已提交
468
                    ->delete($backtrack['music_info']['mid'] . ".mp3");
李光春's avatar
李光春 已提交
469 470 471 472 473 474
                // 音频封面
                $backtrack['size']['music_info']['cover'] = StorageService::instance()
                    ->path($this->storagePath . $backtrack['author_info']['uid'] . "/")
                    ->remotely($backtrack['music_info']['cover'])
                    ->delete($backtrack['music_info']['mid'] . "_cover" . ".jpeg");
                // 视频封面
李光春's avatar
李光春 已提交
475
                StorageService::instance()
李光春's avatar
李光春 已提交
476
                    ->path($this->storagePath . $backtrack['author_info']['uid'] . "/")
李光春's avatar
李光春 已提交
477
                    ->remotely($backtrack['video_info']['dynamic'])
李光春's avatar
李光春 已提交
478
                    ->delete($backtrack['video_info']['vid'] . "_dynamic" . ".jpeg");
李光春's avatar
李光春 已提交
479
                // 视频封面
李光春's avatar
李光春 已提交
480
                StorageService::instance()
李光春's avatar
李光春 已提交
481
                    ->path($this->storagePath . $backtrack['author_info']['uid'] . "/")
李光春's avatar
李光春 已提交
482
                    ->remotely($backtrack['video_info']['origin_cover'])
李光春's avatar
李光春 已提交
483
                    ->delete($backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg");
李光春's avatar
李光春 已提交
484
                // 视频封面
李光春's avatar
李光春 已提交
485
                StorageService::instance()
李光春's avatar
李光春 已提交
486
                    ->path($this->storagePath . $backtrack['author_info']['uid'] . "/")
李光春's avatar
李光春 已提交
487
                    ->remotely($backtrack['video_info']['cover'])
李光春's avatar
李光春 已提交
488
                    ->delete($backtrack['video_info']['vid'] . "_cover" . ".jpeg");
李光春's avatar
李光春 已提交
489
                // 视频文件
李光春's avatar
李光春 已提交
490
                StorageService::instance()
李光春's avatar
李光春 已提交
491
                    ->path($this->storagePath . $backtrack['author_info']['uid'] . "/")
李光春's avatar
李光春 已提交
492
                    ->remotely($backtrack['video_info']['play'])
李光春's avatar
李光春 已提交
493
                    ->delete($backtrack['video_info']['vid'] . "_play" . ".mp4");
李光春's avatar
李光春 已提交
494
                // 视频文件
李光春's avatar
李光春 已提交
495
                StorageService::instance()
李光春's avatar
李光春 已提交
496
                    ->path($this->storagePath . $backtrack['author_info']['uid'] . "/")
李光春's avatar
李光春 已提交
497
                    ->remotely($backtrack['video_info']['playwm'])
李光春's avatar
李光春 已提交
498
                    ->delete($backtrack['video_info']['vid'] . "_playwm" . ".mp4");
李光春's avatar
李光春 已提交
499
            }
李光春's avatar
李光春 已提交
500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519
            $this->backtrack = $backtrack;
        } else {
            $this->backtrack = [];
        }
        return $this;
    }

    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)
    {
李光春's avatar
李光春 已提交
520 521 522
        if (strpos($url, 'douyin.com') !== false) return $url;
        else if (strpos($url, 'iesdouyin.com') !== false) return $url;
        else return '';
李光春's avatar
李光春 已提交
523 524 525 526 527 528
    }

    /**
     * 正则匹配 mid
     * @param $content
     * @return mixed
李光春's avatar
李光春 已提交
529
     * @throws DtaException
李光春's avatar
李光春 已提交
530 531 532 533
     */
    private function getItemId($content)
    {
        preg_match('/"(?<=itemId:\s\")\d+"/', $content, $matches);
李光春's avatar
李光春 已提交
534
        if (!isset($matches[0])) throw new DtaException('视频不存在');
李光春's avatar
李光春 已提交
535
        preg_match("~\"(.*?)\"~", $matches[0], $matches2);
李光春's avatar
李光春 已提交
536
        if (!isset($matches2[1])) throw new DtaException('视频不存在');
李光春's avatar
李光春 已提交
537 538 539 540 541 542 543
        return $matches2[1];
    }

    /**
     * 正则匹配 dytk
     * @param $content
     * @return mixed
李光春's avatar
李光春 已提交
544
     * @throws DtaException
李光春's avatar
李光春 已提交
545
     */
李光春's avatar
李光春 已提交
546
    private function getDyTk($content)
李光春's avatar
李光春 已提交
547 548
    {
        preg_match("~dytk(.*?)}~", $content, $matches);
李光春's avatar
李光春 已提交
549
        if (!isset($matches[1])) throw new DtaException('视频不存在');
李光春's avatar
李光春 已提交
550 551
        $Dytk = $matches[1];
        preg_match("~\"(.*?)\"~", $Dytk, $matches2);
李光春's avatar
李光春 已提交
552
        if (!isset($matches2[1])) throw new DtaException('视频不存在');
李光春's avatar
李光春 已提交
553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630
        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)
    {
        // 1080x1080
        if (isset($data['avatar_larger']['url_list'][0])) return $data['avatar_larger']['url_list'][0];
        // 720x720
        if (isset($data['avatar_medium']['url_list'][0])) return $data['avatar_medium']['url_list'][0];
        // 100x100
        if (isset($data['avatar_thumb']['url_list'][0])) return $data['avatar_thumb']['url_list'][0];
        return '';
    }

    /**
     * 处理音乐作者头像 大到小
     * @param $data
     * @return string
     */
    private function cMusicAvatar($data)
    {
        // 1080x1080
        if (isset($data['cover_hd']['url_list'][0])) return $data['cover_hd']['url_list'][0];
        // 720x720
        if (isset($data['cover_medium']['url_list'][0])) return $data['cover_medium']['url_list'][0];
        // 100x100
        if (isset($data['cover_thumb']['url_list'][0])) return $data['cover_thumb']['url_list'][0];
        return '';
    }

    /**
     * 处理视频封面 大到小
     * @param $data
     * @return array
     */
    private function cVideoAvatar($data)
    {
        $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;
    }
李光春's avatar
李光春 已提交
631 632 633 634 635 636 637 638 639 640 641 642 643 644

    /**
     * 返回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'];
    }
李光春's avatar
李光春 已提交
645
}