Obtener videos de Tik Tok sin marca de agua

Buenas tardes a todos los amantes del habr. En este artículo, quiero compartir contigo cómo puedes obtener un video de Tik Tok sin una marca de agua usando un lenguaje como PHP.



Actualmente, Tik Tok está ganando popularidad y no sería decente no escribir un pequeño artículo al respecto, y así, menos palabras, más acción.



Creemos una clase llamada TikTok, contendrá tres métodos y una propiedad.



Métodos:



  • cUrl (solicitud de curl)
  • redirectUrl (obtener el enlace después de la redirección)
  • getUrl (obtener enlace de video)


Propiedades:



  • public $ url;


Creemos un constructor para pasar la dirección URL.



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


El cUrl. Enviamos una solicitud al servidor y recibimos una respuesta.



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


Método 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;
}


Método 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);
}


Creemos un objeto basado en la clase y le pasemos un enlace.



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


Todo está listo.



Ejemplos:





Código completo



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('  !');

		//         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);
	}

	/**
	 *  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;
	}
}



All Articles