Allow changes to run under Python 3
authorPhilipp Hagemeister <phihag@phihag.de>
Wed, 28 Aug 2013 12:28:55 +0000 (14:28 +0200)
committerPhilipp Hagemeister <phihag@phihag.de>
Wed, 28 Aug 2013 12:34:49 +0000 (14:34 +0200)
youtube_dl/aes.py
youtube_dl/extractor/youporn.py
youtube_dl/utils.py

index 2fa9238e32daa8d39d3061af87acfd4bba001e25..278f8bb8264947f0ae47de942d693a1c996ad78f 100644 (file)
@@ -3,6 +3,8 @@ __all__ = ['aes_encrypt', 'key_expansion', 'aes_ctr_decrypt', 'aes_decrypt_text'
 import base64
 from math import ceil
 
+from .utils import bytes_to_intlist
+
 BLOCK_SIZE_BYTES = 16
 
 def aes_ctr_decrypt(data, key, counter):
@@ -16,7 +18,7 @@ def aes_ctr_decrypt(data, key, counter):
     @returns {int[]}           decrypted data
     """
     expanded_key = key_expansion(key)
-    block_count = int(ceil(float(len(data)) / BLOCK_SIZE_BYTES))
+    block_count = int(ceil(float(len(data)) // BLOCK_SIZE_BYTES))
     
     decrypted_data=[]
     for i in range(block_count):
@@ -40,7 +42,7 @@ def key_expansion(data):
     data = data[:] # copy
     rcon_iteration = 1
     key_size_bytes = len(data)
-    expanded_key_size_bytes = (key_size_bytes/4 + 7) * BLOCK_SIZE_BYTES
+    expanded_key_size_bytes = (key_size_bytes // 4 + 7) * BLOCK_SIZE_BYTES
     
     while len(data) < expanded_key_size_bytes:
         temp = data[-4:]
@@ -72,7 +74,7 @@ def aes_encrypt(data, expanded_key):
     @param {int[]} expanded_key  176/208/240-Byte expanded key 
     @returns {int[]}             16-Byte cipher
     """
-    rounds = len(expanded_key) / BLOCK_SIZE_BYTES - 1
+    rounds = len(expanded_key) // BLOCK_SIZE_BYTES - 1
     
     data = xor(data, expanded_key[:BLOCK_SIZE_BYTES])
     for i in range(1, rounds+1):
@@ -99,11 +101,11 @@ def aes_decrypt_text(data, password, key_size_bytes):
     """
     NONCE_LENGTH_BYTES = 8
     
-    data = map(lambda c: ord(c), base64.b64decode(data))
-    password = map(lambda c: ord(c), password.encode('utf-8'))
+    data = bytes_to_intlist(base64.b64decode(data))
+    password = bytes_to_intlist(password.encode('utf-8'))
     
     key = password[:key_size_bytes] + [0]*(key_size_bytes - len(password))
-    key = aes_encrypt(key[:BLOCK_SIZE_BYTES], key_expansion(key)) * (key_size_bytes / BLOCK_SIZE_BYTES)
+    key = aes_encrypt(key[:BLOCK_SIZE_BYTES], key_expansion(key)) * (key_size_bytes // BLOCK_SIZE_BYTES)
     
     nonce = data[:NONCE_LENGTH_BYTES]
     cipher = data[NONCE_LENGTH_BYTES:]
@@ -143,7 +145,7 @@ MIX_COLUMN_MATRIX = ((2,3,1,1),
                      (3,1,1,2))
 
 def sub_bytes(data):
-    return map(lambda x: SBOX[x], data)
+    return [SBOX[x] for x in data]
 
 def rotate(data):
     return data[1:] + [data[0]]
@@ -156,7 +158,7 @@ def key_schedule_core(data, rcon_iteration):
     return data
 
 def xor(data1, data2):
-    return map(lambda (x,y): x^y, zip(data1, data2))
+    return [x^y for x, y in zip(data1, data2)]
 
 def mix_column(data):
     data_mixed = []
index cc9c3702746e23366d31777f4842700b99dc36bc..19360e2734778529cd8033c37c585a1ae4353d6d 100644 (file)
@@ -5,6 +5,7 @@ import sys
 
 from .common import InfoExtractor
 from ..utils import (
+    compat_str,
     compat_urllib_parse_urlparse,
     compat_urllib_request,
 
@@ -79,13 +80,16 @@ class YouPornIE(InfoExtractor):
         links = re.findall(LINK_RE, download_list_html)
         
         # Get link of hd video
-        encrypted_video_url = self._html_search_regex(r'var encryptedURL = \'(?P<encrypted_video_url>[a-zA-Z0-9+/]+={0,2})\';',
+        encrypted_video_url = self._html_search_regex(
+            r'var encrypted(?:Quality[0-9]+)?URL = \'(?P<encrypted_video_url>[a-zA-Z0-9+/]+={0,2})\';',
             webpage, u'encrypted_video_url')
-        video_url = unicode( aes_decrypt_text(encrypted_video_url, video_title, 32), 'utf-8')
+        video_url = aes_decrypt_text(encrypted_video_url, video_title, 32)
+        print(video_url)
+        assert isinstance(video_url, compat_str)
         if video_url.split('/')[6].split('_')[0] == u'720p': # only add if 720p to avoid duplicates
             links = [video_url] + links
         
-        if(len(links) == 0):
+        if not links:
             raise ExtractorError(u'ERROR: no known formats available for video')
 
         self.to_screen(u'Links found: %d' % len(links))
@@ -122,7 +126,7 @@ class YouPornIE(InfoExtractor):
             self._print_formats(formats)
             return
 
-        req_format = self._downloader.params.get('format', None)
+        req_format = self._downloader.params.get('format', 'best')
         self.to_screen(u'Format: %s' % req_format)
 
         if req_format is None or req_format == 'best':
index 59eeaf4a89084783e1ca2607840b3b7dfc4670f5..07b40da6c138cd000e6a4c885cce4fe75af21c9c 100644 (file)
@@ -708,3 +708,13 @@ class DateRange(object):
         return self.start <= date <= self.end
     def __str__(self):
         return '%s - %s' % ( self.start.isoformat(), self.end.isoformat())
+
+
+def bytes_to_intlist(bs):
+    if not bs:
+        return []
+    if isinstance(bs[0], int):  # Python 3
+        return list(bs)
+    else:
+        return [ord(c) for c in bs]
+