You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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);
?>

代码说明

  1. itag映射表:YouTube用itag值来区分不同的视频格式和分辨率,我们预先定义了常见的对应关系,你可以根据需要添加更多条目。
  2. 获取文件大小:通过get_headers发送HEAD请求,从响应头的Content-Length字段获取文件字节数,再转换为易读的MB单位。
  3. 整理结果:遍历原始链接数组,把格式、分辨率、大小和下载URL整合到新数组中,方便后续使用。

如果你的YouTubeDownloader类版本本身支持返回格式和大小信息(比如部分封装好的库会直接包含这些字段),你可以直接从$linkDetails中提取,比如$linkDetails['format']$linkDetails['size'],这样就省去了手动映射和请求头获取的步骤。

内容的提问来源于stack exchange,提问作者Chetana

火山引擎 最新活动