用一行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

标签

David Farrell

David是一位专业程序员,他经常推文博客关于代码和编程艺术的见解。

浏览他们的文章

反馈

这篇文章有什么问题吗?请通过在GitHub上打开一个issue或pull request来帮助我们。