aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Weber <dan.b.weber@me.com>2017-09-12 22:52:54 -0400
committerSergey M․ <dstftw@gmail.com>2017-09-23 06:29:07 +0700
commit13de91c9e92bd831fee38fddbdabce7f6e82ef91 (patch)
treeb2ff1683aef607914b4ecb2e9c27cf47680177df
parent9ce1ac404648142139f8b231c674d434ad4f9ffe (diff)
downloadyoutube-dl-13de91c9e92bd831fee38fddbdabce7f6e82ef91.tar.xz
[americastestkitchen] Add extractor (closes #10764)
-rwxr-xr-xyoutube_dl/extractor/americastestkitchen.py85
-rw-r--r--youtube_dl/extractor/extractors.py1
2 files changed, 86 insertions, 0 deletions
diff --git a/youtube_dl/extractor/americastestkitchen.py b/youtube_dl/extractor/americastestkitchen.py
new file mode 100755
index 000000000..f231e7f6e
--- /dev/null
+++ b/youtube_dl/extractor/americastestkitchen.py
@@ -0,0 +1,85 @@
+# coding: utf-8
+from __future__ import unicode_literals
+
+import re
+
+from .common import InfoExtractor
+
+
+class AmericasTestKitchenIE(InfoExtractor):
+ _VALID_URL = r'https?://(?:www\.)?americastestkitchen\.com/episode/(?P<id>\d+)'
+ _TESTS = [{
+ 'url':
+ 'https://www.americastestkitchen.com/episode/548-summer-dinner-party',
+ 'md5': 'b861c3e365ac38ad319cfd509c30577f',
+ 'info_dict': {
+ 'id': '1_5g5zua6e',
+ 'title': 'atk_s17_e24.mp4',
+ 'ext': 'mp4',
+ 'description': '<p>Host Julia Collin Davison goes into the test kitchen with test cook Dan Souza to learn how to make the ultimate Grill-Roasted Beef Tenderloin. Next, equipment expert Adam Ried reviews gas grills in the Equipment Corner. Then, gadget guru Lisa McManus uncovers the best quirky gadgets. Finally, test cook Erin McMurrer shows host Bridget Lancaster how to make an elegant Pear-Walnut Upside-Down Cake.</p>',
+ 'timestamp': 1497285541,
+ 'upload_date': '20170612',
+ 'uploader_id': 'roger.metcalf@americastestkitchen.com',
+ 'release_date': '2017-06-17',
+ 'thumbnail': 'http://d3cizcpymoenau.cloudfront.net/images/35973/e24-tenderloin-16.jpg',
+ 'episode_number': 24,
+ 'episode': 'Summer Dinner Party',
+ 'episode_id': '548-summer-dinner-party',
+ 'season_number': 17
+ },
+ 'params': {
+ # m3u8 download
+ 'skip_download': True,
+ },
+ }, {
+ 'url':
+ 'https://www.americastestkitchen.com/episode/546-a-spanish-affair',
+ 'only_matching':
+ True,
+ }]
+
+ def _real_extract(self, url):
+ video_id = self._match_id(url)
+ webpage = self._download_webpage(url, video_id)
+
+ partner_id = self._search_regex(
+ r'partner_id/(?P<partner_id>\d+)',
+ webpage,
+ 'partner_id',
+ group='partner_id')
+
+ video_data = self._parse_json(
+ self._search_regex(
+ r'window\.__INITIAL_STATE__\s*=\s*({.+?});\s*</script>',
+ webpage, 'initial context'),
+ video_id)
+
+ episode_data = video_data['episodeDetail']['content']['data']
+ episode_content_meta = episode_data['full_video']
+ external_id = episode_content_meta['external_id']
+
+ # photo data
+ photo_data = episode_content_meta.get('photo')
+ thumbnail = photo_data.get('image_url') if photo_data else None
+
+ # meta
+ release_date = episode_data.get('aired_at')
+ description = episode_content_meta.get('description')
+ episode_number = int(episode_content_meta.get('episode_number'))
+ episode = episode_content_meta.get('title')
+ episode_id = episode_content_meta.get('episode_slug')
+ season_number = int(episode_content_meta.get('season_number'))
+
+ return {
+ '_type': 'url_transparent',
+ 'url': 'kaltura:%s:%s' % (partner_id, external_id),
+ 'ie_key': 'Kaltura',
+ 'id': video_id,
+ 'release_date': release_date,
+ 'thumbnail': thumbnail,
+ 'description': description,
+ 'episode_number': episode_number,
+ 'episode': episode,
+ 'episode_id': episode_id,
+ 'season_number': season_number
+ }
diff --git a/youtube_dl/extractor/extractors.py b/youtube_dl/extractor/extractors.py
index ab95c8575..585300500 100644
--- a/youtube_dl/extractor/extractors.py
+++ b/youtube_dl/extractor/extractors.py
@@ -39,6 +39,7 @@ from .airmozilla import AirMozillaIE
from .aljazeera import AlJazeeraIE
from .alphaporno import AlphaPornoIE
from .amcnetworks import AMCNetworksIE
+from .americastestkitchen import AmericasTestKitchenIE
from .animeondemand import AnimeOnDemandIE
from .anitube import AnitubeIE
from .anvato import AnvatoIE