Tôi đã được mã hóa các downloader trong PHP. Bạn có thể sử dụng mã nguồn này cho mục đích của bạn và bạn có thể thêm các lớp mới để tạo ra các tùy chỉnh link downloader. Tôi đã làm một ví dụ để có được các liên kết tải về từ YouTube và Vimeo.
LinkHandler.php
class LinkHandler {
/*
* store the url pattern and corresponding downloader object
* @var array
*/
private $link_array = array();
public function __construct() {
$this->link_array = array("/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed)\/))([^\?&\"'>]+)/" => new YouTubeDownloader(),
"/^(?:http(?:s)?:\/\/)?(?:www\.)?vimeo\.com\/\d{8}/"=>new VimeoDownloader()
);
}
/*
* Get the url pattern
* return array
*/
private function getPattern()
{
return array_keys($this->link_array);
}
/*
* Get the downloader object if pattern matches else return false
* @param string
* return object or bool
*
*/
public function getDownloader($url)
{
for($i = 0; $i < count($this->getPattern()); $i++)
{
$pattern_st = $this->getPattern()[$i];
/*
* check the pattern match with the given video url
*/
if(preg_match($pattern_st, $url))
{
return $this->link_array[$pattern_st];
}
}
return false;
}
}
Downloader.php
abstract class Downloader {
/*
* Video Id for the given url
*/
protected $video_id;
/*
* Video title for the given video
*/
protected $video_title;
/*
* Full URL of the video
*/
protected $video_url;
public function __construct() {
}
/*
* Set the url
* @param string
*/
public function setUrl($url)
{
$this->video_url = $url;
}
/*
* Get the downloadlink for video
* return array
*/
public abstract function getVideoDownloadLink();
}
VimeoDownloader.php
include_once 'Downloader.php';
class VimeoDownloader extends Downloader {
public function __construct() {
parent::__construct();
}
/*
* Get the video information
* return string
*/
private function getVideoInfo() {
return file_get_contents($this->getRequestedUrl());
}
/*
* Get video Id
* @param string
* return string
*/
private function extractVideoId($video_url)
{
$start_position = stripos($video_url, ".com/");
return ltrim(substr($video_url, $start_position), ".com/");
}
/*
* Scrap the url from the page
* return string
*/
private function getRequestedUrl()
{
$data = file_get_contents("https://www.vimeo.com/".$this->extractVideoId($this->video_url));
$data = stristr($data, 'config_url":"');
$start = substr($data, strlen('config_url":"'));
$stop = stripos($start, ',');
$str = substr($start, 0, $stop);
return rtrim(str_replace("\\", "", $str), '"');
}
/*
* Get the video download link
* return array
*/
public function getVideoDownloadLink() {
$decode_to_arr = json_decode($this->getVideoInfo(), true);
$this->video_title = $decode_to_arr["video"]["title"];
$link_array = $decode_to_arr["request"]["files"]["progressive"];
$final_link_arr = array();
//Create array containing the detail of video
for($i = 0; $i < count($link_array); $i++) { $link_array[$i]["title"] = $this->video_title;
$mime = explode("/", $link_array[$i]["mime"]);
$link_array[$i]["format"] = $mime[1];
}
return $link_array;
}
/*
* Validate the given video url
* return bool
*/
public function hasVideo()
{
$valid = true;
$data = @file_get_contents($this->video_url);
if($data === false)
{
$valid = false;
}
return $valid;
}
}
YouTubeDownloader.php
include_once 'Downloader.php';
class YouTubeDownloader extends Downloader {
public function __construc(){
parent::__construct();
}
/*
* Get the video information
* return string
*/
private function getVideoInfo() {
return file_get_contents("https://www.youtube.com/get_video_info?video_id=".$this->extractVideoId($this->video_url)."&cpn=CouQulsSRICzWn5E&eurl&el=adunit");
}
/*
* Get video Id
* @param string
* return string
*/
private function extractVideoId($video_url)
{
//parse the url
$parsed_url = parse_url($video_url);
if($parsed_url["path"] == "youtube.com/watch")
{
$this->video_url = "https://www.".$video_url;
}
else if($parsed_url["path"] == "www.youtube.com/watch")
{
$this->video_url = "https://".$video_url;
}
if(isset($parsed_url["query"]))
{
$query_string = $parsed_url["query"];
//parse the string separated by '&' to array
parse_str($query_string, $query_arr);
if(isset($query_arr["v"]))
{
return $query_arr["v"];
}
}
}
/*
* Get the video download link
* return array
*/
public function getVideoDownloadLink() {
//parse the string separated by '&' to array
parse_str($this->getVideoInfo(), $data);
//set video title
$this->video_title = $data["title"];
//Get the youtube root link that contains video information
$stream_map_arr = $this->getStreamArray();
$final_stream_map_arr = array();
//Create array containing the detail of video
foreach($stream_map_arr as $stream)
{
parse_str($stream, $stream_data);
$stream_data["title"] = $this->video_title;
$stream_data["mime"] = $stream_data["type"];
$mime_type = explode(";", $stream_data["mime"]);
$stream_data["mime"] = $mime_type[0];
$start = stripos($mime_type[0], "/");
$format = ltrim(substr($mime_type[0], $start), "/");
$stream_data["format"] = $format;
unset($stream_data["type"]);
$final_stream_map_arr [] = $stream_data;
}
return $final_stream_map_arr;
}
/*
* Get the youtube root data that contains the video information
* return array
*/
private function getStreamArray()
{
parse_str($this->getVideoInfo(), $data);
$stream_link = $data["url_encoded_fmt_stream_map"];
return explode(",", $stream_link);
}
/*
* Validate the given video url
* return bool
*/
public function hasVideo()
{
$valid = true;
parse_str($this->getVideoInfo(), $data);
if($data["status"] == "fail")
{
$valid = false;
}
return $valid;
}
}
example.php
include_once 'YouTubeDownloader.php';
include_once 'VimeoDownloader.php';
include_once 'LinkHandler.php';
$url = "https://www.youtube.com/watch?v=oeCihv9A3ac";
$handler = new LinkHandler();
$downloader = $handler->getDownloader($url);
$downloader->setUrl($url);
if($downloader->hasVideo())
{
print_r($downloader->getVideoDownloadLink());
}
Dưới đây là ảnh chụp màn hình mà trả về liên kết tải về của youtube video trong định dạng khác nhau và chất lượng.
Bạn có thể sử dụng kết quả này để tải về các video.
Download videos from Youtube for free easily with Tubemate app of Devian Studio. Home: https://devianstudio.net/
Trả lờiXóa