Русский
Русский
English
Статистика
Реклама

Из песочницы Получение видео из Tik Tok без водяного знака

Добрый день, всем любителям habr. В этой статье я хочу поделиться с Вами как можно получить видео с Tik Tok без водяного знака, с помощью такого языка как PHP.

В настоящее время Tik Tok набирает популярность и было бы не прилично не написать про него маленькую статейку, и так, меньше слов, больше дела.

Создадим класс под названием TikTok, он будет содержать три метода и одно свойство.

Методы:

  • cUrl (curl запрос)
  • redirectUrl (получить ссылку после redirect)
  • getUrl (получить ссылку на видео)

Свойства:

  • public $url;

Создадим конструктор для передачи url адреса.

public function __construct (string $url) {    $this->url = $url;}

Метод cUrl. Отправляем запрос на сервер и получаем ответ.

private function cUrl (string $url) :? string {    $user_agent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML,                    like  Gecko) Chrome/79.0.3945.130 Safari/537.36';    $curl            = curl_init($url);    curl_setopt_array($curl, [CURLOPT_URL            => $url,CURLOPT_RETURNTRANSFER => TRUE,CURLOPT_FOLLOWLOCATION => TRUE,CURLOPT_USERAGENT      => $user_agent,CURLOPT_CONNECTTIMEOUT => 5,CURLOPT_TIMEOUT        => 10,    ]);    $response = curl_exec($curl);    if ($response === FALSE) {curl_close($curl);return NULL;    }    $httpCode = (int)curl_getinfo($curl, CURLINFO_HTTP_CODE);    curl_close($curl);    if ($httpCode !== 200)       return NULL;    return $response;}

Метод redirectUrl

private function redirectUrl (string $url) :? string {    $ch = curl_init();    curl_setopt($ch, CURLOPT_URL, $url);    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);    $headers = get_headers($url, 1);    return $headers['Location'] ?? NULL;}

Метод getUrl.
public function getUrl () :? string {    // Получаем код страницы.    $responseHtml = $this->cUrl($this->url);    // Находим ссылку на видео.    if (!preg_match('/contentUrl\\":\\"(.*?)\\",\\"embedUrl/ui', $responseHtml, $mInterUrl))throw new \Exception('Ссылка не найдена!');    // Отправляем запрос и в ответе получаем видео в виде bytecode    if (!$respByteVideo = $this->cUrl($mInterUrl[1]))        throw new \Exception('Запрос не обработался!');    // Чтобы регулярное выражение начало искать, нужно перевести в формат utf-8.    $strByteVideo = mb_convert_encoding($respByteVideo, 'UTF-8', 'auto');    // Ищем специальный id видео, чтобы на его основе построить запрос.    if (!preg_match('/vid:(.*?)%/sui', $strByteVideo, $mVideoId))throw new \Exception('id video не было найдено!');    // Уберём лишние символы.    $url = str_replace("\0", '', $mVideoId[1]);    // Строим ссылку для получения видео без водяного знака.    $url = "https://api.tiktokv.com/aweme/v1/playwm/?video_id=$url";    // Так как эта redirect на другую ссылку к видео, то пытаемся получить конечную ссылку после redirect    return $this->redirectUrl($url);}

Создадим объект на основе класса, передадим в него ссылку.

$TikTok = new TikTok('https://www.tiktok.com/@sonyakisa8/video/6828487583694163205?lang=ru');echo $TikTok->getUrl();

Все готово.

Примеры:


Весь код целиком

class TikTok {/** * @var string */public $url;public function __construct (string $url) {$this->url = $url;}/** * @return null|string * @throws Exception */public function getUrl () :? string {// Получаем код страницы$responseHtml = $this->cUrl($this->url);// Находим ссылку на видеоif (!preg_match('/contentUrl\\":\\"(.*?)\\",\\"embedUrl/ui', $responseHtml, $mInterUrl))throw new \Exception('Ссылка не найдена!');// Отправляем запрос и в ответе получаем видео ввиде bytecodeif (!$respByteVideo = $this->cUrl($mInterUrl[1]))throw new \Exception('Запрос не обработался!');// Чтобы регулярное выражение начало искать, нужно перевести в формат utf-8$strByteVideo = mb_convert_encoding($respByteVideo, 'UTF-8', 'auto');// Ищем специальный id видео, чтобы на его основе построить запросif (!preg_match('/vid:(.*?)%/sui', $strByteVideo, $mVideoId))throw new \Exception('id video не было найдено!');// Уберём лишние символы$url = str_replace("\0", '', $mVideoId[1]);// Строим ссылку на получения видео без водяного знака$url = "https://api.tiktokv.com/aweme/v1/playwm/?video_id=$url";// Так как эта redirect на другую ссылку к видео, то пытаемся получить ее после redirectreturn $this->redirectUrl($url);}/** * Получение url адреса после redirect * * @param string $url * @return null|string */private function redirectUrl (string $url) :? string {$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);$headers = get_headers($url, 1);return $headers['Location'] ?? NULL;}/** * @param string $url * @return null|string */private function cUrl (string $url) :? string {$user_agent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36';$curl       = curl_init($url);curl_setopt_array($curl, [CURLOPT_URL            => $url,CURLOPT_RETURNTRANSFER => TRUE,CURLOPT_FOLLOWLOCATION => TRUE,CURLOPT_USERAGENT      => $user_agent,CURLOPT_CONNECTTIMEOUT => 5,CURLOPT_TIMEOUT        => 10,]);$response = curl_exec($curl);if ($response === FALSE) {curl_close($curl);return NULL;}$httpCode = (int)curl_getinfo($curl, CURLINFO_HTTP_CODE);curl_close($curl);if ($httpCode !== 200)return NULL;return $response;}}
Источник: habr.com
К списку статей
Опубликовано: 20.07.2020 20:10:45
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Php

Tik-tok

Watermark

Категории

Последние комментарии

© 2006-2021, personeltest.ru