PHP Dersleri

PHP ile Youtube Video İndir

Youtube, kullanıcıların çevrimiçi bir şekilde video yükleyerek görüntülenmesini ve paylaşılmasını sağlayan en popüler sosyal medya sitesidir. Bir çok yeniliklere giden youtube, çevrimdışı özelliğini yani videoların indirilme özelliğini kendi içinde bir türlü sunmadı. Bir youtube videosunu indirmek için eklenti yada yardımcı siteler kullanmak gerekiyordu.

Youtube’un sunmadığı video indirme işlemini, PHP Programlama dilini kullanarak nasıl gerçekleştirebileceğimizden bahsedeceğim. Youtube üzerinden bir videoyu indirmek için bir kütüphane kullanacağız. Bu kütüphane ile belirlemiş olduğumuz youtube videosunu rahatlıkla indirebileceğiz.

Youtube Video İndirme Kütüphanesi

Youtube videolarını indirmek için YouTubeDownloader.class sınıfını kullanacağız. Bu sınıfta kullanılacak olan metodlar aşağıdaki gibidir.

  • setUrl() – Youtube video URL’i bu metoda girilir.
  • getVideoInfo() – file_get_contents() Video bilgileri alınmaktadır.
  • extractVideoId() – YouTube videosunun URL’sinden ID değerini alabilirsiniz.
  • getDownloader() – İndirmek için gerekli bilgiler alınır.
  • getVideoDownloadLink() – Video bilgisini içeren video indirme URL’sini alın (kalite, başlık, mime ve format).
  • hasVideo () – YouTube video URL’sini doğrular.

Kütüphane konusuna biraz değindikten sonra ilk olarak aşağıda yer alan kodları YouTubeDownloader.class.php olarak kayıt edelim.

<?php 
class YouTubeDownloader { 
    private $video_id; 
    private $video_title; 
    private $video_url; 
    private $link_pattern; 
    public function __construct(){ 
        $this->link_pattern = "/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed)\/))([^\?&\"'>]+)/"; 
    } 
    public function setUrl($url){ 
        $this->video_url = $url; 
    } 
    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"); 
    }
    private function extractVideoId($video_url){ 
        $parsed_url = parse_url($video_url); 
        if($parsed_url["path"] == "youtube.com/watch"){ 
            $this->video_url = "https://www.".$video_url; 
        }elseif($parsed_url["path"] == "www.youtube.com/watch"){ 
            $this->video_url = "https://".$video_url; 
        }
        if(isset($parsed_url["query"])){ 
            $query_string = $parsed_url["query"];
            parse_str($query_string, $query_arr); 
            if(isset($query_arr["v"])){ 
                return $query_arr["v"]; 
            } 
        }    
    }
    public function getDownloader($url){ 
        if(preg_match($this->link_pattern, $url)){ 
            return $this; 
        } 
        return false; 
    }
    public function getVideoDownloadLink(){ 
        parse_str($this->getVideoInfo(), $data); 
        $videoData = json_decode($data['player_response'], true); 
        $videoDetails = $videoData['videoDetails']; 
        $streamingData = $videoData['streamingData']; 
        $streamingDataFormats = $streamingData['formats']; 
        $this->video_title = $videoDetails["title"]; 
        $final_stream_map_arr = array(); 
        foreach($streamingDataFormats as $stream){ 
            $stream_data = $stream; 
            $stream_data["title"] = $this->video_title; 
            $stream_data["mime"] = $stream_data["mimeType"]; 
            $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["mimeType"]); 
            $final_stream_map_arr [] = $stream_data;          
        } 
        return $final_stream_map_arr; 
    }
    public function hasVideo(){ 
        $valid = true; 
        parse_str($this->getVideoInfo(), $data); 
        if($data["status"] == "fail"){ 
            $valid = false; 
        }  
        return $valid; 
    }
}

Yukarıda yer alan kodları kayıt ettikten sonra indirme işleminin yapılacağı dosyamızı oluşturalım. İndirme işlemi için bu kütüphaneyi kullanacağız.

Youtube Video İndir

Kütüphaneyi kullanarak Youtube videosunu indirmek için gerekli parametreleri doldurmak yeterli olacaktır. Parametreleri doldurduktan sonra youtube videosu başarılı bir şekilde indirilecektir. İndirme işlemleri aşağıdaki adımlarla gerçekleştirilir.

  • Kütüphaneyi (YouTubeDownloader) sayfaya dahil ediniz.
  • getDownloader() Fonksiyonu kullanarak indirme nesnesini alınız.
  • setUrl() İşlevi kullanarak YouTube URL’sini ayarlayınız.
  • hasVideo() İşlevi kullanarak YouTube videosunun URL’sini doğrulayınız.
  • getVideoDownloadLink() Fonksiyonu kullanarak video indirme bağlantısını ve video bilgilerini alınız.
  • İndirme sayfasını çalıştırıp Youtube videosunun indirilmesini bekleyiniz.
include_once "YouTubeDownloader.class.php";
$handler    = new YouTubeDownloader(); 
$youtubeURL = 'https://www.youtube.com/watch?v=sqrLo-fjxhA'; 
if(!empty($youtubeURL) && !filter_var($youtubeURL, FILTER_VALIDATE_URL) === false){ 
    $downloader = $handler->getDownloader($youtubeURL); 
    $downloader->setUrl($youtubeURL); 
    if($downloader->hasVideo()){ 
        $videoDownloadLink = $downloader->getVideoDownloadLink(); 
        $videoTitle = $videoDownloadLink[0]['title']; 
        $videoQuality = $videoDownloadLink[0]['qualityLabel']; 
        $videoFormat = $videoDownloadLink[0]['format']; 
        $videoFileName = strtolower(str_replace(' ', '_', $videoTitle)).'.'.$videoFormat; 
        $downloadURL = $videoDownloadLink[0]['url']; 
        $fileName = preg_replace('/[^A-Za-z0-9.\_\-]/', '', basename($videoFileName)); 
        if(!empty($downloadURL)){ 
            header("Cache-Control: public"); 
            header("Content-Description: File Transfer"); 
            header("Content-Disposition: attachment; filename=$fileName"); 
            header("Content-Type: application/zip"); 
            header("Content-Transfer-Encoding: binary"); 
            readfile($downloadURL); 
        } 
    }else{ 
        echo "Video bulunamadı. URL'i kontrol ediniz."; 
    } 
}else{ 
    echo "Video bulunamadı. URL'i kontrol ediniz."; 
}

Yukarıdaki kodları index.php olarak kayıt edip çalıştırınız. Çalıştırma işlemiyle birlikte youtube videosunun indirildiğini görebilirsiniz.

Nasıl Buldunuz?

Komik
0
Uyyy
0
Sevdiim
0
Düşündürücü
0
Çalak
0

Leave a reply

E-posta hesabınız yayımlanmayacak.

More in:PHP Dersleri