반응형

youtube-dl이 유튜브만 지원하는게 아니라 네이버를 포함한 다양한 사이트들도 지원한다.

 

youtube-dl

 

youtube-dl.org

 

네이버 tv(구. 네이버 tvcast) 영상을 서비스 되지 않는 국가(중국) 출장 간 시청하고자 아래 방법을 통해 다운받는다.

 

1. 다운로드 대상 URL 목록화

네이버tv의 동영상이 재생되는 페이지의 url을 목록화한다.

다운받고자 하는 동영상 갯수가 적으면 개별 다운로드로 해도 크게 상관은 없겠으나

재생목록 통째로 받고자 해서 목록화가 필요했다.

 

간단하게 Python으로 스크립트를 작성해도 되겠으나, 그것 마저 시간이 걸릴거 같아 
정규표현식을 사용하여 URL목록을 작성한다.

 

네이버tv 동영상 우측에 보면 재생목록이 보이는데 이 재생목록의 각 동영상 URL을 한번에 획득할 계획이다.

 

크롬의 경우 f12를 눌러 개발자 도구를 열어 해당 부분의 소스를 복사한다. (현재 해당 부분의 div id는 "playlistArea"이다.)

해당 div태그 위에 마우스 포커스를 두고 오른쪽마우스를 눌러 Copy Element를 누르면 하위 이 div태그가 감싸는 영역의 소스가 복사된다.

 

이제 복사된 내용을 RegExr이라는 정규표현식  테스트 사이트에 붙여넣기한다.

 

 Text란에 복사한 태그를 붙여넣었으면 위 입력칸에는 정규표현식을 넣어 각 동영상이 재생되는 페이지의 URL를 획득한다.

 

사용한 정규표현식:

data-issmr=".*" data-event=".*" href="(.*?)" title="(.*?)"

 

하단의 List탭을 눌러 캡쳐링그룹1을 선택하면 매칭이 된 url목록이 나타난다.

위 url를 복사하여 youtube-dl이 있는 폴더 경로에 list.txt 등의 이름의 텍스트파일로 저장한다.

2. youtube-dl로 다운로드

윈도우 명령프롬포트(시작-실행-cmd)나 파워쉘을 이용하여 youtube-dl.exe 실행파일이 있는 곳으로 이동한다.

 

이 경로에는 youtube-dl.exe 파일과 아까 리스트파일(list.txt)이 존재하고있다.

 

cd명령으로 이 경로로 왔으면 아래 명령을 통해 리스트파일에 있는 동영상을 모두 다운받는다.

 

.\youtube-dl.exe -f "best" --batch-file list.txt

포맷옵션으로 best를 사용하게 되면, 비디오와 오디오 품질 모두 최고인 포맷으로 다운받게된다.

 

 

 

 

유튜브는 다양한 다운로드 사이트와 툴들이 있지만 네이버TV는 흔치않아서 이번 기회에 정리해본다.

 

개인적인 목적으로만 이용해야하며, 이를 악용하여 발생된 문제에 대한 책임을 지지 않습니다.

반응형

프로그래밍을 하다 보면 코드의 일부 내용을 반복적으로 바꿔줘야할 때가 있다.


오래된 프로젝트를 리팩토링한다거나 프로젝트 문자셋을 멀티바이트에서 유니코드로 바꿀 때가 그 대표적인 예다.


물론 일일이 컴파일 오류나는 부분을 찾아서 바꿔주거나 전체 찾기해서 바꿔주는 원초적인 방법이 있다.


보다 효율적이고 능률적인 방법을 소개하겠다.


바로 정규표현식(aka. 정규식)을 사용한 찾기 및 바꾸기이다.


C++에서는 정규식이 조금 낯설수 있는데, 간략하게 설명하자면 정규표현식이란, 문자열에서 일정한 규칙(Pattern)을 갖는 문자열 집합(Group)을 찾아내는 것이다.


필자는 멀티바이트로 작성된 프로젝트를 유니코드로 바꾸는 과정에서 수많은 문자열 메시지 부분을 유니코드에 맞게 바꾸줘야하는 작업을 위 정규식을 이용해 작업했다.


찾기 바꾸기 대화상자(단축키:Ctrl+Shift+F)에서 찾기옵션에 정규식 사용에 체크를 해야한다.



MFC의 대표적인 문자열 타입인 Cstring의 경우 멀티바이트 인 경우 큰따옴표("")로 문자열을 표시했지만,


유니코드로 바꾸려면 _T 매크로를 넣어주거나 L를 앞에 넣어줘야한다.


물론 _T 매크로가 삽입되어 있다면, 매크로에서 자동으로 L로 변환이 된다.


(멀티바이트든, 유니코드는 _T 매크로를 넣어주는 버릇을 갖다.)


_T매크로는 _T(로 시작해서 괄호) 로 끝나기 때문에 그냥 찾아 바꾸기만 해서는 안된다.


다음은 내가 가장 많이 쓰는 정규식이다.



1. Cstring의 Format 멤버함수

예시:


찾을 대상

strTitle.Format("%s: ABCDEFG123456가나다라", this->getTitle());


바꿀 문자열

strTitle.Format(_T("%s: ABCDEFG123456가나다라"), this->getTitle());

Format 멤버함수의 문자열을 감쏴고 있는 큰따옴표 앞에 _T 매크로를 넣어줘야한다.


정규표현식:


찾을 문자열:

.Format\(\"(.*)\"


바꿀 문자열

.Format(_T("$1")

위에서 보다시피 정규식을 찾을때에는 문자열에 포함되는 괄호, 따옴표에 대해서는 백슬래시(\)로 구분을 해줘야한다.

그리고 바꿀 문자열에 대해서는 백슬래시가 필요없으며 그룹 문자열($1,$2,$3...) 등을 사용하면 된다.



2. Afxmessage 메시지 팝업

예시:

찾을 대상

AfxMessageBox("입력값 초과");


바꿀 문자열

AfxMessageBox(_T("입력값 초과"));


정규표현식:


찾을 문자열:

AfxMessageBox\(\"(.*)\"


바꿀 문자열

AfxMessageBox(_T("$1")


+ Recent posts