[youtube] Fix extraction.
[youtube-dl] / youtube_dl / extractor / eroprofile.py
index f6745fc52cd79eb36a6d786e9ffa971b196b85d3..c08643a17cb99a92dd508201ad5c1ca69fd863ad 100644 (file)
@@ -3,51 +3,93 @@ from __future__ import unicode_literals
 import re
 
 from .common import InfoExtractor
+from ..compat import compat_urllib_parse_urlencode
+from ..utils import (
+    ExtractorError,
+    unescapeHTML
+)
+
 
 class EroProfileIE(InfoExtractor):
-    _VALID_URL = r'https?://(?:www\.)?eroprofile\.com/m/videos/view/(?P<display_id>[^/]+)'
-    _TEST = {
+    _VALID_URL = r'https?://(?:www\.)?eroprofile\.com/m/videos/view/(?P<id>[^/]+)'
+    _LOGIN_URL = 'http://www.eroprofile.com/auth/auth.php?'
+    _NETRC_MACHINE = 'eroprofile'
+    _TESTS = [{
         'url': 'http://www.eroprofile.com/m/videos/view/sexy-babe-softcore',
         'md5': 'c26f351332edf23e1ea28ce9ec9de32f',
         'info_dict': {
             'id': '3733775',
+            'display_id': 'sexy-babe-softcore',
             'ext': 'm4v',
-            'title': 'HD MOVIES - sexy babe softcore',
-            'description': 'md5:831ee50526c333eb4f6c1e58d382c295',
-            'categories': list,  # NSFW
-            'thumbnail': 're:https?://.*\.jpg',
+            'title': 'sexy babe softcore',
+            'thumbnail': r're:https?://.*\.jpg',
             'age_limit': 18,
         }
-    }
+    }, {
+        'url': 'http://www.eroprofile.com/m/videos/view/Try-It-On-Pee_cut_2-wmv-4shared-com-file-sharing-download-movie-file',
+        'md5': '1baa9602ede46ce904c431f5418d8916',
+        'info_dict': {
+            'id': '1133519',
+            'ext': 'm4v',
+            'title': 'Try It On Pee_cut_2.wmv - 4shared.com - file sharing - download movie file',
+            'thumbnail': r're:https?://.*\.jpg',
+            'age_limit': 18,
+        },
+        'skip': 'Requires login',
+    }]
 
-    def _real_extract(self, url):
-        webpage = self._download_webpage(url, 'main')
+    def _login(self):
+        (username, password) = self._get_login_info()
+        if username is None:
+            return
 
-        video_id = self._html_search_regex(r'glbUpdViews\s*\(\'\d*\',\'(\d+)\'', webpage, 'id')
+        query = compat_urllib_parse_urlencode({
+            'username': username,
+            'password': password,
+            'url': 'http://www.eroprofile.com/',
+        })
+        login_url = self._LOGIN_URL + query
+        login_page = self._download_webpage(login_url, None, False)
 
-        video_url = self._html_search_regex(r'<source src="([^"]+)', webpage, 'video_url')
+        m = re.search(r'Your username or password was incorrect\.', login_page)
+        if m:
+            raise ExtractorError(
+                'Wrong username and/or password.', expected=True)
 
-        title = self._html_search_regex(
-            r'<title>([^<]+)\s*-\s*EroProfile</title>', webpage, 'title')
+        self.report_login()
+        redirect_url = self._search_regex(
+            r'<script[^>]+?src="([^"]+)"', login_page, 'login redirect url')
+        self._download_webpage(redirect_url, None, False)
 
-        description = self._html_search_meta('description', webpage, 'description', fatal=False)
+    def _real_initialize(self):
+        self._login()
 
-        thumbnail = self._html_search_regex(
-          r'onclick="showVideoPlayer\(\)"><img src="([^"]+)', webpage, 'thumbnail', fatal=False)
+    def _real_extract(self, url):
+        display_id = self._match_id(url)
+
+        webpage = self._download_webpage(url, display_id)
+
+        m = re.search(r'You must be logged in to view this video\.', webpage)
+        if m:
+            self.raise_login_required('This video requires login')
 
-        categories_str = self._html_search_meta(
-            'keywords', webpage, 'categories', fatal=False)
-        categories = (
-            None if categories_str is None
-            else categories_str.split(','))
+        video_id = self._search_regex(
+            [r"glbUpdViews\s*\('\d*','(\d+)'", r'p/report/video/(\d+)'],
+            webpage, 'video id', default=None)
+
+        video_url = unescapeHTML(self._search_regex(
+            r'<source src="([^"]+)', webpage, 'video url'))
+        title = self._html_search_regex(
+            r'Title:</th><td>([^<]+)</td>', webpage, 'title')
+        thumbnail = self._search_regex(
+            r'onclick="showVideoPlayer\(\)"><img src="([^"]+)',
+            webpage, 'thumbnail', fatal=False)
 
         return {
             'id': video_id,
+            'display_id': display_id,
             'url': video_url,
             'title': title,
-            'ext': 'm4v',
-            'description': description,
             'thumbnail': thumbnail,
-            'categories': categories,
             'age_limit': 18,
         }