diff options
| author | Sergey M․ <dstftw@gmail.com> | 2017-03-22 01:59:27 +0700 | 
|---|---|---|
| committer | Sergey M․ <dstftw@gmail.com> | 2017-03-22 01:59:27 +0700 | 
| commit | e1e35d1ac66ab99202e8265ac811906de2aa87dd (patch) | |
| tree | 41b05849fdc68262e645e558158724ead08c0c8e | |
| parent | 21fbf0f955f584ad2d02608850a69a2fd74b65a6 (diff) | |
[pornhub] Improve extraction and style (closes #12515)
| -rw-r--r-- | youtube_dl/extractor/pornhub.py | 35 | 
1 files changed, 15 insertions, 20 deletions
| diff --git a/youtube_dl/extractor/pornhub.py b/youtube_dl/extractor/pornhub.py index eb316ad14..b25f1f193 100644 --- a/youtube_dl/extractor/pornhub.py +++ b/youtube_dl/extractor/pornhub.py @@ -20,6 +20,7 @@ from ..utils import (      js_to_json,      orderedSet,      # sanitized_Request, +    remove_quotes,      str_to_int,  )  # from ..aes import ( @@ -131,38 +132,32 @@ class PornHubIE(InfoExtractor):          tv_webpage = dl_webpage('tv') -        encoded_url = self._search_regex(r'(var.*mediastring.*)</script>', -            tv_webpage, 'encoded url') -        assignments = encoded_url.split(";") +        assignments = self._search_regex( +            r'(var.+?mediastring.+?)</script>', tv_webpage, +            'encoded url').split(';') +          js_vars = {}          def parse_js_value(inp): -            inp = re.sub(r'/\*[^*]*\*/', "", inp) - -            if "+" in inp: -                inps = inp.split("+") -                return functools.reduce(operator.concat, map(parse_js_value, inps)) - +            inp = re.sub(r'/\*(?:(?!\*/).)*?\*/', '', inp) +            if '+' in inp: +                inps = inp.split('+') +                return functools.reduce( +                    operator.concat, map(parse_js_value, inps))              inp = inp.strip()              if inp in js_vars:                  return js_vars[inp] - -            # Hope it's a string! -            assert inp.startswith('"') and inp.endswith('"') -            return inp[1:-1] +            return remove_quotes(inp)          for assn in assignments:              assn = assn.strip() -            if len(assn) == 0: +            if not assn:                  continue - -            assert assn.startswith("var ") -            assn = assn[4:] -            vname, value = assn.split("=", 1) - +            assn = re.sub(r'var\s+', '', assn) +            vname, value = assn.split('=', 1)              js_vars[vname] = parse_js_value(value) -        video_url = js_vars["mediastring"] +        video_url = js_vars['mediastring']          title = self._search_regex(              r'<h1>([^>]+)</h1>', tv_webpage, 'title', default=None) | 
