From e1e35d1ac66ab99202e8265ac811906de2aa87dd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sergey=20M=E2=80=A4?= <dstftw@gmail.com>
Date: Wed, 22 Mar 2017 01:59:27 +0700
Subject: [PATCH] [pornhub] Improve extraction and style (closes #12515)

---
 youtube_dl/extractor/pornhub.py | 35 ++++++++++++++-------------------
 1 file 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)