]> jfr.im git - yt-dlp.git/blame - youtube_dl/extractor/howcast.py
release 2013.11.02
[yt-dlp.git] / youtube_dl / extractor / howcast.py
CommitLineData
e17d368a
PH
1import re
2
3from .common import InfoExtractor
4
5
6class HowcastIE(InfoExtractor):
7 _VALID_URL = r'(?:https?://)?(?:www\.)?howcast\.com/videos/(?P<id>\d+)'
6f5ac90c
PH
8 _TEST = {
9 u'url': u'http://www.howcast.com/videos/390161-How-to-Tie-a-Square-Knot-Properly',
10 u'file': u'390161.mp4',
11 u'md5': u'1d7ba54e2c9d7dc6935ef39e00529138',
12 u'info_dict': {
13 u"description": u"The square knot, also known as the reef knot, is one of the oldest, most basic knots to tie, and can be used in many different ways. Here's the proper way to tie a square knot.",
14 u"title": u"How to Tie a Square Knot Properly"
15 }
16 }
e17d368a
PH
17
18 def _real_extract(self, url):
19 mobj = re.match(self._VALID_URL, url)
20
21 video_id = mobj.group('id')
6a2449df 22 webpage = self._download_webpage(url, video_id)
e17d368a
PH
23
24 self.report_extraction(video_id)
25
26 video_url = self._search_regex(r'\'?file\'?: "(http://mobile-media\.howcast\.com/[0-9]+\.mp4)',
27 webpage, u'video URL')
28
29 video_title = self._html_search_regex(r'<meta content=(?:"([^"]+)"|\'([^\']+)\') property=\'og:title\'',
30 webpage, u'title')
31
32 video_description = self._html_search_regex(r'<meta content=(?:"([^"]+)"|\'([^\']+)\') name=\'description\'',
33 webpage, u'description', fatal=False)
34
35 thumbnail = self._html_search_regex(r'<meta content=\'(.+?)\' property=\'og:image\'',
36 webpage, u'thumbnail', fatal=False)
37
38 return [{
39 'id': video_id,
40 'url': video_url,
41 'ext': 'mp4',
42 'title': video_title,
43 'description': video_description,
44 'thumbnail': thumbnail,
45 }]