본문 바로가기
컴퓨터일반

Perl YouTube download

by __observer__ 2012. 6. 17.
반응형

글을 시작하기 전에, 본 포스팅에 포함된 코드는 아래 주소의 내용을 참조하였음을 밝힙니다.

 

http://advent.perl.kr/2011/2011-12-09.html

 

유투브에서 동영상을 보다 보면 끊기는 경우가 종종 있어서 다운로드 받아서 안 끊기게 보고 싶다는 생각을 하는데요.

 

위 주소에서 Perl 을 이용하여 유투브에 있는 동영상을 다운로드 하는 방법에 대한 설명이 자세히 나와 있습니다.

 

역시 Perl 은 참 재주 많은 놈이더군요.

 

그런데 위 주소의 코드를 그대로 실행 시키면 다음과 같이 잘 구분이 안 되는 파일명으로 동영상이 다운로드 됩니다.

 

EX) EaEkTHNNL_o.mp4

 

그래서 파일명을 그나마 알아보기 쉽게 저장하도록 코드를 추가 하였습니다.

 

본 코드를 실행하기 위해서는 위 주소에 기재된 바와 같이 CPAN 에서 다음 두 모듈을 install 해야 합니다.

 

WebService::GData::YouTube

WWW::YouTube::Download

 

수정된 코드는 다음과 같구요~ 저는 youtube.pl 이라는 이름으로 저장했습니다.

 

현재 윈도우 7 이므로 Encode 모듈을 추가 했습니다.

 

use 5.010;

use strict;

use warnings;

use WWW::YouTube::Download;

use WebService::GData::YouTube;

use Encode;

 

# 아듀먼트로 검색 값

my ($search, $limit) = (@ARGV);

$limit //= 10;

 

$search = decode('cp949', $search);

 

# 검색 값으로 유투브 검색

my $search_youtube = WebService::GData::YouTube->new;

 

# 쿼리 값 설정

$search_youtube->query()->q($search)->limit($limit, 0);

 

# 검색

my $results = $search_youtube->search_video();

 

# 다운로드

my $client = WWW::YouTube::Download->new;

foreach my $ret (@$results) {

    my $title = $client->get_title($ret->video_id);

    my $suffix = $client->get_suffix($ret->video_id);

 

    $title= encode( 'cp949', decode('UTF-8', $title) );

    my $newFilename = $title . '.' . $suffix;

 

    say "Starting Download : " . $newFilename;

 

    $client->download($ret->video_id, {

            filename => $newFilename,

        });

}

 

다음과 같이 실행 해 보니깐~

 



 

위 실행화면은 아이유에 대해 2개만 검색하는 경우 입니다.

 

요렇게 두 개의 동영상 파일이 다운로드 되더군요.

 

아이유(IU) - 너랑 나 (YOU & I) MV Full Ver. (SD).flv

 

IU (아이유) - 하루 끝 (Every End of The Day) [MV HD ENG SUB].mp4

 

결론은…..

 

참조한 글의 저자인 eeyees 님과

 

Perl 의 창시자인 Larry Wall 과

 

필요한 모듈을 만들고 공유해 주신 세계의 똑똑한 분들과

 

유투브 서비스를 해주는 구글 관계자 분들과

 

아이유 동영상을 유투브에 올려 주신 분들과

 

마지막으로 아이유 가수님께… 감사하다는 겁니다.


반응형

댓글