การหาไฟล์ 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