+ json_data = self._download_json(request, video_id=presumptive_id)
+
+ if 'Post' in json_data:
+ data = json_data['Post']
+ else:
+ data = json_data
+
+ video_id = compat_str(data['item_id'])
+ upload_date = datetime.datetime.strptime(data['datestamp'], '%m-%d-%y %H:%M%p').strftime('%Y%m%d')
+ subtitles = {}
+ formats = []
+ if 'additionalMedia' in data:
+ for f in data['additionalMedia']:
+ if f.get('file_type_srt') == 1:
+ LANGS = {
+ 'english': 'en',
+ }
+ lang = f['role'].rpartition('-')[-1].strip().lower()
+ langcode = LANGS.get(lang, lang)
+ subtitles[langcode] = f['url']
+ continue
+ if not int(f['media_width']): # filter m3u8
+ continue
+ formats.append({
+ 'url': f['url'],
+ 'format_id': f['role'],
+ 'width': int(f['media_width']),
+ 'height': int(f['media_height']),
+ })
+ else:
+ formats.append({
+ 'url': data['media']['url'],
+ 'width': int(data['media']['width']),
+ 'height': int(data['media']['height']),
+ })
+ self._sort_formats(formats)
+
+ # subtitles
+ video_subtitles = self.extract_subtitles(video_id, subtitles)
+ if self._downloader.params.get('listsubtitles', False):
+ self._list_available_subtitles(video_id, subtitles)
+ return
+
+ return {
+ 'id': video_id,
+ 'uploader': data['display_name'],
+ 'upload_date': upload_date,
+ 'title': data['title'],
+ 'thumbnail': data['thumbnailUrl'],
+ 'description': data['description'],
+ 'user_agent': 'iTunes/10.6.1',
+ 'formats': formats,
+ 'subtitles': video_subtitles,
+ }
+
+ def _download_subtitle_url(self, sub_lang, url):
+ # For some weird reason, blip.tv serves a video instead of subtitles
+ # when we request with a common UA
+ req = compat_urllib_request.Request(url)
+ req.add_header('Youtubedl-user-agent', 'youtube-dl')
+ return self._download_webpage(req, None, note=False)