Merge pull request #36 from Intel11/patch-1

Actualizado allcalidad, mocosoftx y userporn eliminado, no funciona dominio mocosoftx.
This commit is contained in:
Alfa
2017-08-17 01:07:17 +02:00
committed by GitHub
5 changed files with 31 additions and 406 deletions
+31 -34
View File
@@ -8,19 +8,17 @@ from platformcode import config, logger
host = "http://allcalidad.com/"
def mainlist(item):
logger.info()
itemlist = []
itemlist.append(Item(channel=item.channel, title="Novedades", action="peliculas", url=host))
itemlist.append(Item(channel=item.channel, title="Por género", action="generos_years", url=host, extra="Genero"))
itemlist.append(Item(channel=item.channel, title="Por año", action="generos_years", url=host, extra=">Año<"))
itemlist.append(Item(channel=item.channel, title="Favoritas", action="peliculas", url=host + "/favorites"))
itemlist.append(Item(channel=item.channel, title=""))
itemlist.append(Item(channel=item.channel, title="Buscar", action="search", url=host + "?s="))
itemlist.append(Item(channel = item.channel, title = "Novedades", action = "peliculas", url = host))
itemlist.append(Item(channel = item.channel, title = "Por género", action = "generos_years", url = host, extra = "Genero" ))
itemlist.append(Item(channel = item.channel, title = "Por año", action = "generos_years", url = host, extra = ">Año<"))
itemlist.append(Item(channel = item.channel, title = "Favoritas", action = "peliculas", url = host + "/favorites" ))
itemlist.append(Item(channel = item.channel, title = ""))
itemlist.append(Item(channel = item.channel, title = "Buscar", action = "search", url = host + "?s="))
return itemlist
def newest(categoria):
logger.info()
itemlist = []
@@ -57,16 +55,16 @@ def generos_years(item):
logger.info()
itemlist = []
data = httptools.downloadpage(item.url).data
patron = '(?s)%s(.*?)</ul></div>' % item.extra
patron = '(?s)%s(.*?)</ul></div>' %item.extra
bloque = scrapertools.find_single_match(data, patron)
patron = 'href="([^"]+)'
patron = 'href="([^"]+)'
patron += '">([^<]+)'
matches = scrapertools.find_multiple_matches(bloque, patron)
for url, titulo in matches:
itemlist.append(Item(channel=item.channel,
action="peliculas",
title=titulo,
url=url
itemlist.append(Item(channel = item.channel,
action = "peliculas",
title = titulo,
url = url
))
return itemlist
@@ -86,22 +84,22 @@ def peliculas(item):
year = scrapertools.find_single_match(varios, 'Año.*?kinopoisk">([^<]+)')
year = scrapertools.find_single_match(year, '[0-9]{4}')
mtitulo = titulo + " (" + idioma + ") (" + year + ")"
new_item = Item(channel=item.channel,
action="findvideos",
title=mtitulo,
fulltitle=titulo,
thumbnail=thumbnail,
url=url,
contentTitle=titulo,
contentType="movie"
)
new_item = Item(channel = item.channel,
action = "findvideos",
title = mtitulo,
fulltitle = titulo,
thumbnail = thumbnail,
url = url,
contentTitle = titulo,
contentType="movie"
)
if year:
new_item.infoLabels['year'] = int(year)
itemlist.append(new_item)
url_pagina = scrapertools.find_single_match(data, 'next" href="([^"]+)')
if url_pagina != "":
pagina = "Pagina: " + scrapertools.find_single_match(url_pagina, "page/([0-9]+)")
itemlist.append(Item(channel=item.channel, action="peliculas", title=pagina, url=url_pagina))
itemlist.append(Item(channel = item.channel, action = "peliculas", title = pagina, url = url_pagina))
return itemlist
@@ -120,25 +118,24 @@ def findvideos(item):
elif "vimeo" in url:
url += "|" + "http://www.allcalidad.com"
itemlist.append(
Item(channel=item.channel,
action="play",
title=titulo,
fulltitle=item.fulltitle,
thumbnail=item.thumbnail,
server=server,
url=url
Item(channel = item.channel,
action = "play",
title = titulo,
fulltitle = item.fulltitle,
thumbnail = item.thumbnail,
server = "",
url = url
))
itemlist = servertools.get_servers_itemlist(itemlist, lambda i: i.title % i.server.capitalize())
if itemlist:
itemlist.append(Item(channel=item.channel))
itemlist.append(Item(channel = item.channel))
itemlist.append(item.clone(channel="trailertools", title="Buscar Tráiler", action="buscartrailer", context="",
text_color="magenta"))
# Opción "Añadir esta película a la biblioteca de KODI"
if item.extra != "library":
if config.get_videolibrary_support():
itemlist.append(Item(channel=item.channel, title="Añadir a la videoteca", text_color="green",
filtro=True, action="add_pelicula_to_library", url=item.url,
thumbnail=item.thumbnail,
filtro=True, action="add_pelicula_to_library", url=item.url, thumbnail = item.thumbnail,
infoLabels={'title': item.fulltitle}, fulltitle=item.fulltitle,
extra="library"))
return itemlist
-40
View File
@@ -1,40 +0,0 @@
{
"id": "mocosoftx",
"name": "MocosoftX",
"active": true,
"adult": true,
"language": "es",
"thumbnail": "mocosoftx.png",
"banner": "mocosoftx.png",
"version": 1,
"changes": [
{
"date": "15/03/2017",
"description": "limpieza código"
},
{
"date": "05/08/2016",
"description": "Eliminado de sección películas."
}
],
"categories": [
"adult"
],
"settings": [
{
"id": "mocosoftxuser",
"type": "text",
"label": "@30014",
"enabled": true,
"visible": true
},
{
"id": "mocosoftxpassword",
"type": "text",
"label": "@30015",
"enabled": true,
"visible": true,
"hidden": true
}
]
}
-207
View File
@@ -1,207 +0,0 @@
# -*- coding: utf-8 -*-
import re
import urllib
import urlparse
from core import scrapertools
from core import servertools
from core.item import Item
from platformcode import config, logger
from platformcode import platformtools
MAIN_HEADERS = []
MAIN_HEADERS.append(["Host", "mocosoftx.com"])
MAIN_HEADERS.append(["User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:8.0) Gecko/20100101 Firefox/8.0"])
MAIN_HEADERS.append(["Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"])
MAIN_HEADERS.append(["Accept-Language", "es-es,es;q=0.8,en-us;q=0.5,en;q=0.3"])
MAIN_HEADERS.append(["Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7"])
MAIN_HEADERS.append(["Connection", "keep-alive"])
# Login:
# <form action="http://mocosoftx.com/foro/login2/" method="post" accept-charset="ISO-8859-1" onsubmit="hashLoginPassword(this, '3e468fdsab5d9');" >
# pst: user=blablabla&passwrd=&cookielength=-1&hash_passwrd=78e88DSe408508d22f
# doForm.hash_passwrd.value = hex_sha1(hex_sha1(doForm.user.value.php_to8bit().php_strtolower() + doForm.passwrd.value.php_to8bit()) + cur_session_id);
def login():
# Averigua el id de sesión
data = scrapertools.cache_page("http://mocosoftx.com/foro/login/")
cur_session_id = scrapertools.get_match(data,
'form action="[^"]+" name="frmLogin" id="frmLogin" method="post" accept-charset="ISO-8859-1" onsubmit="hashLoginPassword\(this, \'([a-z0-9]+)\'')
cur_session_id = "c95633073dc6afaa813d33b2bfeda520"
logger.info("cur_session_id=" + cur_session_id)
# Calcula el hash del password
email = config.get_setting("mocosoftxuser", "mocosoftx")
password = config.get_setting("mocosoftxpassword", "mocosoftx")
logger.info("email=" + email)
logger.info("password=" + password)
# doForm.hash_passwrd.value = hex_sha1(hex_sha1(doForm.user.value.php_to8bit().php_strtolower() + doForm.passwrd.value.php_to8bit()) + cur_session_id);
hash_passwrd = scrapertools.get_sha1(scrapertools.get_sha1(email.lower() + password.lower()) + cur_session_id)
logger.info("hash_passwrd=" + hash_passwrd)
# Hace el submit del email
# post = "user="+email+"&passwrd=&cookieneverexp=on&hash_passwrd="+hash_passwrd
post = urllib.urlencode({'user': email, "passwrd": password}) + "&cookieneverexp=on&hash_passwrd="
logger.info("post=" + post)
headers = []
headers.append(["Host", "mocosoftx.com"])
headers.append(["User-Agent",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36"])
headers.append(["Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"])
headers.append(["Accept-Language", "es-ES,es;q=0.8,en;q=0.6,gl;q=0.4"])
headers.append(["Accept-Encoding", "gzip, deflate"])
headers.append(["Connection", "keep-alive"])
headers.append(["Referer", "http://mocosoftx.com/foro/login/"])
headers.append(["Origin", "http://mocosoftx.com"])
headers.append(["Content-Type", "application/x-www-form-urlencoded"])
headers.append(["Content-Length", str(len(post))])
headers.append(["Cache-Control", "max-age=0"])
headers.append(["Upgrade-Insecure-Requests", "1"])
data = scrapertools.cache_page("http://mocosoftx.com/foro/login2/", post=post, headers=headers)
logger.info("data=" + data)
return True
def mainlist(item):
logger.info()
itemlist = []
if config.get_setting("mocosoftxuser", "mocosoftx") == "":
itemlist.append(
Item(channel=item.channel, title="Habilita tu cuenta en la configuración...", action="settingCanal",
url=""))
else:
if login():
item.url = "http://mocosoftx.com/foro/forum/"
itemlist = foro(item)
itemlist.append(Item(channel=item.channel, action="settingCanal", title="Configuración...", url=""))
else:
itemlist.append(
Item(channel=item.channel, title="Cuenta incorrecta, revisa la configuración...", action="", url="",
folder=False))
return itemlist
def settingCanal(item):
return platformtools.show_channel_settings()
def foro(item):
logger.info()
itemlist = []
# Descarga la página
data = scrapertools.cache_page(item.url, headers=MAIN_HEADERS)
# Extrae los foros y subforos
patron = '<h4><a href="([^"]+)"[^>]+>([^<]+)</a>'
matches = re.compile(patron, re.DOTALL).findall(data)
scrapertools.printMatches(matches)
for scrapedurl, scrapedtitle in matches:
scrapedtitle = unicode(scrapedtitle, "iso-8859-1", errors="replace").encode("utf-8")
title = ">> Foro " + scrapedtitle
url = urlparse.urljoin(item.url, scrapedurl)
# http://mocosoftx.com/foro/fotos-hentai/?PHPSESSID=nflddqf9nvbm2dd92
if "PHPSESSID" in url:
url = scrapertools.get_match(url, "(.*?)\?PHPSESSID=")
thumbnail = ""
plot = ""
itemlist.append(Item(channel=item.channel, title=title, action="foro", url=url, plot=plot, thumbnail=thumbnail,
folder=True))
# Extrae los hilos individuales
patron = '<td class="icon2 windowbgb">[^<]+'
patron += '<img src="([^"]+)"[^<]+'
patron += '</td>[^<]+'
patron += '<td class="subject windowbgb2">[^<]+'
patron += '<div >[^<]+'
patron += '<span id="msg_\d+"><a href="([^"]+)">([^>]+)</a>'
matches = re.compile(patron, re.DOTALL).findall(data)
scrapertools.printMatches(matches)
for scrapedthumbnail, scrapedurl, scrapedtitle in matches:
title = scrapedtitle
url = urlparse.urljoin(item.url, scrapedurl)
if "PHPSESSID" in url:
url = scrapertools.get_match(url, "(.*?)\?PHPSESSID=")
thumbnail = scrapedthumbnail
plot = ""
itemlist.append(
Item(channel=item.channel, title=title, action="findvideos", url=url, plot=plot, thumbnail=thumbnail,
folder=True))
# Extrae la marca de siguiente página
# <a class="navPages" href="http://mocosoftx.com/foro/peliculas-xxx-online-(completas)/20/?PHPSESSID=rpejdrj1trngh0sjdp08ds0ef7">2</a>
patronvideos = '<strong>\d+</strong[^<]+<a class="navPages" href="([^"]+)">'
matches = re.compile(patronvideos, re.DOTALL).findall(data)
scrapertools.printMatches(matches)
if len(matches) > 0:
scrapedtitle = ">> Página siguiente"
scrapedurl = urlparse.urljoin(item.url, matches[0])
if "PHPSESSID" in scrapedurl:
scrapedurl = scrapertools.get_match(scrapedurl, "(.*?)\?PHPSESSID=")
scrapedthumbnail = ""
scrapedplot = ""
itemlist.append(Item(channel=item.channel, title=scrapedtitle, action="foro", url=scrapedurl, plot=scrapedplot,
thumbnail=scrapedthumbnail, folder=True))
return itemlist
def findvideos(item):
logger.info()
itemlist = []
# Busca el thumbnail y el argumento
data = scrapertools.cache_page(item.url)
logger.info("data=" + data)
try:
thumbnail = scrapertools.get_match(data, '<div class="post">.*?<img src="([^"]+)"')
except:
thumbnail = ""
plot = ""
# Ahora busca los vídeos
itemlist = servertools.find_video_items(data=data)
for videoitem in itemlist:
videoitem.channel = item.channel
videoitem.plot = plot
videoitem.thumbnail = thumbnail
videoitem.fulltitle = item.title
parsed_url = urlparse.urlparse(videoitem.url)
fichero = parsed_url.path
partes = fichero.split("/")
titulo = partes[len(partes) - 1]
videoitem.title = titulo + " - [" + videoitem.server + "]"
if not itemlist:
patron = '<a href="([^"]+)" class="bbc_link" target="_blank"><span style="color: orange;" class="bbc_color">'
matches = re.compile(patron, re.DOTALL).findall(data)
if matches:
data = scrapertools.cache_page(matches[0])
logger.info(data)
itemlist = servertools.find_video_items(data=data)
for videoitem in itemlist:
videoitem.channel = item.channel
videoitem.plot = plot
videoitem.thumbnail = thumbnail
videoitem.fulltitle = item.title
parsed_url = urlparse.urlparse(videoitem.url)
fichero = parsed_url.path
partes = fichero.split("/")
titulo = partes[len(partes) - 1]
videoitem.title = titulo + " - [" + videoitem.server + "]"
return itemlist
-64
View File
@@ -1,64 +0,0 @@
{
"active": true,
"changes": [
{
"date": "25/03/2016",
"description": "Versión incial"
}
],
"find_videos": {
"ignore_urls": [],
"patterns": [
{
"pattern": "userporn.com\\/f\\/([A-Z0-9a-z]{12}).swf",
"url": "http://www.userporn.com/video/\\1"
},
{
"pattern": "userporn.com\\/video\\/([A-Z0-9a-z]{12})",
"url": "http://www.userporn.com/video/\\1"
},
{
"pattern": "userporn.com\\/e\\/([A-Z0-9a-z]{12})",
"url": "http://www.userporn.com/video/\\1"
},
{
"pattern": "http\\:\\/\\/(?:www\\.)?userporn.com\\/(?:(?:e/|flash/)|(?:(?:video/|f/)))?([a-zA-Z0-9]{0,12})",
"url": "http://www.userporn.com/video/\\1"
}
]
},
"free": true,
"id": "userporn",
"name": "userporn",
"premium": [
"realdebrid",
"alldebrid"
],
"settings": [
{
"default": false,
"enabled": true,
"id": "black_list",
"label": "Incluir en lista negra",
"type": "bool",
"visible": true
},
{
"default": 0,
"enabled": true,
"id": "favorites_servers_list",
"label": "Incluir en lista de favoritos",
"lvalues": [
"No",
"1",
"2",
"3",
"4",
"5"
],
"type": "list",
"visible": false
}
],
"version": 1
}
-61
View File
@@ -1,61 +0,0 @@
# -*- coding: utf-8 -*-
import base64
import re
from core import scrapertools
from platformcode import logger
HOSTER_KEY = "NTI2NzI5Cgo="
# Returns an array of possible video url's from the page_url
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
logger.info("(page_url='%s')" % page_url)
video_urls = []
# Espera un poco como hace el player flash
logger.info("waiting 3 secs")
import time
time.sleep(3)
# Obtiene el id
code = Extract_id(page_url)
# Descarga el json con los detalles del vídeo
# http://www.userporn.com/player_control/settings.php?v=dvthddkC7l4J&em=TRUE&fv=v1.1.45
controluri = "http://userporn.com/player_control/settings.php?v=" + code + "&em=TRUE&fv=v1.1.45"
datajson = scrapertools.cachePage(controluri)
# logger.info("response="+datajson);
# Convierte el json en un diccionario
datajson = datajson.replace("false", "False").replace("true", "True")
datajson = datajson.replace("null", "None")
datadict = eval("(" + datajson + ")")
# Formatos
formatos = datadict["settings"]["res"]
for formato in formatos:
uri = base64.decodestring(formato["u"])
resolucion = formato["l"]
import videobb
video_url = videobb.build_url(uri, HOSTER_KEY, datajson)
video_urls.append(["%s [userporn]" % resolucion, video_url.replace(":80", "")])
for video_url in video_urls:
logger.info("%s - %s" % (video_url[0], video_url[1]))
return video_urls
def Extract_id(url):
_VALID_URL = r'^((?:http://)?(?:\w+\.)?userporn\.com/(?:(?:(?:e/)|(?:video/))|(?:(?:flash/)|(?:f/)))?)?([0-9A-Za-z_-]+)(?(1).+)?$'
# Extract video id from URL
mobj = re.match(_VALID_URL, url)
if mobj is None:
logger.info('ERROR: URL invalida: %s' % url)
return ""
id = mobj.group(2)
logger.info("extracted code=" + id)
return id