用一行Perl下载YouTube视频
当您拥有合适的模块时,使用Perl下载YouTube视频非常简单。这个模块就是WWW::YouTube::Download。下面是如何使用一行Perl代码下载视频的示例。
*编辑 - 这篇文章于2014年1月27日更新,以描述随WWW::YouTube::Download一起提供的“youtube-download”应用程序。*
警告
您只能下载您有权限下载的视频。以下只是一个示例,说明您有权限时如何进行操作。
要求
您需要安装WWW::YouTube::Download。CPAN测试者结果显示,最新版本(写作时为0.56)在所有主要平台上都能运行。
您可以通过命令行使用CPAN安装模块
$ cpan WWW:YouTube::Download
使用youtube-download应用程序
当您安装WWW::YouTube::Download时,它将附带一个命令行应用程序,名为“youtube-download”。使用它非常简单。只需打开命令行,并输入程序名,后跟要下载的视频的URL或视频ID。例如
$ youtube-download http://www.youtube.com/watch?v=ju1IMxGSuNE
*注意 - 如上所示使用应用程序是使用该工具的最简单方法 - 然而,在写作本文时,我并不知道这个命令行工具。继续阅读以获取单行示例。*
使用一行Perl下载视频
在命令行中,输入或粘贴以下命令,将$id替换为您想要下载的视频ID
$ perl -MWWW::YouTube::Download -e 'WWW::YouTube::Download->new->download(q/$id/)'
解释单行代码
这个单行代码很简单。首先,我们使用“-M”开关加载WWW::YouTube::Download。然后,“-e”开关告诉Perl执行引号之间的代码。然后,我们使用new初始化一个WWW::YouTube::Download对象,并立即调用新对象的download方法。我们使用引号构造“q//”来引号字符串,而不使用引号,这使得单行代码更具跨平台兼容性。
在Windows上
在Windows上,您需要将引号替换为双引号(“)。
如何获取视频ID
视频ID是您想要下载的视频URL中“v”的字母数字代码值。例如,对于以下URL
http://www.youtube.com/watch?v=ju1IMxGSuNE
“ju1IMxGSuNE”是视频ID,因为如果您查看URL中的问号之后,v=ju1IMxGSuNE,这意味着“v的值等于ju1IMxGSuNE”。如果您有URL但无法确定视频ID,WWW::YouTube::Download提供了一个video_id方法。这个单行代码将打印出视频ID,只需将$url替换为实际的YouTube URL即可。
$ perl -MWWW::YouTube::Download -E 'say WWW::YouTube::Download->new->video_id(q{$url})'
一个用于下载YouTube视频的Perl脚本
我们可以将单行代码中使用的概念扩展到一个完整的Perl脚本,名为“download.pl”
#!/usr/bin/env perl
use strict;
use warnings;
use WWW::YouTube::Download;
if (@ARGV) {
my $tube = WWW::YouTube::Download->new;
my $video_id = $tube->video_id($ARGV[0]);
$tube->download($video_id, { filename => '{title}{suffix}' });
}
该脚本接受YouTube URL作为参数。它获取URL的视频ID,然后将视频下载到当前目录。作为额外的奖励,该脚本将使用视频标题保存文件,而不是默认的视频ID。您可以在命令行中运行该脚本,传递要下载的YouTube视频的URL。例如
$ ./download.pl http://www.youtube.com/watch?v=ju1IMxGSuNE
您可能需要使用chmod设置脚本权限为可执行
$ chmod 755 download.pl
结论
WWW::YouTube::Download易于使用、速度快且无需额外操作。该模块的文档易于遵循。感谢Yuji Shimada编写它!
WWW::YouTube::Download的功能不仅限于这里所示 - 一个有趣的功能是您可以指定视频格式(如果提供多个)。默认情况下,该模块下载可用的最高质量视频。
这篇文章最初发布在PerlTricks.com。
标签
反馈
这篇文章有什么问题吗?请通过在GitHub上打开一个issue或pull request来帮助我们。