aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYen Chi Hsuan <yan12125@gmail.com>2015-07-23 14:02:19 +0800
committerYen Chi Hsuan <yan12125@gmail.com>2015-07-23 14:02:19 +0800
commitb73b14f72c8240466b5bded9fb891697549b89ec (patch)
tree45d855c9b92a8d6db31ece885761bd938bbbba00
parent41597d9bed9eaa5e55d5bb572f2ec3f5a312d392 (diff)
[viki] Rewrite dict selection codes
-rw-r--r--youtube_dl/extractor/viki.py35
1 files changed, 16 insertions, 19 deletions
diff --git a/youtube_dl/extractor/viki.py b/youtube_dl/extractor/viki.py
index e987badbd..ddbd395c8 100644
--- a/youtube_dl/extractor/viki.py
+++ b/youtube_dl/extractor/viki.py
@@ -88,6 +88,14 @@ class VikiBaseIE(InfoExtractor):
if not self._token:
self.report_warning('Unable to get session token, login has probably failed')
+ @staticmethod
+ def dict_selection(dict_obj, preferred_key):
+ if preferred_key in dict_obj:
+ return dict_obj.get(preferred_key)
+
+ filtered_dict = list(filter(None, [dict_obj.get(k) for k in dict_obj.keys()]))
+ return filtered_dict[0] if filtered_dict else None
+
class VikiIE(VikiBaseIE):
IE_NAME = 'viki'
@@ -194,23 +202,14 @@ class VikiIE(VikiBaseIE):
video = self._call_api(
'videos/%s.json' % video_id, video_id, 'Downloading video JSON')
- title = None
- titles = video.get('titles')
- if titles:
- title = titles.get('en') or titles[titles.keys()[0]]
+ title = self.dict_selection(video.get('titles', {}), 'en')
if not title:
title = 'Episode %d' % video.get('number') if video.get('type') == 'episode' else video.get('id') or video_id
- container_titles = video.get('container', {}).get('titles')
- if container_titles:
- container_title = container_titles.get('en') or container_titles[container_titles.keys()[0]]
- title = '%s - %s' % (container_title, title)
-
- descriptions = video.get('descriptions', {})
- description = descriptions.get('en')
- if description is None:
- filtered_descriptions = list(filter(None, [descriptions.get(k) for k in titles.keys()]))
- if filtered_descriptions:
- description = filtered_descriptions[0]
+ container_titles = video.get('container', {}).get('titles', {})
+ container_title = self.dict_selection(container_titles, 'en')
+ title = '%s - %s' % (container_title, title)
+
+ description = self.dict_selection(video.get('descriptions', {}), 'en')
duration = int_or_none(video.get('duration'))
timestamp = parse_iso8601(video.get('created_at'))
@@ -316,11 +315,9 @@ class VikiChannelIE(VikiBaseIE):
'containers/%s.json' % channel_id, channel_id,
'Downloading channel JSON')
- titles = channel['titles']
- title = titles.get('en') or titles[titles.keys()[0]]
+ title = self.dict_selection(channel['titles'], 'en')
- descriptions = channel['descriptions']
- description = descriptions.get('en') or descriptions[descriptions.keys()[0]]
+ description = self.dict_selection(channel['descriptions'], 'en')
entries = []
for video_type in ('episodes', 'clips', 'movies'):