# # This file is part of stov, written by Helmut Pozimski 2012-2015. # # stov is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, version 2 of the License. # # stov is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with stov. If not, see . # -*- coding: utf8 -*- """This module takes care of managing and downloading single videos.""" import os import sys import subprocess from lib_stov import stov_exceptions class Video(object): """This class stores all the attributes of a single youtube video and is also able to download it using youtube-dl. """ def __init__(self, title, ytid, conf, downloaded, failcount=0, video_id=0): self._id = video_id self.title = title self.ytid = ytid self.__conf = conf self.downloaded = downloaded self.failcnt = int(failcount) def download_video(self, directory, itag_value, video_codec): """Downloads the video by calling youtube-dl as an external process""" targetdir = self.__conf.values["downloaddir"] + "/" + directory if os.access(targetdir, os.F_OK) is False: try: os.makedirs(targetdir, 0o750) except os.error: raise stov_exceptions.DirectoryCreationFailedException() os.chdir(targetdir) if self.downloaded == 0: try: if self.__conf.outputlevel == "default": subprocess.check_call([self.__conf.values["youtube-dl"], "-f %s/%s" % (itag_value, video_codec), "-o", "%(title)s-%(id)s.%(ext)s", "http://www.youtube.com/watch?v=%s" % self.ytid], stderr=sys.stderr, stdout=open("/dev/null", "w")) elif self.__conf.outputlevel == "verbose": subprocess.check_call([self.__conf.values["youtube-dl"], "-f %s/%s" % (itag_value, video_codec), "-o", "%(title)s-%(id)s.%(ext)s", "http://www.youtube.com/watch?v=%s" % self.ytid], stderr=sys.stderr, stdout=sys.stdout) elif self.__conf.outputlevel == "quiet": subprocess.check_call([self.__conf.values["youtube-dl"], "-f %s/%s" % (itag_value, video_codec), "-o", "%(title)s-%(id)s.%(ext)s", "http://www.youtube.com/watch?v=%s" % self.ytid], stderr=open("/dev/null", "w"), stdout=open("/dev/null", "w")) except subprocess.CalledProcessError: self.failcnt = int(self.failcnt) + 1 return False else: self.downloaded = 1 return True def get_id(self): """Resturns the id attribute assigned to the object.""" return self._id