WatermarkService::getVideoInfo()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 22
Code Lines 19

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 19
c 2
b 0
f 0
dl 0
loc 22
rs 9.6333
cc 2
nc 2
nop 0
1
<?php
2
3
// +----------------------------------------------------------------------
4
// | ThinkLibrary 6.0 for ThinkPhP 6.0
5
// +----------------------------------------------------------------------
6
// | 版权所有 2017~2020 [ https://www.dtapp.net ]
7
// +----------------------------------------------------------------------
8
// | 官方网站: https://gitee.com/liguangchun/ThinkLibrary
9
// +----------------------------------------------------------------------
10
// | 开源协议 ( https://mit-license.org )
11
// +----------------------------------------------------------------------
12
// | gitee 仓库地址 :https://gitee.com/liguangchun/ThinkLibrary
13
// | github 仓库地址 :https://github.com/GC0202/ThinkLibrary
14
// | Packagist 地址 :https://packagist.org/packages/liguangchun/think-library
15
// +----------------------------------------------------------------------
16
17
namespace DtApp\ThinkLibrary\service\douyin;
18
19
use DtApp\ThinkLibrary\exception\DtaException;
20
use DtApp\ThinkLibrary\facade\Pregs;
21
use DtApp\ThinkLibrary\Service;
22
use DtApp\ThinkLibrary\service\aliyun\OssService;
23
use DtApp\ThinkLibrary\service\baidu\BosService;
24
use DtApp\ThinkLibrary\service\huaweicloud\ObsService;
25
use DtApp\ThinkLibrary\service\ksyun\Ks3Service;
26
use DtApp\ThinkLibrary\service\qiniu\KodoService;
27
use DtApp\ThinkLibrary\service\StorageService;
28
use DtApp\ThinkLibrary\service\tencent\CosService;
29
use DtApp\ThinkLibrary\service\upyun\UssService;
30
use Exception;
31
use stdClass;
32
33
/**
34
 * 抖音-视频去水印
35
 * Class WatermarkService
36
 * @package DtApp\ThinkLibrary\service\douyin
37
 */
38
class WatermarkService extends Service
39
{
40
    /**
41
     * @var
42
     */
43
    private $url, $apiUrl, $itemId, $dytk, $contents, $backtrack, $storage, $storagePath;
44
45
    /**
46
     * 配置网址
47
     * @param $str
48
     * @return $this
49
     * @throws DtaException
50
     */
51
    public function url($str): self
52
    {
53
        if (Pregs::isLink($str)) {
54
            $url = $this->judgeUrl($str);
55
            if (empty($url)) {
56
                throw new DtaException('配置网址内容不正确');
57
            }
58
            $this->url = $url;
59
        } else {
60
            preg_match_all('#\bhttps?://[^,\s()<>]+(?:\([\w\d]+\)|([^,[:punct:]\s]|/))#', $str, $match);
61
            $url = $this->judgeUrl($match[0][0]);
62
            if (empty($url)) {
63
                throw new DtaException('配置网址内容不正确');
64
            }
65
            $this->url = $url;
66
        }
67
        $content = $this->getContents($this->url);
68
        $this->itemId = $this->getItemId($content);
69
        $this->dytk = $this->getDyTk($content);
70
        return $this;
71
    }
72
73
    /**
74
     * 云存储
75
     * @param string $type
76
     * @param string $path
77
     * @return $this
78
     */
79
    public function storage(string $type, string $path): self
80
    {
81
        $this->storage = $type;
82
        $this->storagePath = $path;
83
        return $this;
84
    }
85
86
    /**
87
     * 获取作者信息
88
     * @return string
89
     */
90
    public function getAuthorInfo()
91
    {
92
        $this->getApi();
93
        $data = json_decode($this->contents, true);
94
        if (empty($data['status_code'])) {
95
            $item_list = $data['item_list'][0];
96
            $backtrack = [];
97
            $backtrack['uid'] = $item_list['author']['uid'];
98
            $backtrack['nickname'] = $item_list['author']['nickname'];
99
            $backtrack['unique_id'] = $item_list['author']['unique_id'];
100
            $backtrack['short_id'] = $item_list['author']['short_id'];
101
            $backtrack['avatar'] = $this->cAuthorAvatar($item_list['author']);
102
            $this->backtrack = $backtrack;
103
        } else {
104
            $this->backtrack = [];
105
        }
106
        return $this;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this returns the type DtApp\ThinkLibrary\service\douyin\WatermarkService which is incompatible with the documented return type string.
Loading history...
107
    }
108
109
    /**
110
     * 获取分享信息
111
     * @return string
112
     */
113
    public function getShareInfo()
114
    {
115
        $this->getApi();
116
        $data = json_decode($this->contents, true);
117
        if (empty($data['status_code'])) {
118
            $item_list = $data['item_list'][0];
119
            $backtrack = [];
120
            $backtrack['weibo_desc'] = $item_list['share_info']['share_weibo_desc'];
121
            $backtrack['desc'] = $item_list['share_info']['share_desc'];
122
            $backtrack['title'] = $item_list['share_info']['share_title'];
123
            $backtrack['url'] = $item_list['share_url'];
124
            $this->backtrack = $backtrack;
125
        } else {
126
            $this->backtrack = [];
127
        }
128
        return $this;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this returns the type DtApp\ThinkLibrary\service\douyin\WatermarkService which is incompatible with the documented return type string.
Loading history...
129
    }
130
131
    /**
132
     * 获取音乐信息
133
     * @return string
134
     */
135
    public function getMusicInfo(): string
136
    {
137
        $this->getApi();
138
        $data = json_decode($this->contents, true);
139
        if (empty($data['status_code'])) {
140
            $item_list = $data['item_list'][0];
141
            $backtrack = [];
142
            $backtrack['id'] = $item_list['music']['id'];
143
            $backtrack['mid'] = $item_list['music']['mid'];
144
            $backtrack['title'] = $item_list['music']['title'];
145
            $backtrack['author'] = $item_list['music']['author'];
146
            $backtrack['avatar'] = $this->cMusicAvatar($item_list['music']);
147
            $backtrack['play'] = $item_list['music']['play_url']['uri'];
148
            $backtrack['cover'] = $item_list['music']['cover_large']['url_list'][0];
149
            $this->backtrack = $backtrack;
150
        } else {
151
            $this->backtrack = [];
152
        }
153
        return $this;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this returns the type DtApp\ThinkLibrary\service\douyin\WatermarkService which is incompatible with the type-hinted return string.
Loading history...
154
    }
155
156
    /**
157
     * 获取视频信息
158
     * @return string
159
     */
160
    public function getVideoInfo()
161
    {
162
        $this->getApi();
163
        $data = json_decode($this->contents, true);
164
        if (empty($data['status_code'])) {
165
            $item_list = $data['item_list'][0];
166
            $backtrack = [];
167
            $backtrack['vid'] = $item_list['video']['vid'];
168
            $backtrack['desc'] = $item_list['desc'];
169
            $backtrack['width'] = $item_list['video']['width'];
170
            $backtrack['height'] = $item_list['video']['height'];
171
            $cVideoAvatar = $this->cVideoAvatar($item_list['video']);
172
            $backtrack['dynamic'] = $cVideoAvatar['dynamic'];
173
            $backtrack['origin_cover'] = $cVideoAvatar['origin_cover'];
174
            $backtrack['cover'] = $cVideoAvatar['cover'];
175
            $backtrack['play'] = $this->cVideoPlayUrl($item_list['video']['play_addr']['url_list'][0], 'play');
176
            $backtrack['playwm'] = $this->cVideoPlayUrl($item_list['video']['play_addr']['url_list'][0], 'playwm');
177
            $this->backtrack = $backtrack;
178
        } else {
179
            $this->backtrack = [];
180
        }
181
        return $this;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this returns the type DtApp\ThinkLibrary\service\douyin\WatermarkService which is incompatible with the documented return type string.
Loading history...
182
    }
183
184
    /**
185
     * 获取接口全部信息
186
     * @return $this
187
     */
188
    public function getApi(): self
189
    {
190
        $this->apiUrl = "https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids={$this->itemId}&dytk={$this->dytk}";
191
        $this->contents = $this->getContents($this->apiUrl);
192
        $this->backtrack = $this->contents;
193
        return $this;
194
    }
195
196
    /**
197
     * 获取全部信息
198
     * @return $this
199
     * @throws Exception
200
     */
201
    public function getAll()
202
    {
203
        $this->getApi();
204
        $data = json_decode($this->contents, true);
205
        if (empty($data['status_code'])) {
206
            $item_list = $data['item_list'][0];
207
            $backtrack = [];
208
            // 作者信息
209
            $backtrack['author_info']['uid'] = $item_list['author']['uid'];
210
            $backtrack['author_info']['nickname'] = $item_list['author']['nickname'];
211
            $backtrack['author_info']['unique_id'] = $item_list['author']['unique_id'];
212
            $backtrack['author_info']['short_id'] = $item_list['author']['short_id'];
213
            $backtrack['author_info']['avatar'] = $this->cAuthorAvatar($item_list['author']);
214
            // 分享信息
215
            $backtrack['share_info']['weibo_desc'] = $item_list['share_info']['share_weibo_desc'];
216
            $backtrack['share_info']['desc'] = $item_list['share_info']['share_desc'];
217
            $backtrack['share_info']['title'] = $item_list['share_info']['share_title'];
218
            $backtrack['share_info']['url'] = $item_list['share_url'];
219
            // 音乐信息
220
            $backtrack['music_info']['id'] = $item_list['music']['id'] ?? '';
221
            $backtrack['music_info']['mid'] = $item_list['music']['mid'] ?? '';
222
            $backtrack['music_info']['title'] = $item_list['music']['title'] ?? '';
223
            $backtrack['music_info']['author'] = $item_list['music']['author'] ?? '';
224
            $backtrack['music_info']['avatar'] = isset($item_list['music']) ? $this->cMusicAvatar($item_list['music']) : '';
225
            $backtrack['music_info']['play'] = $item_list['music']['play_url']['uri'] ?? '';
226
            $backtrack['music_info']['cover'] = $item_list['music']['cover_large']['url_list'][0] ?? '';
227
            // 视频信息
228
            $backtrack['video_info']['vid'] = $item_list['video']['vid'];
229
            $backtrack['video_info']['desc'] = $item_list['desc'];
230
            $backtrack['video_info']['width'] = $item_list['video']['width'];
231
            $backtrack['video_info']['height'] = $item_list['video']['height'];
232
            $cVideoAvatar = $this->cVideoAvatar($item_list['video']);
233
            $backtrack['video_info']['dynamic'] = $cVideoAvatar['dynamic'];
234
            $backtrack['video_info']['origin_cover'] = $cVideoAvatar['origin_cover'];
235
            $backtrack['video_info']['cover'] = $cVideoAvatar['cover'];
236
            $backtrack['video_info']['play'] = $this->cVideoPlayUrl($item_list['video']['play_addr']['url_list'][0], 'play');
237
            $backtrack['video_info']['playwm'] = $this->cVideoPlayUrl($item_list['video']['play_addr']['url_list'][0], 'playwm');
238
            $this->storagePath .= $backtrack['author_info']['uid'] . "/";
239
            if (!empty($this->storage)) {
240
                // 保存文件
241
                // 作者头像
242
                $author_info_avatar = StorageService::instance()
243
                    ->path($this->storagePath)
244
                    ->remotely($backtrack['author_info']['avatar'])
245
                    ->save($backtrack['author_info']['uid'] . ".jpeg");
246
                // 音频头像
247
                $music_info_avatar = StorageService::instance()
248
                    ->path($this->storagePath)
249
                    ->remotely($backtrack['music_info']['avatar'])
250
                    ->save($backtrack['music_info']['mid'] . ".jpeg");
251
                // 音频文件
252
                if (!empty($backtrack['music_info']['play'])) {
253
                    $music_info_play = StorageService::instance()
254
                        ->path($this->storagePath)
255
                        ->remotely($backtrack['music_info']['play'])
256
                        ->save($backtrack['music_info']['mid'] . ".mp3");
257
                } else {
258
                    $music_info_play = ['size' => '0kb'];
259
                }
260
                // 音频封面
261
                $music_info_cover = StorageService::instance()
262
                    ->path($this->storagePath)
263
                    ->remotely($backtrack['music_info']['cover'])
264
                    ->save($backtrack['music_info']['mid'] . "_cover" . ".jpeg");
265
                // 视频封面
266
                $video_info_dynamic = StorageService::instance()
267
                    ->path($this->storagePath)
268
                    ->remotely($backtrack['video_info']['dynamic'])
269
                    ->save($backtrack['video_info']['vid'] . "_dynamic" . ".jpeg");
270
                // 视频封面
271
                $video_info_origin_cover = StorageService::instance()
272
                    ->path($this->storagePath)
273
                    ->remotely($backtrack['video_info']['origin_cover'])
274
                    ->save($backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg");
275
                // 视频封面
276
                $video_info_cover = StorageService::instance()
277
                    ->path($this->storagePath)
278
                    ->remotely($backtrack['video_info']['cover'])
279
                    ->save($backtrack['video_info']['vid'] . "_cover" . ".jpeg");
280
                // 视频文件
281
                $video_info_play = StorageService::instance()
282
                    ->path($this->storagePath)
283
                    ->remotely($backtrack['video_info']['play'])
284
                    ->save($backtrack['video_info']['vid'] . "_play" . ".mp4");
285
                // 视频文件
286
                $video_info_playwm = StorageService::instance()
287
                    ->path($this->storagePath)
288
                    ->remotely($backtrack['video_info']['playwm'])
289
                    ->save($backtrack['video_info']['vid'] . "_playwm" . ".mp4");
290
                $system_path = StorageService::instance()
291
                    ->path($this->storagePath)
292
                    ->getPath();
293
                $yun_path = "douyin/" . $backtrack['author_info']['uid'] . '/';
294
                // 上传到云存储
295
                $backtrack['yun']['platform'] = $this->storage;
296
                switch ($this->storage) {
297
                    case "aliyun":
298
                        // 作者头像
299
                        $backtrack['yun']['author_info']['avatar'] = OssService::instance()
300
                            ->upload($yun_path . $backtrack['author_info']['uid'] . ".jpeg", $system_path . $backtrack['author_info']['uid'] . ".jpeg");
301
                        // 音频头像
302
                        $backtrack['yun']['music_info']['avatar'] = OssService::instance()
303
                            ->upload($yun_path . $backtrack['music_info']['mid'] . ".jpeg", $system_path . $backtrack['music_info']['mid'] . ".jpeg");
304
                        // 音频文件
305
                        if (!empty($backtrack['music_info']['play'])) {
306
                            $backtrack['yun']['music_info']['play'] = OssService::instance()
307
                                ->upload($yun_path . $backtrack['music_info']['mid'] . ".mp3", $system_path . $backtrack['music_info']['mid'] . ".mp3");
308
                        } else {
309
                            $backtrack['yun']['music_info']['play'] = '';
310
                        }
311
                        // 音频封面
312
                        $backtrack['yun']['music_info']['cover'] = OssService::instance()
313
                            ->upload($yun_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg", $system_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg");
314
                        // 视频封面
315
                        $backtrack['yun']['video_info']['dynamic'] = OssService::instance()
316
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg");
317
                        // 视频封面
318
                        $backtrack['yun']['video_info']['origin_cover'] = OssService::instance()
319
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg");
320
                        // 视频封面
321
                        $backtrack['yun']['video_info']['cover'] = OssService::instance()
322
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg");
323
                        // 视频文件
324
                        $backtrack['yun']['video_info']['play'] = OssService::instance()
325
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_play" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_play" . ".mp4");
326
                        // 视频文件
327
                        $backtrack['yun']['video_info']['playwm'] = OssService::instance()
328
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4");
329
                        break;
330
                    case "tencentcloud":
331
                        // 作者头像
332
                        $backtrack['yun']['author_info']['avatar'] = CosService::instance()
333
                            ->upload($yun_path . $backtrack['author_info']['uid'] . ".jpeg", $system_path . $backtrack['author_info']['uid'] . ".jpeg");
334
                        // 音频头像
335
                        $backtrack['yun']['music_info']['avatar'] = CosService::instance()
336
                            ->upload($yun_path . $backtrack['music_info']['mid'] . ".jpeg", $system_path . $backtrack['music_info']['mid'] . ".jpeg");
337
                        // 音频文件
338
                        if (!empty($backtrack['music_info']['play'])) {
339
                            $backtrack['yun']['music_info']['play'] = CosService::instance()
340
                                ->upload($yun_path . $backtrack['music_info']['mid'] . ".mp3", $system_path . $backtrack['music_info']['mid'] . ".mp3");
341
                        } else {
342
                            $backtrack['yun']['music_info']['play'] = '';
343
                        }
344
                        // 音频封面
345
                        $backtrack['yun']['music_info']['cover'] = CosService::instance()
346
                            ->upload($yun_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg", $system_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg");
347
                        // 视频封面
348
                        $backtrack['yun']['video_info']['dynamic'] = CosService::instance()
349
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg");
350
                        // 视频封面
351
                        $backtrack['yun']['video_info']['origin_cover'] = CosService::instance()
352
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg");
353
                        // 视频封面
354
                        $backtrack['yun']['video_info']['cover'] = CosService::instance()
355
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg");
356
                        // 视频文件
357
                        $backtrack['yun']['video_info']['play'] = CosService::instance()
358
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_play" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_play" . ".mp4");
359
                        // 视频文件
360
                        $backtrack['yun']['video_info']['playwm'] = CosService::instance()
361
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4");
362
                        break;
363
                    case "huaweicloud":
364
                        // 作者头像
365
                        $backtrack['yun']['author_info']['avatar'] = ObsService::instance()
366
                            ->upload($yun_path . $backtrack['author_info']['uid'] . ".jpeg", $system_path . $backtrack['author_info']['uid'] . ".jpeg");
367
                        // 音频头像
368
                        $backtrack['yun']['music_info']['avatar'] = ObsService::instance()
369
                            ->upload($yun_path . $backtrack['music_info']['mid'] . ".jpeg", $system_path . $backtrack['music_info']['mid'] . ".jpeg");
370
                        // 音频文件
371
                        if (!empty($backtrack['music_info']['play'])) {
372
                            $backtrack['yun']['music_info']['play'] = ObsService::instance()
373
                                ->upload($yun_path . $backtrack['music_info']['mid'] . ".mp3", $system_path . $backtrack['music_info']['mid'] . ".mp3");
374
                        } else {
375
                            $backtrack['yun']['music_info']['play'] = '';
376
                        }
377
                        // 音频封面
378
                        $backtrack['yun']['music_info']['cover'] = ObsService::instance()
379
                            ->upload($yun_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg", $system_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg");
380
                        // 视频封面
381
                        $backtrack['yun']['video_info']['dynamic'] = ObsService::instance()
382
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg");
383
                        // 视频封面
384
                        $backtrack['yun']['video_info']['origin_cover'] = ObsService::instance()
385
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg");
386
                        // 视频封面
387
                        $backtrack['yun']['video_info']['cover'] = ObsService::instance()
388
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg");
389
                        // 视频文件
390
                        $backtrack['yun']['video_info']['play'] = ObsService::instance()
391
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_play" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_play" . ".mp4");
392
                        // 视频文件
393
                        $backtrack['yun']['video_info']['playwm'] = ObsService::instance()
394
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4");
395
                        break;
396
                    case "baiducloud":
397
                        // 作者头像
398
                        $backtrack['yun']['author_info']['avatar'] = BosService::instance()
399
                            ->upload($yun_path . $backtrack['author_info']['uid'] . ".jpeg", $system_path . $backtrack['author_info']['uid'] . ".jpeg");
400
                        // 音频头像
401
                        $backtrack['yun']['music_info']['avatar'] = BosService::instance()
402
                            ->upload($yun_path . $backtrack['music_info']['mid'] . ".jpeg", $system_path . $backtrack['music_info']['mid'] . ".jpeg");
403
                        // 音频文件
404
                        if (!empty($backtrack['music_info']['play'])) {
405
                            $backtrack['yun']['music_info']['play'] = BosService::instance()
406
                                ->upload($yun_path . $backtrack['music_info']['mid'] . ".mp3", $system_path . $backtrack['music_info']['mid'] . ".mp3");
407
                        } else {
408
                            $backtrack['yun']['music_info']['play'] = '';
409
                        }
410
                        // 音频封面
411
                        $backtrack['yun']['music_info']['cover'] = BosService::instance()
412
                            ->upload($yun_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg", $system_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg");
413
                        // 视频封面
414
                        $backtrack['yun']['video_info']['dynamic'] = BosService::instance()
415
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg");
416
                        // 视频封面
417
                        $backtrack['yun']['video_info']['origin_cover'] = BosService::instance()
418
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg");
419
                        // 视频封面
420
                        $backtrack['yun']['video_info']['cover'] = BosService::instance()
421
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg");
422
                        // 视频文件
423
                        $backtrack['yun']['video_info']['play'] = BosService::instance()
424
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_play" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_play" . ".mp4");
425
                        // 视频文件
426
                        $backtrack['yun']['video_info']['playwm'] = BosService::instance()
427
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4");
428
                        break;
429
                    case "qiniu":
430
                        // 作者头像
431
                        $backtrack['yun']['author_info']['avatar'] = KodoService::instance()
432
                            ->upload($yun_path . $backtrack['author_info']['uid'] . ".jpeg", $system_path . $backtrack['author_info']['uid'] . ".jpeg");
433
                        // 音频头像
434
                        $backtrack['yun']['music_info']['avatar'] = KodoService::instance()
435
                            ->upload($yun_path . $backtrack['music_info']['mid'] . ".jpeg", $system_path . $backtrack['music_info']['mid'] . ".jpeg");
436
                        // 音频文件
437
                        if (!empty($backtrack['music_info']['play'])) {
438
                            $backtrack['yun']['music_info']['play'] = KodoService::instance()
439
                                ->upload($yun_path . $backtrack['music_info']['mid'] . ".mp3", $system_path . $backtrack['music_info']['mid'] . ".mp3");
440
                        } else {
441
                            $backtrack['yun']['music_info']['play'] = '';
442
                        }
443
                        // 音频封面
444
                        $backtrack['yun']['music_info']['cover'] = KodoService::instance()
445
                            ->upload($yun_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg", $system_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg");
446
                        // 视频封面
447
                        $backtrack['yun']['video_info']['dynamic'] = KodoService::instance()
448
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg");
449
                        // 视频封面
450
                        $backtrack['yun']['video_info']['origin_cover'] = KodoService::instance()
451
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg");
452
                        // 视频封面
453
                        $backtrack['yun']['video_info']['cover'] = KodoService::instance()
454
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg");
455
                        // 视频文件
456
                        $backtrack['yun']['video_info']['play'] = KodoService::instance()
457
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_play" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_play" . ".mp4");
458
                        // 视频文件
459
                        $backtrack['yun']['video_info']['playwm'] = KodoService::instance()
460
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4");
461
                        break;
462
                    case "upyun":
463
                        // 作者头像
464
                        $backtrack['yun']['author_info']['avatar'] = UssService::instance()
465
                            ->upload($yun_path . $backtrack['author_info']['uid'] . ".jpeg", $system_path . $backtrack['author_info']['uid'] . ".jpeg");
466
                        // 音频头像
467
                        $backtrack['yun']['music_info']['avatar'] = UssService::instance()
468
                            ->upload($yun_path . $backtrack['music_info']['mid'] . ".jpeg", $system_path . $backtrack['music_info']['mid'] . ".jpeg");
469
                        // 音频文件
470
                        if (!empty($backtrack['music_info']['play'])) {
471
                            $backtrack['yun']['music_info']['play'] = UssService::instance()
472
                                ->upload($yun_path . $backtrack['music_info']['mid'] . ".mp3", $system_path . $backtrack['music_info']['mid'] . ".mp3");
473
                        } else {
474
                            $backtrack['yun']['music_info']['play'] = '';
475
                        }
476
                        // 音频封面
477
                        $backtrack['yun']['music_info']['cover'] = UssService::instance()
478
                            ->upload($yun_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg", $system_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg");
479
                        // 视频封面
480
                        $backtrack['yun']['video_info']['dynamic'] = UssService::instance()
481
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg");
482
                        // 视频封面
483
                        $backtrack['yun']['video_info']['origin_cover'] = UssService::instance()
484
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg");
485
                        // 视频封面
486
                        $backtrack['yun']['video_info']['cover'] = UssService::instance()
487
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg");
488
                        // 视频文件
489
                        $backtrack['yun']['video_info']['play'] = UssService::instance()
490
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_play" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_play" . ".mp4");
491
                        // 视频文件
492
                        $backtrack['yun']['video_info']['playwm'] = UssService::instance()
493
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4");
494
                        break;
495
                    case "ksyun":
496
                        // 作者头像
497
                        $backtrack['yun']['author_info']['avatar'] = Ks3Service::instance()
498
                            ->upload($yun_path . $backtrack['author_info']['uid'] . ".jpeg", $system_path . $backtrack['author_info']['uid'] . ".jpeg");
499
                        // 音频头像
500
                        $backtrack['yun']['music_info']['avatar'] = Ks3Service::instance()
501
                            ->upload($yun_path . $backtrack['music_info']['mid'] . ".jpeg", $system_path . $backtrack['music_info']['mid'] . ".jpeg");
502
                        // 音频文件
503
                        if (!empty($backtrack['music_info']['play'])) {
504
                            $backtrack['yun']['music_info']['play'] = Ks3Service::instance()
505
                                ->upload($yun_path . $backtrack['music_info']['mid'] . ".mp3", $system_path . $backtrack['music_info']['mid'] . ".mp3");
506
                        } else {
507
                            $backtrack['yun']['music_info']['play'] = '';
508
                        }
509
                        // 音频封面
510
                        $backtrack['yun']['music_info']['cover'] = Ks3Service::instance()
511
                            ->upload($yun_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg", $system_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg");
512
                        // 视频封面
513
                        $backtrack['yun']['video_info']['dynamic'] = Ks3Service::instance()
514
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg");
515
                        // 视频封面
516
                        $backtrack['yun']['video_info']['origin_cover'] = Ks3Service::instance()
517
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg");
518
                        // 视频封面
519
                        $backtrack['yun']['video_info']['cover'] = Ks3Service::instance()
520
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg", $system_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg");
521
                        // 视频文件
522
                        $backtrack['yun']['video_info']['play'] = Ks3Service::instance()
523
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_play" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_play" . ".mp4");
524
                        // 视频文件
525
                        $backtrack['yun']['video_info']['playwm'] = Ks3Service::instance()
526
                            ->upload($yun_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4", $system_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4");
527
                        break;
528
                    case "storage":
529
                        $domain_name = config('dtapp.storage.domain_name');
530
                        $new_yun_path = config("dtapp.storage.domain_list.{$domain_name}") . "upload/watermark/{$yun_path}";
531
                        // 本地存储
532
                        // 作者头像
533
                        $backtrack['yun']['author_info']['avatar'] = ($new_yun_path) . $backtrack['author_info']['uid'] . ".jpeg";
534
                        // 音频头像
535
                        $backtrack['yun']['music_info']['avatar'] = $new_yun_path . $backtrack['music_info']['mid'] . ".jpeg";
536
                        // 音频文件
537
                        if (!empty($backtrack['music_info']['play'])) {
538
                            $backtrack['yun']['music_info']['play'] = $new_yun_path . $backtrack['music_info']['mid'] . ".mp3";
539
                        } else {
540
                            $backtrack['yun']['music_info']['play'] = $new_yun_path;
541
                        }
542
                        // 音频封面
543
                        $backtrack['yun']['music_info']['cover'] = $new_yun_path . $backtrack['music_info']['mid'] . "_cover" . ".jpeg";
544
                        // 视频封面
545
                        $backtrack['yun']['video_info']['dynamic'] = $new_yun_path . $backtrack['video_info']['vid'] . "_dynamic" . ".jpeg";
546
                        // 视频封面
547
                        $backtrack['yun']['video_info']['origin_cover'] = $new_yun_path . $backtrack['video_info']['vid'] . "_origin_cover" . ".jpeg";
548
                        // 视频封面
549
                        $backtrack['yun']['video_info']['cover'] = $new_yun_path . $backtrack['video_info']['vid'] . "_cover" . ".jpeg";
550
                        // 视频文件
551
                        $backtrack['yun']['video_info']['play'] = $new_yun_path . $backtrack['video_info']['vid'] . "_play" . ".mp4";
552
                        // 视频文件
553
                        $backtrack['yun']['video_info']['playwm'] = $new_yun_path . $backtrack['video_info']['vid'] . "_playwm" . ".mp4";
554
                        break;
555
                    default:
556
                        break;
557
                }
558
                // 大小信息
559
                // 作者头像
560
                $backtrack['size']['author_info']['avatar'] = $author_info_avatar['size'];
561
                // 音频头像
562
                $backtrack['size']['music_info']['avatar'] = $music_info_avatar['size'];
563
                // 音频文件
564
                $backtrack['size']['music_info']['play'] = $music_info_play['size'];
565
                // 音频封面
566
                $backtrack['size']['music_info']['cover'] = $music_info_cover['size'];
567
                // 视频封面
568
                $backtrack['size']['video_info']['dynamic'] = $video_info_dynamic['size'];
569
                // 视频封面
570
                $backtrack['size']['video_info']['origin_cover'] = $video_info_origin_cover['size'];
571
                // 视频封面
572
                $backtrack['size']['video_info']['cover'] = $video_info_cover['size'];
573
                // 视频文件
574
                $backtrack['size']['video_info']['play'] = $video_info_play['size'];
575
                // 视频文件
576
                $backtrack['size']['video_info']['playwm'] = $video_info_playwm['size'];
577
            }
578
            $this->backtrack = $backtrack;
579
        } else {
580
            $this->backtrack = [];
581
        }
582
        return $this;
583
    }
584
585
    /**
586
     * 获取
587
     * @param $url
588
     * @return bool|string
589
     */
590
    private function getContents($url)
591
    {
592
        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');
593
        return file_get_contents($url);
594
    }
595
596
    /**
597
     * 判断网址是否确认
598
     * @param $url
599
     * @return string
600
     */
601
    private function judgeUrl($url)
602
    {
603
        if (strpos($url, 'douyin.com') !== false) {
604
            return $url;
605
        }
606
607
        if (strpos($url, 'iesdouyin.com') !== false) {
608
            return $url;
609
        }
610
611
        return '';
612
    }
613
614
    /**
615
     * 正则匹配 mid
616
     * @param $content
617
     * @return mixed
618
     * @throws DtaException
619
     */
620
    private function getItemId($content)
621
    {
622
        preg_match('/"(?<=itemId:\s\")\d+"/', $content, $matches);
623
        if (!isset($matches[0])) {
624
            throw new DtaException('视频不存在');
625
        }
626
        preg_match("~\"(.*?)\"~", $matches[0], $matches2);
627
        if (!isset($matches2[1])) {
628
            throw new DtaException('视频不存在');
629
        }
630
        return $matches2[1];
631
    }
632
633
    /**
634
     * 正则匹配 dytk
635
     * @param $content
636
     * @return mixed
637
     * @throws DtaException
638
     */
639
    private function getDyTk($content)
640
    {
641
        preg_match("~dytk(.*?)}~", $content, $matches);
642
        if (!isset($matches[1])) {
643
            throw new DtaException('视频不存在');
644
        }
645
        $Dytk = $matches[1];
646
        preg_match("~\"(.*?)\"~", $Dytk, $matches2);
647
        if (!isset($matches2[1])) {
648
            throw new DtaException('视频不存在');
649
        }
650
        return $matches2[1];
651
    }
652
653
    /**
654
     * 返回Array
655
     * @return array|mixed
656
     */
657
    public function toArray()
658
    {
659
        if (empty($this->backtrack)) {
660
            return [];
661
        }
662
        if (is_array($this->backtrack)) {
663
            return $this->backtrack;
664
        }
665
        return json_decode($this->backtrack, true);
666
    }
667
668
    /**
669
     * 返回Object
670
     * @return object|string|mixed
671
     */
672
    public function toObject()
673
    {
674
        if (empty($this->backtrack)) {
675
            return '';
676
        }
677
        if (is_object($this->backtrack)) {
678
            return $this->backtrack;
679
        }
680
        $obj = new StdClass();
681
        foreach ($this->backtrack as $key => $val) {
682
            $obj->$key = $val;
683
        }
684
        return $obj;
685
    }
686
687
    /**
688
     * 处理作者头像 大到小
689
     * @param $data
690
     * @return string
691
     */
692
    private function cAuthorAvatar($data): string
693
    {
694
        // 1080x1080
695
        return $data['avatar_larger']['url_list'][0] ?? $data['avatar_medium']['url_list'][0] ?? $data['avatar_thumb']['url_list'][0] ?? '';
696
    }
697
698
    /**
699
     * 处理音乐作者头像 大到小
700
     * @param $data
701
     * @return string
702
     */
703
    private function cMusicAvatar($data): string
704
    {
705
        // 1080x1080
706
        return $data['cover_hd']['url_list'][0] ?? $data['cover_medium']['url_list'][0] ?? $data['cover_thumb']['url_list'][0] ?? '';
707
    }
708
709
    /**
710
     * 处理视频封面 大到小
711
     * @param $data
712
     * @return array
713
     */
714
    private function cVideoAvatar($data): array
715
    {
716
        $array = [];
717
        $array['dynamic'] = '';
718
        $array['origin_cover'] = '';
719
        $array['cover'] = '';
720
        // 动态
721
        if (isset($data['dynamic_cover']['url_list'][0])) {
722
            $array['dynamic'] = substr($data['dynamic_cover']['url_list'][0], 0, strpos($data['dynamic_cover']['url_list'][0], '?from='));
723
        }
724
        // width封面
725
        if (isset($data['origin_cover']['url_list'][0])) {
726
            $array['origin_cover'] = substr($data['origin_cover']['url_list'][0], 0, strpos($data['origin_cover']['url_list'][0], '?from='));
727
        }
728
        // height封面
729
        if (isset($data['cover']['url_list'][0])) {
730
            $array['cover'] = substr($data['cover']['url_list'][0], 0, strpos($data['cover']['url_list'][0], '?from='));
731
        }
732
        return $array;
733
    }
734
735
    /**
736
     * 返回302网址
737
     * @param $url
738
     * @param $type
739
     * @return mixed
740
     */
741
    private function cVideoPlayUrl($url, $type)
742
    {
743
        if ($type === 'play') {
744
            $headers = get_headers(str_replace("/playwm/", "/play/", $url), TRUE);
745
        } else {
746
            $headers = get_headers($url, TRUE);
747
        }
748
        //输出跳转到的网址
749
        return $headers['location'];
750
    }
751
}
752