Verify URLs in simulate mode (fixes issue #22)
authorRicardo Garcia <sarbalap+freshmeat@gmail.com>
Sun, 24 May 2009 09:07:51 +0000 (11:07 +0200)
committerRicardo Garcia <sarbalap+freshmeat@gmail.com>
Sun, 31 Oct 2010 10:24:32 +0000 (11:24 +0100)
youtube-dl

index f6e472445d8e0d9512805487a04afc88bcc68662..0aae9050521c499ceff5e80244d8456ab7140c86 100755 (executable)
@@ -200,6 +200,14 @@ class FileDownloader(object):
                multiplier = 1024.0 ** 'bkmgtpezy'.index(matchobj.group(2).lower())
                return long(round(number * multiplier))
 
+       @staticmethod
+       def verify_url(url):
+               """Verify a URL is valid and data could be downloaded."""
+               request = urllib2.Request(url, None, std_headers)
+               data = urllib2.urlopen(request)
+               data.read(1)
+               data.close()
+
        def add_info_extractor(self, ie):
                """Add an InfoExtractor object to the end of the list."""
                self._ies.append(ie)
@@ -265,15 +273,21 @@ class FileDownloader(object):
 
        def process_info(self, info_dict):
                """Process a single dictionary returned by an InfoExtractor."""
-               # Forced printings
-               if self.params.get('forcetitle', False):
-                       print info_dict['title'].encode(locale.getpreferredencoding())
-               if self.params.get('forceurl', False):
-                       print info_dict['url'].encode(locale.getpreferredencoding())
-                       
                # Do nothing else if in simulate mode
                if self.params.get('simulate', False):
+                       try:
+                               self.verify_url(info_dict['url'])
+                       except (OSError, IOError, urllib2.URLError, httplib.HTTPException, socket.error), err:
+                               raise UnavailableFormatError
+
+                       # Forced printings
+                       if self.params.get('forcetitle', False):
+                               print info_dict['title'].encode(locale.getpreferredencoding())
+                       if self.params.get('forceurl', False):
+                               print info_dict['url'].encode(locale.getpreferredencoding())
+
                        return
+                       
 
                try:
                        template_dict = dict(info_dict)