사용자 도구

사이트 도구


project:youtubeupload

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
다음 판
이전 판
project:youtubeupload [2013/03/25 16:56] – [홈서버에 스크립트 설치] changwooproject:youtubeupload [2014/10/09 21:24] (현재) – 바깥 편집 127.0.0.1
줄 4: 줄 4:
 얼마전 휴대전화에 저장된 동영상들을 유튜브에 올려두고 싶었습니다. 그런데 파일이 꽤 있어서 일일이 클릭해서 올리기 힘들고 귀찮았습니다. 분명히 구글의 API를 이용해 배치 작업을 할 수 있도록 만든 무언가가 있을 것 같더군요. 얼마전 휴대전화에 저장된 동영상들을 유튜브에 올려두고 싶었습니다. 그런데 파일이 꽤 있어서 일일이 클릭해서 올리기 힘들고 귀찮았습니다. 분명히 구글의 API를 이용해 배치 작업을 할 수 있도록 만든 무언가가 있을 것 같더군요.
  
-아니나다를까, 누군가 'youtube-upload'라는 파이썬 기반의 프로그램을 제공하고 있었습니다. 이를 이용하면 명령줄 기반으로 간단하게 유튜브에 동영상을 업로드 할 수 있겠더군요. 이번에는 이 스크립트를 기반으로 사용자의 하드디스크에 있는 유튜브 동영상을 일괄 업로드 하는 법을 기록해 보겠습니다.+아니나다를까, 누군가 '[[http://code.google.com/p/youtube-upload/|youtube-upload]]'라는 파이썬 기반의 프로그램을 제공하고 있었습니다. 이를 이용하면 명령줄 기반으로 간단하게 유튜브에 동영상을 업로드 할 수 있겠더군요. 이번에는 이 스크립트를 기반으로 사용자의 하드디스크에 있는 유튜브 동영상을 일괄 업로드 하는 법을 기록해 보겠습니다.
  
 ===== 필요한 것들 ===== ===== 필요한 것들 =====
줄 118: 줄 118:
  
 ==== 스크립트 실행 ==== ==== 스크립트 실행 ====
 +파이썬에서 직접 명령을 실행할 수도 있지만, 파이썬은 우리가 만든 CSV 테이블을 BASH 쉘 스크립트를 만들어내는 역할만 하도록 하겠습니다. 윈도우로 따지자면 패치 파일인 .bat 파일을 만들어 내는 것이겠죠. 이 편이 훨씬 프로그램하기도 단순하고, 혹여 프로그래밍 중 발생하는 실수에 대처하기도 편리합니다. 물론 파이썬이 아닌 펄, 자바, 쉘 스크립트 등 타 언어로 이 부분을 대치해도 관계없습니다.
 +
 +서버는 UTF-8을, 데스크탑은 CP949를 쓴다고 가정합니다. CSV 파일 또한 CP949로 작성되었다고 가정합니다.
 +
 +<code python batch_upload.py>
 +# -*- coding: utf-8 -*-
 +#!/usr/bin/python
 +
 +import csv
 +import sys
 +
 +def cp949_to_uni(_in):
 +    return _in.decode('cp949', 'ignore')
 +
 +def print_script(entries):
 +    EMAIL = u'유튜브 계정'
 +    PASS  = u'유튜브 비밀번호'
 +
 +    print '#!/bin/bash'
 +
 +    for entry in entries:
 +        command =  u'youtube-upload '
 +        command += u'--email=\"'       + EMAIL                + '\" '
 +        command += u'--password=\"'    + PASS                 + '\" '
 +        command += u'--category=\"'    + entry['category'   + '\" '
 +        command += u'--title=\"'       + entry['title'      + '\" '
 +        command += u'--description=\"' + entry['description'] + '\" '
 +        command += u'--keywords=\"'    + entry['keywords'   + '\" '
 +
 +        if entry['private'] == u'TRUE':
 +            command += u'--private '
 +
 +        command += entry['filename']
 +        print command.encode('utf-8')
 +
 +def main(argv):
 +    if len(argv) != 2:
 +        print "Please specify your csv file."
 +        return 1
 +
 +    entries = []
 +
 +    with open(argv[1], 'rb') as csvfile:
 +        reader = csv.reader(csvfile, delimiter=',', quotechar='\"')
 +        for filename, category, title, description, keywords, is_private in reader:
 +            entries.append(
 +                    {
 +                        'filename':    cp949_to_uni(filename),
 +                        'category':    cp949_to_uni(category),
 +                        'title':       cp949_to_uni(title),
 +                        'description': cp949_to_uni(description),
 +                        'keywords':    cp949_to_uni(keywords),
 +                        'private':     cp949_to_uni(is_private)
 +                    }
 +            )
 +
 +    print_script(entries)
 +    return 0
 +
 +if __name__ == '__main__':
 +    sys.exit(main(sys.argv))
 +</code>
 +
 +스크립트를 실행하면 CSV 파일을 기반으로 BASH 쉘 스크립트를 만들어 냅니다. 쉘 스크립트가 올바로 동작하는지 확인해 보세요. 
 +만일 윈도우의 .bat 파일이 필요하시다면 "print '#!/bin/bash'" 부분만 주석 처리한 후, bat 파일로 리다이렉션 하면 됩니다.
 +
 +<code bash>
 +python batch_upload.py csv파일 > upload.sh   # 리눅스
 +</code>
 +<code dos>
 +python batch_upload.py csv파일 > upload.bat  # 윈도우
 +</code>
 +
 +이렇게 만들어낸 sh(bat) 파일을 쉘에서 실행시키면 업로드가 일괄적으로 진행되겠지요. 일단 쉘 스크립트 파일(sh) 첫번째 줄을 따로 복사해 그것 하나만 올바로 동작하는지 확해 보았습니다. 프로그램이 생성한 스크립트이므로 첫번째 것만 무사히 진행되면 나머지 작업도 별다른 문제가 없는 한 순조롭게 될 것입니다. 여러 파일에 대해 일괄적인, 그리고 장시간의 작업을 수행하는 것이므로 꼼꼼하게 테스트하는 것이 중요합니다. 미리 처리한 줄은 맨 앞에 '#' 기호를 붙여 주석하는 것을 잊지 마세요. (bat 파일의 경우 'REM' 명령을 사용합니다.) 
 +
 +한편 서버에 장시간 업로드를 할 경우, 로그아웃을 하더라도 작업이 진행되어야 합니다. 그럴 때는 nohup 명령을 이용합니다.
 +<code bash>
 +$nohup upload.sh > youtube_upload_status.txt
 +</code>
 +이렇게 하면 로그아웃을 하더라도 작업이 끝까지 진행됩니다.
 ==== 로그 분석 ==== ==== 로그 분석 ====
 +nohup에 의해 youtube-upload 명령어가 출력하는 메시지가 youtube_upload_status.txt에 저장되었습니다. 여기서 업로드된 파일이 어떤 URL로 지정되었는지 파악해서 아까의 CSV (혹은 XLS, XLSX) 파일에 다시 기록해둡니다. 파이썬을, 혹은 프로그래밍에 익숙하신 분이라면 여기서 '로그 파일 파싱?'을 생각할지 모릅니다만, 골치아프게 이것까지 프로그래밍을 할 필요는 없는 것 같습니다. 그냥 적당히 텍스트 편집기를 열여 찾기-바꾸기를 이용해 필요한 부분만 걷어내는 방식으로 해도 무방할 듯합니다.
 +
project/youtubeupload.1364230560.txt.gz · 마지막으로 수정됨: 2014/10/09 21:23 (바깥 편집)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki