aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Hagemeister <phihag@phihag.de>2011-07-07 12:47:36 +0200
committerPhilipp Hagemeister <phihag@phihag.de>2011-07-07 12:47:36 +0200
commit8b95c38707b8e6c9f2ce6a754d77b2b8f458cc14 (patch)
tree01cfec0346e6e20afb568bc793d343d8adcdb7b5
parentc6b55a8d4817a0818a1923db72b0f953ab80c0d4 (diff)
--writedescription option
-rwxr-xr-xyoutube-dl30
1 files changed, 25 insertions, 5 deletions
diff --git a/youtube-dl b/youtube-dl
index a3522199f..bb0f90a9c 100755
--- a/youtube-dl
+++ b/youtube-dl
@@ -8,6 +8,10 @@
# Author: Paweł Paprota
# Author: Gergely Imreh
# License: Public domain code
+
+from __future__ import with_statement
+
+import contextlib
import cookielib
import ctypes
import datetime
@@ -301,6 +305,7 @@ class FileDownloader(object):
consoletitle: Display progress in console window's titlebar.
nopart: Do not use temporary .part files.
updatetime: Use the Last-modified header to set output file timestamps.
+ writedescription: Write the video description to a .description file
"""
params = None
@@ -496,6 +501,10 @@ class FileDownloader(object):
except:
pass
+ def report_writedescription(self, descfn):
+ """ Report that the description file has been written """
+ self.to_screen(u'[info] Video description written to: %s' % descfn, ignore_encoding_errors=True)
+
def report_destination(self, filename):
"""Report destination filename."""
self.to_screen(u'[download] Destination: %s' % filename, ignore_encoding_errors=True)
@@ -582,6 +591,16 @@ class FileDownloader(object):
self.trouble(u'ERROR: unable to create directories: %s' % str(err))
return
+ if self.params.get('writedescription', False):
+ try:
+ descfn = filename + '.description'
+ with contextlib.closing(open(descfn, 'wb')) as descfile:
+ descfile.write(info_dict['description'].encode('utf-8'))
+ self.report_writedescription(descfn)
+ except (OSError, IOError):
+ self.trouble(u'ERROR: Cannot write description file: %s' % str(descfn))
+ return
+
try:
success = self._do_download(filename, info_dict['url'].encode('utf-8'), info_dict.get('player_url', None))
except (OSError, IOError), err:
@@ -1086,7 +1105,7 @@ class YoutubeIE(InfoExtractor):
lxml.etree
except NameError:
video_description = u'No description available.'
- if self._downloader.params.get('forcedescription', False):
+ if self._downloader.params.get('forcedescription', False) or self._downloader.params.get('writedescription', False):
warnings.warn(u'You are using an old Python version, install Python 2.6+ or lxml. Falling back to old video description extractor.')
mobj = re.search(r'<meta name="description" content="(.*)"(?:\s*/)?>', video_webpage)
if mobj is not None:
@@ -2529,10 +2548,7 @@ class FacebookIE(InfoExtractor):
pass
# description
- video_description = 'No description available.'
- if (self._downloader.params.get('forcedescription', False) and
- 'description' in video_info):
- video_description = video_info['description']
+ video_description = video_info.get('description', 'No description available.')
url_map = video_info['video_urls']
if len(url_map.keys()) > 0:
@@ -2903,6 +2919,9 @@ if __name__ == '__main__':
filesystem.add_option('--no-mtime',
action='store_false', dest='updatetime',
help='do not use the Last-modified header to set the file modification time', default=True)
+ filesystem.add_option('--write-description',
+ action='store_true', dest='writedescription',
+ help='write video description to a .description file', default=False)
parser.add_option_group(filesystem)
postproc = optparse.OptionGroup(parser, 'Post-processing Options')
@@ -3040,6 +3059,7 @@ if __name__ == '__main__':
'consoletitle': opts.consoletitle,
'nopart': opts.nopart,
'updatetime': opts.updatetime,
+ 'writedescription': opts.writedescription,
})
fd.add_info_extractor(youtube_search_ie)
fd.add_info_extractor(youtube_pl_ie)