【发布时间】:2020-06-21 17:46:32
【问题描述】:
我正在尝试使用 php 制作一个 youtube 视频下载器,它工作正常,但如果 youtube 视频 id 有一个类似 - 或 _ 的字符,它会显示一个错误未定义的索引 url,似乎 php 没有看到这个字符 e ,g 如果 youtube 视频 id 是 N65RvNkZFGE 它会工作,但如果它像 wXhTHyIgQ_U 它不会工作因为下划线的原因这里是代码:
// Check whether the url is valid
if(!empty($youtubeURL) && !filter_var($youtubeURL, FILTER_VALIDATE_URL) === false){
// Get the downloader object
$downloader = $handler->getDownloader($youtubeURL);
// Set the url
$downloader->setUrl($youtubeURL);
// Validate the youtube video url
if($downloader->hasVideo()){
// Get the video download link info
$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));
包含 setUrl() 函数的 YouTubeDownloader.class.php 文件,获取 extractVideoId() 的代码如下:
public function setUrl($url){
$this->video_url = $url;
}
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;
}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 the string separated by '&' to array
parse_str($query_string, $query_arr);
if(isset($query_arr["v"])){
return $query_arr["v"];
}
}
}
【问题讨论】:
-
请提供MCVE您的确切问题
-
当您说“不起作用”时,您是什么意思?你得到什么错误或输出?
-
我需要脚本接受所有格式的 id,包括那些包含“_”或“-”的格式
-
如果 youtube 视频 id 包含“_”或“-”,它不接受该 id,但如果视频 id 不包含任何特殊字符,例如 N65RvNkZFGE,则脚本可以正常工作并且视频被下载
-
它会给你一个错误的网址吗?不要说不接受,请详细解释失败的样子。也许是一个例子?