project:youtubeupload
차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판이전 판다음 판 | 이전 판 | ||
| project:youtubeupload [2013/03/25 16:40] – [작업 방법] 작업 순서 추가. changwoo | project:youtubeupload [2014/10/09 21:24] (현재) – 바깥 편집 127.0.0.1 | ||
|---|---|---|---|
| 줄 4: | 줄 4: | ||
| 얼마전 휴대전화에 저장된 동영상들을 유튜브에 올려두고 싶었습니다. 그런데 파일이 꽤 있어서 일일이 클릭해서 올리기 힘들고 귀찮았습니다. 분명히 구글의 API를 이용해 배치 작업을 할 수 있도록 만든 무언가가 있을 것 같더군요. | 얼마전 휴대전화에 저장된 동영상들을 유튜브에 올려두고 싶었습니다. 그런데 파일이 꽤 있어서 일일이 클릭해서 올리기 힘들고 귀찮았습니다. 분명히 구글의 API를 이용해 배치 작업을 할 수 있도록 만든 무언가가 있을 것 같더군요. | ||
| - | 아니나다를까, | + | 아니나다를까, |
| ===== 필요한 것들 ===== | ===== 필요한 것들 ===== | ||
| 줄 19: | 줄 19: | ||
| - 촬영 날짜, 파일 목록 가져오기 | - 촬영 날짜, 파일 목록 가져오기 | ||
| - 동영상 정보 작성 | - 동영상 정보 작성 | ||
| - | - 데스크탑 PC의 동영상을 홈서버로 | + | - 데스크탑 PC의 동영상을 홈서버로 |
| - 홈서버에 스크립트 설치 | - 홈서버에 스크립트 설치 | ||
| - 스크립트 실행 | - 스크립트 실행 | ||
| 줄 59: | 줄 59: | ||
| - | ==== 동영상 | + | ==== 동영상 |
| - | 데스크탑의 동영상을 장시간 업로드하려면 파일을 복사해두는 | + | 데스크탑의 동영상을 장시간 업로드하려면 파일을 복사해두는 |
| + | ==== 홈서버에 스크립트 설치 ==== | ||
| + | 파이썬 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.1364229618.txt.gz · 마지막으로 수정됨: 2014/10/09 21:23 (바깥 편집)
