[americastestkitchen] Add support for downloading entire seasons (#27861)

pull/25296/merge
Brian Marks 4 years ago committed by GitHub
parent 62acf5fa2c
commit 657221c81d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,6 +1,7 @@
# coding: utf-8 # coding: utf-8
from __future__ import unicode_literals from __future__ import unicode_literals
import json
import re import re
from .common import InfoExtractor from .common import InfoExtractor
@ -90,3 +91,69 @@ class AmericasTestKitchenIE(InfoExtractor):
'series': try_get(episode, lambda x: x['show']['title']), 'series': try_get(episode, lambda x: x['show']['title']),
'episode': episode.get('title'), 'episode': episode.get('title'),
} }
class AmericasTestKitchenSeasonIE(InfoExtractor):
_VALID_URL = r'https?://(?:www\.)?(?P<show>americastestkitchen|cookscountry)\.com/episodes/browse/season_(?P<id>\d+)'
_TESTS = [{
# ATK Season
'url': 'https://www.americastestkitchen.com/episodes/browse/season_1',
'info_dict': {
'id': 'season-1',
'title': 'Season 1',
},
'playlist_count': 13,
}, {
# Cooks Country Season
'url': 'https://www.cookscountry.com/episodes/browse/season_12',
'info_dict': {
'id': 'season-12',
'title': 'Season 12',
},
'playlist_count': 13,
}, {
# Multi-digit season
'url': 'https://www.americastestkitchen.com/episodes/browse/season_20',
'only_matching': True,
}]
def _real_extract(self, url):
show_name, season = re.match(self._VALID_URL, url).groups()
slug = 'atk' if show_name == 'americastestkitchen' else 'cco'
filters = [
'search_season_list:Season %s' % season,
'search_document_klass:episode',
'search_show_slug:%s' % slug,
]
season_search = self._download_json(
'https://y1fnzxui30-dsn.algolia.net/1/indexes/everest_search_atk_season_desc_production',
season, headers={
'Origin': 'https://www.%s.com' % show_name,
'X-Algolia-API-Key': '8d504d0099ed27c1b73708d22871d805',
'X-Algolia-Application-Id': 'Y1FNZXUI30',
}, query={
'facetFilters': json.dumps(filters),
'attributesToRetrieve': 'search_url',
'attributesToHighlight': '',
# ATK and CCO generally have less than 26 episodes per season
'hitsPerPage': '100',
})
entries = [
self.url_result(
'https://www.%s.com%s' % (show_name, episode['search_url']),
'AmericasTestKitchen',
try_get(episode, lambda e: e['objectID'].split('_')[-1]))
for episode in season_search['hits']
if 'search_url' in episode and episode['search_url']
]
return {
'_type': 'playlist',
'id': 'season-%s' % season,
'title': 'Season %s' % season,
'entries': sorted(entries, key=lambda e: e.get('id')),
}

@ -42,7 +42,10 @@ from .aljazeera import AlJazeeraIE
from .alphaporno import AlphaPornoIE from .alphaporno import AlphaPornoIE
from .amara import AmaraIE from .amara import AmaraIE
from .amcnetworks import AMCNetworksIE from .amcnetworks import AMCNetworksIE
from .americastestkitchen import AmericasTestKitchenIE from .americastestkitchen import (
AmericasTestKitchenIE,
AmericasTestKitchenSeasonIE,
)
from .animeondemand import AnimeOnDemandIE from .animeondemand import AnimeOnDemandIE
from .anvato import AnvatoIE from .anvato import AnvatoIE
from .aol import AolIE from .aol import AolIE

Loading…
Cancel
Save