aboutsummaryrefslogtreecommitdiff
path: root/youtube_dl/extractor
diff options
context:
space:
mode:
authorremitamine <remitamine@gmail.com>2015-06-26 18:25:43 +0100
committerremitamine <remitamine@gmail.com>2015-06-26 18:25:43 +0100
commit03339b7b5bb8f563eace8826512e2f7a4baba415 (patch)
treee2d3afe26ccee4ca97f46384991f233e15f4eef6 /youtube_dl/extractor
parent255f5694aabe07fa7f33978c6b97ced469e172db (diff)
[snagfilms] Add new extractor
Diffstat (limited to 'youtube_dl/extractor')
-rw-r--r--youtube_dl/extractor/__init__.py1
-rw-r--r--youtube_dl/extractor/snagfilms.py67
2 files changed, 68 insertions, 0 deletions
diff --git a/youtube_dl/extractor/__init__.py b/youtube_dl/extractor/__init__.py
index dc1a302e6..3b906b880 100644
--- a/youtube_dl/extractor/__init__.py
+++ b/youtube_dl/extractor/__init__.py
@@ -492,6 +492,7 @@ from .smotri import (
SmotriUserIE,
SmotriBroadcastIE,
)
+from .snagfilms import SnagFilmsIE
from .snotr import SnotrIE
from .sohu import SohuIE
from .soompi import (
diff --git a/youtube_dl/extractor/snagfilms.py b/youtube_dl/extractor/snagfilms.py
new file mode 100644
index 000000000..33832855f
--- /dev/null
+++ b/youtube_dl/extractor/snagfilms.py
@@ -0,0 +1,67 @@
+from .common import InfoExtractor
+from ..utils import js_to_json
+from re import DOTALL
+
+class SnagFilmsIE(InfoExtractor):
+ _VALID_URL = r'(?:https?://)?(?:www.)?snagfilms\.com/films/title/(?P<display_id>.+?)(?:/|$)'
+ _TEST = {
+ 'url': 'http://www.snagfilms.com/films/title/lost_for_life',
+ 'info_dict':
+ {
+ 'id': '0000014c-de2f-d5d6-abcf-ffef58af0017',
+ 'display_id': 'lost_for_life',
+ 'ext': 'mp4',
+ 'title': 'Lost for Life',
+ 'duration': 4489,
+ 'description': 'In the United States, more than 2500 individuals are serving life-without-parole sentences for crimes they committed when they were seventeen years old or younger. Children as young as thirteen are among the thousands serving these sentences. Directed by Joshua Rof&eacute; (who spent four intensive years on the project), LOST FOR LIFE tells the stories of these individuals, their families and the families of juvenile murder victims. This searingly powerful documentary tackles this contentious issue from multiple perspectives and explores the complexity of the lives of those affected. What is justice when a kid kills? Can a horrific act place a life beyond redemption? Could you forgive?<br />',
+ 'categories': ['Documentary','Crime','Award Winning','Festivals']
+ }
+ }
+
+ def _real_extract(self, url):
+ display_id = self._search_regex(
+ self._VALID_URL,
+ url,
+ 'display_id',
+ group='display_id'
+ )
+ webpage = self._download_webpage(url, display_id)
+
+ json_data = self._parse_json(self._html_search_regex(
+ r'"data":{"film":(?P<data>{.*?}})}',
+ webpage,
+ 'data',
+ group='data'
+ ), display_id)
+ title = json_data['title']
+ video_id = json_data['id']
+ duration = int(json_data['duration'])
+ description = json_data['synopsis']
+ categories = [category['title'] for category in json_data['categories']]
+
+ embed_webpage = self._download_webpage('http://www.snagfilms.com/embed/player?filmId=' + video_id, video_id)
+ sources = self._parse_json(js_to_json(self._html_search_regex(
+ r'sources: (?P<sources>\[.*?\])',
+ embed_webpage,
+ 'sources',
+ group='sources',
+ flags=DOTALL
+ )), video_id)
+
+ formats = []
+ for source in sources:
+ if source['type'] == 'm3u8':
+ formats.extend(self._extract_m3u8_formats(source['file'], video_id))
+ else:
+ formats.append({'url': source['file'],'ext': source['type'], 'resolution': source['label']})
+ self._sort_formats(formats)
+
+ return {
+ 'id': video_id,
+ 'display_id': display_id,
+ 'title': title,
+ 'duration': duration,
+ 'description': description,
+ 'categories': categories,
+ 'formats': formats,
+ }