I'm from bangladesh. i have an youtube downloader php script but its not work some videos to download. when i click download button, its download videoplayback and showing me text Failed - Forbidden.
I can't download same as below videos. Most of video not downloaded.
Download website is: http://mcv12.masudtools.xyz/
Such as this video:
Also i have error log:
[13-Jul-2017 12:51:44 UTC] PHP Notice: Undefined index: adaptive_fmts in /home/masudtoo/public_html/mcv12/VideoYoutubeProvider.php on line 126 [13-Jul-2017 12:51:45 UTC] PHP Notice: Undefined index: type in /home/masudtoo/public_html/mcv12/VideoYoutubeProvider.php on line 85 [13-Jul-2017 12:51:45 UTC] PHP Notice: Undefined offset: 1 in /home/masudtoo/public_html/mcv12/VideoYoutubeProvider.php on line 88
126 line is:
$adaptive_fmts = $this->fullInfo['adaptive_fmts'];
85 line is:
$type = explode(';', $item['type']);
88 line is:
$ext = $baseType[1];
full VideoYoutubeProvider.php code:
class VideoYoutubeProvider extends VideoAbstractProvider
{
public $fullInfo = null;
/**
* Get provider name
* @return string
*/
public function getProviderName()
{
return "Youtube video";
}
/**
* Checks video url for belonging to this provider
*
* @param string $url video url for check
* @return boolean returning true if service available this video url
*/
static public function checkUrl($url)
{
return !!preg_match("/^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/i", $url);
}
/**
* Return base video information
*
* @return BaseVideoInfo
* @throws VideoDownloaderBaseInfoException
*/
public function getBaseInfo()
{
$fullInfo = $this->getFullInfo();
$baseInfo = new BaseVideoInfo();
$baseInfo->name = $fullInfo['title'];
$videoId = $fullInfo['video_id'];
$preview = new VideoPreviewUrl();
$preview->width = 1280;
$preview->height = 720;
$preview->name = 'maxresdefault';
$preview->url = "https://img.youtube.com/vi/$videoId/hqdefault.jpg";
$baseInfo->previewUrls = [$preview];
$baseInfo->mainPreviewUrl = $preview;
$html = $fullInfo['html'];
if (preg_match('/<p id="eow-description"[^>]+>(.+)<\/p>/', $html, $matches)) {
$baseInfo->description = strip_tags(str_replace('<br />', "\n", $matches[1]));
}
return $baseInfo;
}
/**
* Return array of download information for video
*
* @return VideoDownloadInfo[]
* @throws VideoDownloaderDownloadException
*/
public function getDownloadsInfo()
{
$fullInfo = $this->getFullInfo();
$fmts = $fullInfo['url_encoded_fmt_stream_map'];
$downloadsInfo = [];
$title = $fullInfo['title'];
foreach ($fmts AS $item) {
$url = $item['url'] . '&title=' . urlencode($title);
$headers = RequestHelper::getResponseHeaders($url);
$downloadInfo = new VideoDownloadInfo();
$downloadInfo->fileSize = (int)$headers['Content-Length'];
$downloadInfo->url = $url;
$downloadInfo->fileType = $headers['Content-Type'];
$ext = explode('/', $downloadInfo->fileType);
$ext = $ext[1];
$downloadInfo->name = $title . '.' . $ext;
$downloadsInfo[] = $downloadInfo;
}
$fmts = $fullInfo['adaptive_fmts'];
foreach ($fmts AS $item) {
$type = explode(';', $item['type']);
$type = $type[0];
$baseType = explode('/', $type);
$ext = $baseType[1];
$baseType = $baseType[0];
if ($baseType === 'audio') {
$downloadInfo = new VideoDownloadInfo();
$downloadInfo->fileSize = (int)$item['clen'];
$downloadInfo->name = $title . '.' . $ext;
$url = $item['url'] . '&title=' . urlencode($title);
$downloadInfo->url = $url;
$downloadInfo->fileType = $type;
$downloadsInfo[] = $downloadInfo;
break;
}
}
return $downloadsInfo;
}
private function getFullInfo()
{
if (is_null($this->fullInfo)) {
preg_match("/^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/i", $this->url, $matches);
$videoId = $matches[7];
$fullInfoSource = file_get_contents("http://www.youtube.com/get_video_info?&video_id=$videoId&asv=3&el=detailpage&hl=en_US");
$fullInfoSource = explode('&', $fullInfoSource);
$this->fullInfo = [];
foreach ($fullInfoSource AS $item) {
$item = explode('=', $item);
$this->fullInfo[$item[0]] = urldecode($item[1]);
}
$url_encoded_fmt_stream_map = $this->fullInfo['url_encoded_fmt_stream_map'];
$url_encoded_fmt_stream_map = explode(',', $url_encoded_fmt_stream_map);
$this->fullInfo['url_encoded_fmt_stream_map'] = [];
foreach ($url_encoded_fmt_stream_map AS $downloadItem) {
$downloadInfo = [];
parse_str($downloadItem, $downloadInfo);
$this->fullInfo['url_encoded_fmt_stream_map'][] = $downloadInfo;
}
$adaptive_fmts = $this->fullInfo['adaptive_fmts'];
$adaptive_fmts = explode(',', $adaptive_fmts);
$this->fullInfo['adaptive_fmts'] = [];
foreach ($adaptive_fmts AS $item) {
$itemInfo = [];
parse_str($item, $itemInfo);
$this->fullInfo['adaptive_fmts'][] = $itemInfo;
}
$this->fullInfo['html'] = file_get_contents("https://www.youtube.com/watch?v=$videoId");
$this->fullInfo['video_id'] = $videoId;
}
return $this->fullInfo;
}
}
Please help me to solve it. thanks