- items_json = self._search_regex(r'YVIDEO_INIT_ITEMS = ({.*?});$',
- webpage, u'items', flags=re.MULTILINE)
- items = json.loads(items_json)
- info = items['mediaItems']['query']['results']['mediaObj'][0]
+ items_json = self._search_regex(
+ r'mediaItems: ({.*?})$', webpage, 'items', flags=re.MULTILINE,
+ default=None)
+ if items_json is None:
+ CONTENT_ID_REGEXES = [
+ r'YUI\.namespace\("Media"\)\.CONTENT_ID\s*=\s*"([^"]+)"',
+ r'root\.App\.Cache\.context\.videoCache\.curVideo = \{"([^"]+)"'
+ ]
+ long_id = self._search_regex(CONTENT_ID_REGEXES, webpage, 'content ID')
+ video_id = long_id
+ else:
+ items = json.loads(items_json)
+ info = items['mediaItems']['query']['results']['mediaObj'][0]
+ # The 'meta' field is not always in the video webpage, we request it
+ # from another page
+ long_id = info['id']
+ return self._get_info(long_id, video_id, webpage)
+
+ def _get_info(self, long_id, video_id, webpage):
+ query = ('SELECT * FROM yahoo.media.video.streams WHERE id="%s"'
+ ' AND plrs="86Gj0vCaSzV_Iuf6hNylf2" AND region="US"'
+ ' AND protocol="http"' % long_id)
+ data = compat_urllib_parse.urlencode({
+ 'q': query,
+ 'env': 'prod',
+ 'format': 'json',
+ })
+ query_result = self._download_json(
+ 'http://video.query.yahoo.com/v1/public/yql?' + data,
+ video_id, 'Downloading video info')
+ info = query_result['query']['results']['mediaObj'][0]