From 2c288bda4235bed6927d88d9bf53ecaec18f7904 Mon Sep 17 00:00:00 2001 From: Filippo Valsorda Date: Wed, 9 May 2012 14:47:28 +0200 Subject: [PATCH] reorganized the titles sanitizing: now title is the untouched title and stitle is created in process_info() and is cross-filesystem sanitized by sanitize_filename(); closes #164 --- youtube-dl | Bin 41751 -> 40223 bytes youtube_dl/FileDownloader.py | 2 ++ youtube_dl/InfoExtractors.py | 60 ++++------------------------------- youtube_dl/utils.py | 18 +++++------ 4 files changed, 17 insertions(+), 63 deletions(-) diff --git a/youtube-dl b/youtube-dl index 56f5b289bdc021a725a94b4e5d0a26615915e42a..3fc77f206861fcf4523be9d3e7c3d0ec69107b49 100755 GIT binary patch delta 26910 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.+?)<', webpage) if mobj is None: @@ -584,7 +575,6 @@ class MetacafeIE(InfoExtractor): 'uploader': video_uploader.decode('utf-8'), 'upload_date': u'NA', 'title': video_title, - 'stitle': simple_title, 'ext': video_extension.decode('utf-8'), 'format': u'NA', 'player_url': None, @@ -651,8 +641,6 @@ class DailymotionIE(InfoExtractor): self._downloader.trouble(u'ERROR: unable to extract title') return video_title = unescapeHTML(mobj.group('title').decode('utf-8')) - video_title = sanitize_title(video_title) - simple_title = simplify_title(video_title) mobj = re.search(r'(?im)[^<]+?]+?>([^<]+?)', webpage) if mobj is None: @@ -666,7 +654,6 @@ class DailymotionIE(InfoExtractor): 'uploader': video_uploader.decode('utf-8'), 'upload_date': u'NA', 'title': video_title, - 'stitle': simple_title, 'ext': video_extension.decode('utf-8'), 'format': u'NA', 'player_url': None, @@ -730,8 +717,6 @@ class GoogleIE(InfoExtractor): self._downloader.trouble(u'ERROR: unable to extract title') return video_title = mobj.group(1).decode('utf-8') - video_title = sanitize_title(video_title) - simple_title = simplify_title(video_title) # Extract video description mobj = re.search(r'([^<]*)', webpage) @@ -764,7 +749,6 @@ class GoogleIE(InfoExtractor): 'uploader': u'NA', 'upload_date': u'NA', 'title': video_title, - 'stitle': simple_title, 'ext': video_extension.decode('utf-8'), 'format': u'NA', 'player_url': None, @@ -823,8 +807,6 @@ class PhotobucketIE(InfoExtractor): self._downloader.trouble(u'ERROR: unable to extract title') return video_title = mobj.group(1).decode('utf-8') - video_title = sanitize_title(video_title) - simple_title = simplify_title(video_title) video_uploader = mobj.group(2).decode('utf-8') @@ -834,7 +816,6 @@ class PhotobucketIE(InfoExtractor): 'uploader': video_uploader, 'upload_date': u'NA', 'title': video_title, - 'stitle': simple_title, 'ext': video_extension.decode('utf-8'), 'format': u'NA', 'player_url': None, @@ -912,7 +893,6 @@ class YahooIE(InfoExtractor): self._downloader.trouble(u'ERROR: unable to extract video title') return video_title = mobj.group(1).decode('utf-8') - simple_title = simplify_title(video_title) mobj = re.search(r'

(.*)

', webpage) if mobj is None: @@ -978,7 +958,6 @@ class YahooIE(InfoExtractor): 'uploader': video_uploader, 'upload_date': u'NA', 'title': video_title, - 'stitle': simple_title, 'ext': video_extension.decode('utf-8'), 'thumbnail': video_thumbnail.decode('utf-8'), 'description': video_description, @@ -1038,7 +1017,6 @@ class VimeoIE(InfoExtractor): # Extract title video_title = config["video"]["title"] - simple_title = simplify_title(video_title) # Extract uploader video_uploader = config["video"]["owner"]["name"] @@ -1084,7 +1062,6 @@ class VimeoIE(InfoExtractor): 'uploader': video_uploader, 'upload_date': video_upload_date, 'title': video_title, - 'stitle': simple_title, 'ext': video_extension, 'thumbnail': video_thumbnail, 'description': video_description, @@ -1219,8 +1196,6 @@ class GenericIE(InfoExtractor): self._downloader.trouble(u'ERROR: unable to extract title') return video_title = mobj.group(1).decode('utf-8') - video_title = sanitize_title(video_title) - simple_title = simplify_title(video_title) # video uploader is domain name mobj = re.match(r'(?:https?://)?([^/]*)/.*', url) @@ -1235,7 +1210,6 @@ class GenericIE(InfoExtractor): 'uploader': video_uploader, 'upload_date': u'NA', 'title': video_title, - 'stitle': simple_title, 'ext': video_extension.decode('utf-8'), 'format': u'NA', 'player_url': None, @@ -1700,7 +1674,6 @@ class DepositFilesIE(InfoExtractor): 'uploader': u'NA', 'upload_date': u'NA', 'title': file_title, - 'stitle': file_title, 'ext': file_extension.decode('utf-8'), 'format': u'NA', 'player_url': None, @@ -1845,9 +1818,6 @@ class FacebookIE(InfoExtractor): return video_title = video_info['title'] video_title = video_title.decode('utf-8') - video_title = sanitize_title(video_title) - - simple_title = simplify_title(video_title) # thumbnail image if 'thumbnail' not in video_info: @@ -1908,7 +1878,6 @@ class FacebookIE(InfoExtractor): 'uploader': video_uploader.decode('utf-8'), 'upload_date': upload_date, 'title': video_title, - 'stitle': simple_title, 'ext': video_extension.decode('utf-8'), 'format': (format_param is None and u'NA' or format_param.decode('utf-8')), 'thumbnail': video_thumbnail.decode('utf-8'), @@ -1958,7 +1927,6 @@ class BlipTVIE(InfoExtractor): 'id': title, 'url': url, 'title': title, - 'stitle': simplify_title(title), 'ext': ext, 'urlhandle': urlh } @@ -1992,7 +1960,6 @@ class BlipTVIE(InfoExtractor): 'uploader': data['display_name'], 'upload_date': upload_date, 'title': data['title'], - 'stitle': simplify_title(data['title']), 'ext': ext, 'format': data['media']['mimeType'], 'thumbnail': data['thumbnailUrl'], @@ -2054,9 +2021,6 @@ class MyVideoIE(InfoExtractor): return video_title = mobj.group(1) - video_title = sanitize_title(video_title) - - simple_title = simplify_title(video_title) return [{ 'id': video_id, @@ -2064,7 +2028,6 @@ class MyVideoIE(InfoExtractor): 'uploader': u'NA', 'upload_date': u'NA', 'title': video_title, - 'stitle': simple_title, 'ext': u'flv', 'format': u'NA', 'player_url': None, @@ -2191,7 +2154,6 @@ class ComedyCentralIE(InfoExtractor): 'uploader': showId, 'upload_date': officialDate, 'title': effTitle, - 'stitle': simplify_title(effTitle), 'ext': 'mp4', 'format': format, 'thumbnail': None, @@ -2265,7 +2227,6 @@ class EscapistIE(InfoExtractor): 'uploader': showName, 'upload_date': None, 'title': showName, - 'stitle': simplify_title(showName), 'ext': 'flv', 'format': 'flv', 'thumbnail': imgUrl, @@ -2329,7 +2290,6 @@ class CollegeHumorIE(InfoExtractor): videoNode = mdoc.findall('./video')[0] info['description'] = videoNode.findall('./description')[0].text info['title'] = videoNode.findall('./caption')[0].text - info['stitle'] = simplify_title(info['title']) info['url'] = videoNode.findall('./file')[0].text info['thumbnail'] = videoNode.findall('./thumbnail')[0].text info['ext'] = info['url'].rpartition('.')[2] @@ -2403,7 +2363,6 @@ class XVideosIE(InfoExtractor): 'uploader': None, 'upload_date': None, 'title': video_title, - 'stitle': simplify_title(video_title), 'ext': 'flv', 'format': 'flv', 'thumbnail': video_thumbnail, @@ -2447,7 +2406,7 @@ class SoundcloudIE(InfoExtractor): uploader = mobj.group(1).decode('utf-8') # extract simple title (uploader + slug of song title) slug_title = mobj.group(2).decode('utf-8') - simple_title = uploader + '-' + slug_title + simple_title = uploader + u'-' + slug_title self.report_webpage('%s/%s' % (uploader, slug_title)) @@ -2469,7 +2428,9 @@ class SoundcloudIE(InfoExtractor): # extract unsimplified title mobj = re.search('"title":"(.*?)",', webpage) if mobj: - title = mobj.group(1) + title = mobj.group(1).decode('utf-8') + else: + title = simple_title # construct media url (with uid/token) mediaURL = "http://media.soundcloud.com/stream/%s?stream_token=%s" @@ -2498,8 +2459,7 @@ class SoundcloudIE(InfoExtractor): 'url': mediaURL, 'uploader': uploader.decode('utf-8'), 'upload_date': upload_date, - 'title': simple_title.decode('utf-8'), - 'stitle': simple_title.decode('utf-8'), + 'title': title, 'ext': u'mp3', 'format': u'NA', 'player_url': None, @@ -2569,7 +2529,6 @@ class InfoQIE(InfoExtractor): 'uploader': None, 'upload_date': None, 'title': video_title, - 'stitle': simplify_title(video_title), 'ext': extension, 'format': extension, # Extension is always(?) mp4, but seems to be flv 'thumbnail': None, @@ -2685,7 +2644,6 @@ class MixcloudIE(InfoExtractor): 'uploader': uploader.decode('utf-8'), 'upload_date': u'NA', 'title': json_data['name'], - 'stitle': simplify_title(json_data['name']), 'ext': file_url.split('.')[-1].decode('utf-8'), 'format': (format_param is None and u'NA' or format_param.decode('utf-8')), 'thumbnail': json_data['thumbnail_url'], @@ -2717,7 +2675,7 @@ class StanfordOpenClassroomIE(InfoExtractor): course = mobj.group('course') video = mobj.group('video') info = { - 'id': simplify_title(course + '_' + video), + 'id': course + '_' + video, } self.report_extraction(info['id']) @@ -2735,14 +2693,13 @@ class StanfordOpenClassroomIE(InfoExtractor): except IndexError: self._downloader.trouble(u'\nERROR: Invalid metadata XML file') return - info['stitle'] = simplify_title(info['title']) info['ext'] = info['url'].rpartition('.')[2] info['format'] = info['ext'] return [info] elif mobj.group('course'): # A course page course = mobj.group('course') info = { - 'id': simplify_title(course), + 'id': course, 'type': 'playlist', } @@ -2758,7 +2715,6 @@ class StanfordOpenClassroomIE(InfoExtractor): info['title'] = unescapeHTML(m.group(1)) else: info['title'] = info['id'] - info['stitle'] = simplify_title(info['title']) m = re.search('([^<]+)', coursepage) if m: @@ -2792,7 +2748,6 @@ class StanfordOpenClassroomIE(InfoExtractor): return info['title'] = info['id'] - info['stitle'] = simplify_title(info['title']) links = orderedSet(re.findall('', rootpage)) info['list'] = [ @@ -2891,7 +2846,6 @@ class MTVIE(InfoExtractor): 'url': video_url, 'uploader': performer, 'title': video_title, - 'stitle': simplify_title(video_title), 'ext': ext, 'format': format, } diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py index d18073d728..ae30da53e3 100644 --- a/youtube_dl/utils.py +++ b/youtube_dl/utils.py @@ -156,12 +156,6 @@ def clean_html(html): return html -def sanitize_title(utitle): - """Sanitizes a video title so it could be used as part of a filename.""" - utitle = unescapeHTML(utitle) - return utitle.replace(unicode(os.sep), u'%') - - def sanitize_open(filename, open_mode): """Try to open the given filename, and slightly tweak it if this fails. @@ -196,10 +190,14 @@ def timeconvert(timestr): if timetuple is not None: timestamp = email.utils.mktime_tz(timetuple) return timestamp - -def simplify_title(title): - expr = re.compile(ur'[^\w\d_\-]+', flags=re.UNICODE) - return expr.sub(u'_', title).strip(u'_') + +def sanitize_filename(s): + """Sanitizes a string so it could be used as part of a filename.""" + def replace_insane(char): + if char in u' .\\/|?*<>:"' or ord(char) < 32: + return '_' + return char + return u''.join(map(replace_insane, s)).strip('_') def orderedSet(iterable): """ Remove all duplicates from the input iterable """