PHP YouTube视频抓取工具:提取嵌套数组中的下载链接信息
提取带格式和大小的YouTube下载链接
嘿,我来帮你搞定这个问题!从你给出的var_dump结果来看,当前getDownloadLinks方法返回的数组只包含了下载URL,缺少视频格式和文件大小信息。我们可以通过以下步骤来补充这些信息并提取你需要的内容:
解决方案代码示例
<?php include 'src/YouTubeDownloader.php'; $yt = new YouTubeDownloader(); $links = $yt->getDownloadLinks("https://www.youtube.com/watch?v=QxsmWxxouIM"); // 映射YouTube的itag值到对应的视频格式和分辨率(可根据需求扩展) $itagFormatMap = [ 18 => ['format' => 'MP4', 'resolution' => '360p'], 22 => ['format' => 'MP4', 'resolution' => '720p'], 36 => ['format' => '3GP', 'resolution' => '240p'], 137 => ['format' => 'MP4', 'resolution' => '1080p'], 135 => ['format' => 'MP4', 'resolution' => '480p'], // 更多itag对应关系可参考公开的YouTube itag标准 ]; $processedLinks = []; foreach ($links as $itag => $linkDetails) { // 获取文件大小:通过HEAD请求读取响应头的Content-Length $fileSize = '未知'; if (!empty($linkDetails['url'])) { $responseHeaders = get_headers($linkDetails['url'], true); if (isset($responseHeaders['Content-Length'])) { // 转换为易读的MB单位 $fileSize = round($responseHeaders['Content-Length'] / (1024 * 1024), 2) . ' MB'; } } // 整理最终需要的信息 $processedLinks[] = [ '视频格式' => $itagFormatMap[$itag]['format'] ?? '未知格式', '分辨率' => $itagFormatMap[$itag]['resolution'] ?? '未知分辨率', '文件大小' => $fileSize, '下载链接' => $linkDetails['url'] ?? '' ]; } // 输出处理后的结果 print_r($processedLinks); ?>
代码说明
- itag映射表:YouTube用
itag值来区分不同的视频格式和分辨率,我们预先定义了常见的对应关系,你可以根据需要添加更多条目。 - 获取文件大小:通过
get_headers发送HEAD请求,从响应头的Content-Length字段获取文件字节数,再转换为易读的MB单位。 - 整理结果:遍历原始链接数组,把格式、分辨率、大小和下载URL整合到新数组中,方便后续使用。
如果你的YouTubeDownloader类版本本身支持返回格式和大小信息(比如部分封装好的库会直接包含这些字段),你可以直接从$linkDetails中提取,比如$linkDetails['format']或$linkDetails['size'],这样就省去了手动映射和请求头获取的步骤。
内容的提问来源于stack exchange,提问作者Chetana




