@super_berny
Hoy por hoy no haría falta la librería con eso pero la librería hace lo que debe, extraer todo el script. Estoy jugando con el texto ofuscado y, en apariencia, podemos crear una librería con pocas líneas. Ahora mismo estoy intentando buscar un algoritmo que se trague las representaciones de uno y dos bits y lo que sería en python "false"[n], "true"[n] y "[object Object]"[n] (no se si se me olvida alguno) para sacar los caracteres que puedan introducir con ese método como son los caractes "l", "o", "t" y "u" que vemos en la librería jjdecode. Las representaciones de 3 y 4 bits no debería tener ninguna complicación.
Te pego el archivo que uso de openload para trajinar para que lo veas más claro, que, aunque pueda parecer diferente es exactamante igual que el de Cmos, con las excepciones, claro está, de la libreria jjdecode por que lo hice antes del gran descubrimiento de Cmos

y sin la parte de la api y la de download, ésto es por tener mas despejado el archivo para más comodidad en el trajín.
Código: Seleccionar todo
# -*- coding: utf-8 -*-
# ------------------------------------------------------------
# pelisalacarta - XBMC Plugin
# Conector for openload.co
# http://blog.tvalacarta.info/plugin-xbmc/pelisalacarta/
# ------------------------------------------------------------
from core.scrapertools import *
from aadecode import decode as aadecode
headers = [
["User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:22.0) Gecko/20100101 Firefox/22.0"],
["Accept-Encoding", "none"]
]
def test_video_exists(page_url):
logger.info("[openload.py] test_video_exists(page_url='%s')" % page_url)
data = cache_page(page_url, headers=headers)
if 'We are sorry!' in data:
return False, 'File Not Found or Removed.'
return True, ""
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
logger.info("[openload.py] get_video_url page_url=" + page_url)
video_urls = []
data = cache_page(page_url, headers=headers)
try:
text_encodes = find_multiple_matches(data, "(゚ω゚ノ=\s*/`m´\).*?\(゚Θ゚\)\)\s*\('_'\);)")
for n in range(0, len(text_encodes)):
try:
text_decode = aadecode(
text_encodes[
eval(
find_single_match(
aadecode(text_encodes[n]),
"\(([^\)]+)\)"
)
)
]
)
break
except: continue
pre_media_url = "https://openload.co/stream/" + find_single_match(text_decode, "return\s*(.*?true)").split("/")[-1]
except:
try:
data = linkimg(data)
except:
try:
dif = get_match(aadecode(text_encodes[0]), "charCodeAt.0.([^\)]+)\);")
except:
text_encodes = find_multiple_matches(data, '(j=~\[\];.*?".""\)\(\)\)\(\);)')
for n in range(0, len(text_encodes)):
try:
dif = get_match(text_encodes[n], '\+j\.\$__\+j\.___\+j\.([^\+]+)\+"\);')
dif = str(int(dif.replace('_','0').replace('$','1'), 2))
except: continue
data = decode_hidden(data, dif)
pre_media_url = 'https://openload.co/stream/%s?mime=true' % data
## assume mp4
media_url = get_header_from_response(pre_media_url, header_to_get="location")
video_urls.append( [ ".mp4" + " [openload]", media_url ] )
return video_urls
def find_videos(text):
encontrados = set()
devuelve = []
patronvideos = '//(?:www.)?openload.../(?:embed|f)/([0-9a-zA-Z-_]+)'
logger.info("[openload.py] find_videos #" + patronvideos + "#")
matches = re.compile(patronvideos, re.DOTALL).findall(text)
for media_id in matches:
titulo = "[openload]"
url = 'https://openload.co/embed/%s/' % media_id
if url not in encontrados:
logger.info(" url=" + url)
devuelve.append([titulo, url, 'openload'])
encontrados.add(url)
else:
logger.info(" url duplicada=" + url)
return devuelve
def linkimg(data):
from png import Reader as png
import base64
import math
data = png(bytes=base64.b64decode(get_match(data, '"linkimg"[^,]+,([^"]+)"'))).read()[2]
_string = "".join(["".join([chr(c) if c != 0 else "" for c in w]) for w in data])
image = _tabs(_string,12,20)
data = cache_page("https://openload.co/assets/js/obfuscator/n.js")
if not "signatureNumbers" in data:
scripts = find_multiple_matches(data, '<script src="(/assets/js/obfuscator/[^"]+)"')
for scr in scripts:
data = cache_page('https://openload.co%s' % scr)
if "signatureNumbers" in data: break
_string = get_match(data, '''['"]([^"^']+?)['"]''')
signature = _tabs(_string,11,26)
link = {}
for i in [2, 3, 5, 7]:
link[i] = []
tmp = ord('c')
for j in range(len(signature[i])):
for k in range(len(signature[i][j])):
if tmp > 122: tmp = ord('b')
if signature[i][j][k] == chr(int(math.floor(tmp))):
if len(link[i]) > j: continue
tmp += 2.5;
if k < len(image[i][j]): link[i].append(image[i][j][k])
res = []
for idx in link:
res.append(''.join(link[idx]).replace(',', ''))
return res[3] + '~' + res[1] + '~' + res[2] + '~' + res[0]
def _tabs(_string,n1,n2):
_array = []
i = -1
for idx in range(len(_string)):
if 0 == (idx % (n1 * n2)):
_array.append([])
i += 1; j = -1
if 0 == (idx % (n2)):
_array[i].append([])
j += 1
_array[i][j].append(_string[idx])
return _array
def decode_hidden(data, dif):
hiddenurl = decodeHtmlentities(find_single_match(data, 'id="hiddenurl\s*">(.*?)<'))
s = []
for i in range(0, len(hiddenurl)):
j = ord(hiddenurl[i])
s.append(chr(33 + ((j+14) % 94)))
tmp = "".join(s)
str = tmp[:-1] + chr(ord(tmp[-1:])+eval(dif))
return str
PD: Para todos: Nos confundáis lo pegado en este post como archivo alternativo ni a nada por el estilo. Mi recomendación es usar lo que enlace Cmos en este hilo.