# NAME
WWW::YouTube::Download - Very simple YouTube video download interface
# SYNOPSIS
use WWW::YouTube::Download;
my $client = WWW::YouTube::Download->new;
$client->download($video_id);
my $video_url = $client->get_video_url($video_id);
my $title = $client->get_title($video_id); # maybe encoded utf8 string.
my $fmt = $client->get_fmt($video_id); # maybe highest quality.
my $suffix = $client->get_suffix($video_id); # maybe highest quality file suffix
# DESCRIPTION
WWW::YouTube::Download is a library to download videos from YouTube. It relies entirely on
scraping a video's webpage and does not use YT's /get\_video\_info URL space.
# METHODS
- **new()**
$client = WWW::YouTube::Download->new;
Creates a WWW::YouTube::Download instance.
- **download($video\_id \[, \\%args\])**
$client->download($video_id);
$client->download($video_id, {
fmt => 37,
filename => 'sample.mp4', # save file name
});
$client->download($video_id, {
filename => '{title}.{suffix}', # maybe `video_title.mp4`
});
$client->download($video_id, {
cb => \&callback,
});
Download the video file.
The first parameter is passed to YouTube video url.
Allowed arguments:
- `cb`
Set a callback subroutine, SEE [LWP::UserAgent](https://metacpan.org/pod/LWP::UserAgent) ':content\_cb'
for details.
- `filename`
Set the filename, possibly using placeholders to be filled with
information gathered about the video.
`filename` supported format placeholders:
{video_id}
{title}
{user}
{fmt}
{suffix}
{resolution}
Output filename is set to `{video_id}.{suffix}` by default.
- `file_name`
**DEPRECATED** alternative for `filename`.
- `fmt`
set the format to download. Defaults to the best video quality
(inferred by the available resolutions).
- **playback\_url($video\_id, \[, \\%args\])**
$client->playback_url($video_id);
$client->playback_url($video_id, { fmt => 37 });
Return playback URL of the video. This is direct link to the movie file.
Function supports only "fmt" option.
- **prepare\_download($video\_id)**
Gather data about the video. A hash reference is returned, with the following
keys:
- `fmt`
the default, suggested format. It is inferred by selecting the
alternative with the highest resolution.
- `fmt_list`
the list of available formats, as an array reference.
- `suffix`
the filename extension associated to the default format (see `fmt`
above).
- `title`
the title of the video
- `user`
the YouTube user owning the video
- `video_id`
the video identifier
- `video_url`
the URL of the video associated to the default format (see `fmt`
above).
- `video_url_map`
an hash reference containing details about all available formats.
The `video_url_map` has one key/value pair for each available format,
where the key is the format identifier (can be used as `fmt` parameter
for ["download"](#download), for example) and the value is a hash reference with
the following data:
- `fmt`
the format specifier, that can be passed to ["download"](#download)
- `resolution`
the resolution as _width_x_height_
- `suffix`
the suffix, providing a hint about the video format (e.g. webm, flv, ...)
- `url`
the URL where the video can be found
- **ua(\[$ua\])**
$self->ua->agent();
$self->ua($LWP_LIKE_OBJECT);
Sets and gets LWP::UserAgent object.
- **video\_id($url)**
Parses given URL and returns video ID.
- **playlist\_id($url)**
Parses given URL and returns playlist ID.
- **user\_id($url)**
Parses given URL and returns YouTube username.
- **get\_video\_url($video\_id)**
- **get\_title($video\_id)**
- **get\_user($video\_id)**
- **get\_fmt($video\_id)**
- **get\_fmt\_list($video\_id)**
- **get\_suffix($video\_id)**
# AUTHOR
xaicron <xaicron {@} cpan.org>
# CONTRIBUTORS
yusukebe
# BUG REPORTING
Plese use github issues: [https://github.com/xaicron/p5-www-youtube-download/issues](https://github.com/xaicron/p5-www-youtube-download/issues).
# SEE ALSO
[WWW::YouTube::Info](https://metacpan.org/pod/WWW::YouTube::Info) and [WWW::YouTube::Info::Simple](https://metacpan.org/pod/WWW::YouTube::Info::Simple).
[WWW::NicoVideo::Download](https://metacpan.org/pod/WWW::NicoVideo::Download)
[http://rg3.github.io/youtube-dl/](http://rg3.github.io/youtube-dl/)
# LICENSE
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.