project:youtubeupload
차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판이전 판다음 판 | 이전 판 | ||
project:youtubeupload [2013/03/25 16:45] – 내용 추가. changwoo | project:youtubeupload [2014/10/09 21:24] (현재) – 바깥 편집 127.0.0.1 | ||
---|---|---|---|
줄 4: | 줄 4: | ||
얼마전 휴대전화에 저장된 동영상들을 유튜브에 올려두고 싶었습니다. 그런데 파일이 꽤 있어서 일일이 클릭해서 올리기 힘들고 귀찮았습니다. 분명히 구글의 API를 이용해 배치 작업을 할 수 있도록 만든 무언가가 있을 것 같더군요. | 얼마전 휴대전화에 저장된 동영상들을 유튜브에 올려두고 싶었습니다. 그런데 파일이 꽤 있어서 일일이 클릭해서 올리기 힘들고 귀찮았습니다. 분명히 구글의 API를 이용해 배치 작업을 할 수 있도록 만든 무언가가 있을 것 같더군요. | ||
- | 아니나다를까, | + | 아니나다를까, |
===== 필요한 것들 ===== | ===== 필요한 것들 ===== | ||
줄 63: | 줄 63: | ||
==== 홈서버에 스크립트 설치 ==== | ==== 홈서버에 스크립트 설치 ==== | ||
+ | 파이썬 2.7이 정상 동작한다고 가정합니다. 구글 코드에 있는 [[http:// | ||
+ | |||
+ | * Gentoo <code bash># emerge dev-python/ | ||
+ | * Ubuntu, Debian <code bash># apt-get install python-gdata</ | ||
+ | * Fedora <code bash># rpm -ivh python-gdata</ | ||
+ | |||
+ | 다운로드 받은 youtube-upload는 압축을 풀어 폴더로 접근한 다음 <code bash># python setup.py install</ | ||
+ | |||
+ | 설치가 되었으면 youtube-upload를 실행해 보세요. | ||
+ | <code bash> | ||
+ | $ youtube-upload --help | ||
+ | Usage: youtube-upload [OPTIONS] VIDEO_PATH ... | ||
+ | |||
+ | Upload videos to youtube. | ||
+ | |||
+ | Options: | ||
+ | --version | ||
+ | -h, --help | ||
+ | -m EMAIL, --email=EMAIL | ||
+ | Authentication email or Youtube username | ||
+ | -p PASSWORD, --password=PASSWORD | ||
+ | Authentication password | ||
+ | -t TITLE, --title=TITLE | ||
+ | Video(s) title | ||
+ | -c CATEGORY, --category=CATEGORY | ||
+ | Video(s) category | ||
+ | --get-categories | ||
+ | --create-playlist=TITLE|DESCRIPTION|PRIVATE (0=no, 1=yes) | ||
+ | Create new playlist and add uploaded video(s) to it | ||
+ | -d DESCRIPTION, | ||
+ | Video(s) description | ||
+ | --keywords=KEYWORDS | ||
+ | --title-template=STRING | ||
+ | Title template to use on multiple videos (default: | ||
+ | $title [$n/ | ||
+ | --private | ||
+ | --unlisted | ||
+ | --location=LAT, | ||
+ | --update-metadata | ||
+ | --api-upload | ||
+ | --get-upload-form-info | ||
+ | Don't upload, get the form info (PATH, TOKEN, URL) | ||
+ | --add-to-playlist=URI | ||
+ | Add video(s) to an existing playlist | ||
+ | --delete-from-playlist=URI | ||
+ | Delete video(s) from an existing playlist | ||
+ | --wait-processing | ||
+ | --captcha-token=STRING | ||
+ | Captcha token | ||
+ | --captcha-response=STRING | ||
+ | Captcha response | ||
+ | </ | ||
+ | |||
+ | |||
==== 스크립트 실행 ==== | ==== 스크립트 실행 ==== | ||
+ | 파이썬에서 직접 명령을 실행할 수도 있지만, 파이썬은 우리가 만든 CSV 테이블을 BASH 쉘 스크립트를 만들어내는 역할만 하도록 하겠습니다. 윈도우로 따지자면 패치 파일인 .bat 파일을 만들어 내는 것이겠죠. 이 편이 훨씬 프로그램하기도 단순하고, | ||
+ | |||
+ | 서버는 UTF-8을, 데스크탑은 CP949를 쓴다고 가정합니다. CSV 파일 또한 CP949로 작성되었다고 가정합니다. | ||
+ | |||
+ | <code python batch_upload.py> | ||
+ | # -*- coding: utf-8 -*- | ||
+ | # | ||
+ | |||
+ | import csv | ||
+ | import sys | ||
+ | |||
+ | def cp949_to_uni(_in): | ||
+ | return _in.decode(' | ||
+ | |||
+ | def print_script(entries): | ||
+ | EMAIL = u' | ||
+ | PASS = u' | ||
+ | |||
+ | print '# | ||
+ | |||
+ | for entry in entries: | ||
+ | command = u' | ||
+ | command += u' | ||
+ | command += u' | ||
+ | command += u' | ||
+ | command += u' | ||
+ | command += u' | ||
+ | command += u' | ||
+ | |||
+ | if entry[' | ||
+ | command += u' | ||
+ | |||
+ | command += entry[' | ||
+ | print command.encode(' | ||
+ | |||
+ | def main(argv): | ||
+ | if len(argv) != 2: | ||
+ | print " | ||
+ | return 1 | ||
+ | |||
+ | entries = [] | ||
+ | |||
+ | with open(argv[1], | ||
+ | reader = csv.reader(csvfile, | ||
+ | for filename, category, title, description, | ||
+ | entries.append( | ||
+ | { | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | } | ||
+ | ) | ||
+ | |||
+ | print_script(entries) | ||
+ | return 0 | ||
+ | |||
+ | if __name__ == ' | ||
+ | sys.exit(main(sys.argv)) | ||
+ | </ | ||
+ | |||
+ | 스크립트를 실행하면 CSV 파일을 기반으로 BASH 쉘 스크립트를 만들어 냅니다. 쉘 스크립트가 올바로 동작하는지 확인해 보세요. | ||
+ | 만일 윈도우의 .bat 파일이 필요하시다면 "print '# | ||
+ | |||
+ | <code bash> | ||
+ | python batch_upload.py csv파일 > upload.sh | ||
+ | </ | ||
+ | <code dos> | ||
+ | python batch_upload.py csv파일 > upload.bat | ||
+ | </ | ||
+ | |||
+ | 이렇게 만들어낸 sh(bat) 파일을 쉘에서 실행시키면 업로드가 일괄적으로 진행되겠지요. 일단 쉘 스크립트 파일(sh) 첫번째 줄을 따로 복사해 그것 하나만 올바로 동작하는지 확해 보았습니다. 프로그램이 생성한 스크립트이므로 첫번째 것만 무사히 진행되면 나머지 작업도 별다른 문제가 없는 한 순조롭게 될 것입니다. 여러 파일에 대해 일괄적인, | ||
+ | |||
+ | 한편 서버에 장시간 업로드를 할 경우, 로그아웃을 하더라도 작업이 진행되어야 합니다. 그럴 때는 nohup 명령을 이용합니다. | ||
+ | <code bash> | ||
+ | $nohup upload.sh > youtube_upload_status.txt | ||
+ | </ | ||
+ | 이렇게 하면 로그아웃을 하더라도 작업이 끝까지 진행됩니다. | ||
==== 로그 분석 ==== | ==== 로그 분석 ==== | ||
+ | nohup에 의해 youtube-upload 명령어가 출력하는 메시지가 youtube_upload_status.txt에 저장되었습니다. 여기서 업로드된 파일이 어떤 URL로 지정되었는지 파악해서 아까의 CSV (혹은 XLS, XLSX) 파일에 다시 기록해둡니다. 파이썬을, | ||
+ |
project/youtubeupload.1364229941.txt.gz · 마지막으로 수정됨: 2014/10/09 21:23 (바깥 편집)