วิธีหาไฟล์ MP4 กับ Image ใน Youtube

youtube

การหาไฟล์ Image
การหาไฟล์รูปของ Youtube  นั่นง่ายมาก  เนื่องจาก Youtube จะมีการเก็บไฟล์ที่เป็นมาตรฐานมาก  เพียงแค่นำ ID ของ youtube ออกมาวางในรูปแบบนี้ ก็สามารถหาตำแหน่งภาพได้แล้ว

"default" => "https://i1.ytimg.com/vi/".$IDClipYoutube."/default.jpg"
"medium" => "https://i1.ytimg.com/vi/".$IDClipYoutube."/mqdefault.jpg"
"high" => "https://i1.ytimg.com/vi/".$IDClipYoutube."/hqdefault.jpg"
"standard" => "https://i1.ytimg.com/vi/".$IDClipYoutube."/sddefault.jpg"

ยกตัวอย่างเช่น  https://www.youtube.com/watch?v=brUyoeiEha4  หาต้องการรูปขนาดกลางก็สามารถไปเอาได้ที่

https://i1.ytimg.com/vi/brUyoeiEha4/mqdefault.jpg


การหาไฟล์ MP4 การหาตำแหน่งไฟล์ของ MP4 สามารถหาได้จาก  http://youtube.com/get_video_info  เพียงใส่ ID เข้าไป  ก็จะมีข้อมูลออกมาแล้วทำการ parser ออกมา  ในเรื่อง parser  มีหลายวิธีก็แล้วแต่จะเลือกนะครับ  ของผมเป็นแบบนี้ ขั้นแรกทำการนำ ID ออกมาจาก URL  สามารถใช้คำสั่งได้จากชุดนี้

$PathURL = $_REQUEST['URL'];
if (preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $PathURL, $match)) {
      $IDClipYoutube = $match[1];
}

เมื่อได้ ID ออกมาแล้วก็ทำส่ง ID เข้าไปใน Get info เพื่อนำข้อมูลมาเพื่อหาที่อยู่ของ MP4

$content = file_get_contents("http://youtube.com/get_video_info?video_id=".$IDClipYoutube);
parse_str($content, $ytarr);
$yarr=explode(",",$ytarr["url_encoded_fmt_stream_map"]);
$arrayurl=array();
for($i=0; $i<count($yarr);$i++){
 if((strpos($yarr[$i],"mp4") !== false)&&(strpos($yarr[$i],"quality=medium") !==false)){
 parse_str($yarr[$i],$starray);
      array_push($arrayurl,$starray["url"]);
 }
}
return $arrayurl[0];

* ปล. แต่เนื่องจาก ในบาง Clip ของ Youtube มีการ Set ค่าเป็น Private  หรือดูได้เฉพาะบางเวปในส่วน get_video_info จะไม่สามารถใช้งานได้  หากต้องการดูดไฟล์นั่นจริงๆ จำเป็นต้องใช้ PHP Command line  ผมแนะนำให้ใช้  youtube dl  แต่ก็ระวังเรื่อง ลิขสิทธิ์ด้วยนะครับ  ขอให้สนุกกับการดูไฟล์ในเครื่องนะครับ ^^


Full Script

if(isset($_REQUEST['URL'])){
 $PathURL = $_REQUEST['URL'];
 if (preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $PathURL, $match)) {
      $IDClipYoutube = $match[1];
 }
$content = file_get_contents("http://youtube.com/get_video_info?video_id=".$IDClipYoutube);
parse_str($content, $ytarr);
$yarr=explode(",",$ytarr["url_encoded_fmt_stream_map"]);
$arrayurl=array();
for($i=0; $i<count($yarr);$i++){ if((strpos($yarr[$i],"mp4") !== false)&&(strpos($yarr[$i],"quality=medium") !==false)){ parse_str($yarr[$i],$starray); array_push($arrayurl,$starray["url"]); } } $array_info["body"]["items"] = Array( "mp4" => $arrayurl[0],
    "image" => Array(
    "default" => "https://i1.ytimg.com/vi/".$IDClipYoutube."/default.jpg",
    "medium" => "https://i1.ytimg.com/vi/".$IDClipYoutube."/mqdefault.jpg",
    "high" => "https://i1.ytimg.com/vi/".$IDClipYoutube."/hqdefault.jpg",
    "standard" => "https://i1.ytimg.com/vi/".$IDClipYoutube."/sddefault.jpg" 
),
    "related" => "getyoutube_related.php?ID=".$IDClipYoutube
);
if(isset($_REQUEST['TYPE'])){
    $TYPE = $_REQUEST['TYPE'];
    if($TYPE == "json"){
        echo json_encode($array_info);
    }
}else{
    if(isset($arrayurl[0])){
        echo $arrayurl[0];
    }else{
        echo "return : ".$content;
   }
}
}else{
   echo "Required parameter: URL";
}

ตัวอย่างไฟล์ : getyoutube