1
0
Fork 0
mirror of https://gitlab.com/dstftw/youtube-dl.git synced 2020-11-16 09:42:26 +00:00

[nbc] switch to graphql api(closes #18581)(closes #22693)(closes #22701)

This commit is contained in:
Remita Amine 2019-10-14 18:36:25 +01:00
parent c317b6163b
commit 311ee45731

View file

@ -10,7 +10,6 @@ from .adobepass import AdobePassIE
from ..compat import compat_urllib_parse_unquote from ..compat import compat_urllib_parse_unquote
from ..utils import ( from ..utils import (
smuggle_url, smuggle_url,
try_get,
update_url_query, update_url_query,
int_or_none, int_or_none,
) )
@ -85,27 +84,41 @@ class NBCIE(AdobePassIE):
permalink, video_id = re.match(self._VALID_URL, url).groups() permalink, video_id = re.match(self._VALID_URL, url).groups()
permalink = 'http' + compat_urllib_parse_unquote(permalink) permalink = 'http' + compat_urllib_parse_unquote(permalink)
response = self._download_json( response = self._download_json(
'https://api.nbc.com/v3/videos', video_id, query={ 'https://friendship.nbc.co/v2/graphql', video_id, query={
'filter[permalink]': permalink, 'query': '''{
'fields[videos]': 'description,entitlement,episodeNumber,guid,keywords,seasonNumber,title,vChipRating', page(name: "%s", platform: web, type: VIDEO, userId: "0") {
'fields[shows]': 'shortTitle', data {
'include': 'show.shortTitle', ... on VideoPageData {
description
episodeNumber
keywords
locked
mpxAccountId
mpxGuid
rating
seasonNumber
secondaryTitle
seriesShortTitle
}
}
}
}''' % permalink,
}) })
video_data = response['data'][0]['attributes'] video_data = response['data']['page']['data']
query = { query = {
'mbr': 'true', 'mbr': 'true',
'manifest': 'm3u', 'manifest': 'm3u',
} }
video_id = video_data['guid'] video_id = video_data['mpxGuid']
title = video_data['title'] title = video_data['secondaryTitle']
if video_data.get('entitlement') == 'auth': if video_data.get('locked'):
resource = self._get_mvpd_resource( resource = self._get_mvpd_resource(
'nbcentertainment', title, video_id, 'nbcentertainment', title, video_id,
video_data.get('vChipRating')) video_data.get('rating'))
query['auth'] = self._extract_mvpd_auth( query['auth'] = self._extract_mvpd_auth(
url, video_id, 'nbcentertainment', resource) url, video_id, 'nbcentertainment', resource)
theplatform_url = smuggle_url(update_url_query( theplatform_url = smuggle_url(update_url_query(
'http://link.theplatform.com/s/NnzsPC/media/guid/2410887629/' + video_id, 'http://link.theplatform.com/s/NnzsPC/media/guid/%s/%s' % (video_data.get('mpxAccountId') or '2410887629', video_id),
query), {'force_smil_url': True}) query), {'force_smil_url': True})
return { return {
'_type': 'url_transparent', '_type': 'url_transparent',
@ -117,7 +130,7 @@ class NBCIE(AdobePassIE):
'season_number': int_or_none(video_data.get('seasonNumber')), 'season_number': int_or_none(video_data.get('seasonNumber')),
'episode_number': int_or_none(video_data.get('episodeNumber')), 'episode_number': int_or_none(video_data.get('episodeNumber')),
'episode': title, 'episode': title,
'series': try_get(response, lambda x: x['included'][0]['attributes']['shortTitle']), 'series': video_data.get('seriesShortTitle'),
'ie_key': 'ThePlatform', 'ie_key': 'ThePlatform',
} }