]> gitweb @ CieloNegro.org - youtube-dl.git/blobdiff - youtube-dl
Add forceurl and forcetitle downloader options
[youtube-dl.git] / youtube-dl
index 1c4a05471e1eb7533cd2906b7dc2fee9d8bf0491..cc2ba4262aa337bfe87ea936ccdb0e70531932b9 100755 (executable)
@@ -17,7 +17,7 @@ import urllib
 import urllib2
 
 std_headers = {        
-       'User-Agent': 'UserAgent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9) Gecko/2008052906 Firefox/3.0',
+       'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1',
        'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',
        'Accept': 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5',
        'Accept-Language': 'en-us,en;q=0.5',
@@ -55,6 +55,8 @@ class FileDownloader(object):
        password:       Password for authentication purposes.
        usenetrc:       Use netrc for authentication instead.
        quiet:          Do not print messages to stdout.
+       forceurl:       Force printing final URL.
+       forcetitle:     Force printing title.
        simulate:       Do not download the video files.
        format:         Video format code.
        outtmpl:        Template for output names.
@@ -152,9 +154,16 @@ class FileDownloader(object):
        def to_stderr(self, message):
                """Print message to stderr."""
                sys.stderr.write('%s\n' % message)
+       
+       def fixed_template(self):
+               """Checks if the output template is fixed."""
+               return (re.search(ur'(?u)%\(.+?\)s', self._params['outtmpl']) is None)
 
        def download(self, url_list):
                """Download a given list of URLs."""
+               if len(url_list) > 1 and self.fixed_template():
+                       sys.exit('ERROR: fixed output name but more than one file to download')
+
                for url in url_list:
                        suitable_found = False
                        for ie in self._ies:
@@ -164,16 +173,24 @@ class FileDownloader(object):
                                suitable_found = True
                                results = [x for x in ie.extract(url) if x is not None]
 
-                               if (len(url_list) > 1 or len(results) > 1) and re.search(r'%\(.+?\)s', self._params['outtmpl']) is None:
+                               if len(results) > 1 and self.fixed_template():
                                        sys.exit('ERROR: fixed output name but more than one file to download')
 
-                               if self._params.get('simulate', False):
-                                       continue
-
                                for result in results:
+
+                                       # Forced printings
+                                       if self._params.get('forcetitle', False):
+                                               print result['title']
+                                       if self._params.get('forceurl', False):
+                                               print result['url']
+                                               
+                                       # Do nothing else if in simulate mode
+                                       if self._params.get('simulate', False):
+                                               continue
+
                                        try:
                                                filename = self._params['outtmpl'] % result
-                                       except (KeyError), err:
+                                       except (ValueError, KeyError), err:
                                                self.to_stderr('ERROR: invalid output template: %s' % str(err))
                                                continue
                                        try:
@@ -412,11 +429,11 @@ class YoutubeIE(InfoExtractor):
                        self.to_stderr('ERROR: Unable to extract video title')
                        return [None]
                video_title = mobj.group(1).decode('utf-8')
-               video_title = re.sub(u'&(.+?);', lambda x: unichr(htmlentitydefs.name2codepoint[x.group(1)]), video_title)
+               video_title = re.sub(ur'(?u)&(.+?);', lambda x: unichr(htmlentitydefs.name2codepoint[x.group(1)]), video_title)
 
                # simplified title
-               simple_title = re.sub(u'([^%s]+)' % simple_title_chars, u'_', video_title)
-               simple_title = simple_title.strip(u'_')
+               simple_title = re.sub(ur'(?u)([^%s]+)' % simple_title_chars, ur'_', video_title)
+               simple_title = simple_title.strip(ur'_')
 
                # Return information
                return [{
@@ -443,9 +460,11 @@ if __name__ == '__main__':
                        'username': None,
                        'password': None,
                        'quiet': False,
-                       'simulate': True,
+                       'forceurl': False,
+                       'forcetitle': False,
+                       'simulate': False,
                        'format': None,
-                       'outtmpl': '%(id)s.%(ext)s'
+                       'outtmpl': '%(ext)s/%(ext)s/%(id)s.%(ext)s'
                        })
                fd.add_info_extractor(youtube_ie)
                fd.download([