Merge branch 'master' of https://github.com/alfa-addon/addon into fix_adult
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<addon id="plugin.video.alfa" name="Alfa" version="1.5.5" provider-name="Alfa Addon">
|
||||
<addon id="plugin.video.alfa" name="Alfa" version="1.5.6" provider-name="Alfa Addon">
|
||||
<requires>
|
||||
<import addon="xbmc.python" version="2.1.0"/>
|
||||
<import addon="script.module.libtorrent" optional="true"/>
|
||||
@@ -19,12 +19,14 @@
|
||||
</assets>
|
||||
<news>[B]Estos son los cambios para esta versión:[/B]
|
||||
[COLOR green][B]Arreglos[/B][/COLOR]
|
||||
[I]- streamplay, gracias a msdos
|
||||
- allcalidad
|
||||
- tvseriesdk
|
||||
- mundoflv
|
||||
- ver-peliculas
|
||||
- fix internos[/I]
|
||||
[I]- hentaiid
|
||||
- hentaienespañol
|
||||
- x18hentai
|
||||
- mp4upload
|
||||
- animeflv
|
||||
- openload
|
||||
- fixes internos[/I]
|
||||
[COLOR green]Gracias a [COLOR yellow]jvc99[/COLOR] y [COLOR yellow]msdos[/COLOR] por su colaboración en esta versión[/COLOR]
|
||||
</news>
|
||||
<description lang="es">Navega con Kodi por páginas web para ver sus videos de manera fácil.</description>
|
||||
<summary lang="en">Browse web pages using Kodi</summary>
|
||||
|
||||
Executable → Regular
+1
-1
@@ -223,7 +223,7 @@ def episodios(item):
|
||||
item.plot = scrapertools.find_single_match(data, 'Description[^>]+><p>(.*?)</p>')
|
||||
|
||||
matches = re.compile('href="([^"]+)"><figure><img class="[^"]+" data-original="([^"]+)".+?</h3>'
|
||||
'<p>(.*?)</p>', re.DOTALL).findall(data)
|
||||
'\s*<p>(.*?)</p>', re.DOTALL).findall(data)
|
||||
|
||||
if matches:
|
||||
for url, thumb, title in matches:
|
||||
|
||||
@@ -381,10 +381,10 @@ def check_value(channel, itemlist):
|
||||
quality_list = channel_node['quality'] = list()
|
||||
|
||||
for item in itemlist:
|
||||
if item.server not in server_list:
|
||||
if item.server not in server_list and item.server !='':
|
||||
server_list.append(item.server)
|
||||
change = True
|
||||
if item.quality not in quality_list:
|
||||
if item.quality not in quality_list and item.quality !='':
|
||||
quality_list.append(item.quality)
|
||||
change = True
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ def lista(item):
|
||||
server="datoporn", fanart=scrapedthumbnail.replace("_t.jpg", ".jpg")))
|
||||
|
||||
# Extrae la marca de siguiente página
|
||||
next_page = scrapertools.find_single_match(data, "<a href='([^']+)'>Next")
|
||||
next_page = scrapertools.find_single_match(data, '<a href="([^"]+)">Next')
|
||||
if next_page and itemlist:
|
||||
itemlist.append(item.clone(action="lista", title=">> Página Siguiente", url=next_page))
|
||||
|
||||
|
||||
@@ -61,30 +61,3 @@ def search(item, texto):
|
||||
return todas(item)
|
||||
else:
|
||||
return []
|
||||
|
||||
|
||||
def findvideos(item):
|
||||
logger.info()
|
||||
|
||||
itemlist = []
|
||||
|
||||
data = httptools.downloadpage(item.url).data
|
||||
patron = '<li.*?<a href="([^"]+)" target="_blank"><i class="icon-metro online"><\/i><span>Ver.*?<\/span><\/a> <\/li>'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
for scrapedurl in matches:
|
||||
title = item.title
|
||||
url = scrapedurl
|
||||
itemlist.append(item.clone(title=title, url=url, action="play"))
|
||||
|
||||
return itemlist
|
||||
|
||||
|
||||
def play(item):
|
||||
logger.info()
|
||||
itemlist = []
|
||||
item.url = item.url.replace(' ', '%20')
|
||||
data = httptools.downloadpage(item.url, add_referer=True).data
|
||||
url = scrapertools.find_single_match(data, '<iframe.*?src="([^"]+)".*?frameborder="0"')
|
||||
itemlist = servertools.find_video_items(data=data)
|
||||
|
||||
return itemlist
|
||||
|
||||
@@ -17,7 +17,6 @@ def mainlist(item):
|
||||
itemlist = list()
|
||||
itemlist.append(Item(channel=item.channel, action="series", title="Novedades",
|
||||
url=urlparse.urljoin(CHANNEL_HOST, "archivos/h2/"), extra="novedades"))
|
||||
itemlist.append(Item(channel=item.channel, action="letras", title="Por orden alfabético"))
|
||||
itemlist.append(Item(channel=item.channel, action="generos", title="Por géneros", url=CHANNEL_HOST))
|
||||
itemlist.append(Item(channel=item.channel, action="series", title="Sin Censura",
|
||||
url=urlparse.urljoin(CHANNEL_HOST, "archivos/sin-censura/")))
|
||||
@@ -25,20 +24,6 @@ def mainlist(item):
|
||||
url=urlparse.urljoin(CHANNEL_HOST, "archivos/hight-definition/")))
|
||||
itemlist.append(Item(channel=item.channel, action="series", title="Mejores Hentais",
|
||||
url=urlparse.urljoin(CHANNEL_HOST, "archivos/ranking-hentai/")))
|
||||
itemlist.append(Item(channel=item.channel, action="search", title="Buscar",
|
||||
url=urlparse.urljoin(CHANNEL_HOST, "?s=")))
|
||||
|
||||
return itemlist
|
||||
|
||||
|
||||
def letras(item):
|
||||
logger.info()
|
||||
|
||||
itemlist = []
|
||||
|
||||
for letra in '0ABCDEFGHIJKLMNOPQRSTUVWXYZ':
|
||||
itemlist.append(Item(channel=item.channel, action="series", title=letra,
|
||||
url=urlparse.urljoin(CHANNEL_HOST, "/?s=letra-%s" % letra.replace("0", "num"))))
|
||||
|
||||
return itemlist
|
||||
|
||||
@@ -47,49 +32,34 @@ def generos(item):
|
||||
logger.info()
|
||||
|
||||
itemlist = []
|
||||
data = httptools.downloadpage(item.url).data
|
||||
data = re.sub(r"\n|\r|\t|\s{2}", "", data)
|
||||
data = re.sub(r"\n|\r|\t|\s{2}", "", httptools.downloadpage(item.url).data)
|
||||
|
||||
data = scrapertools.get_match(data, "<div class='cccon'>(.*?)</div><div id=\"myslides\">")
|
||||
patron = "<a.+? href='/([^']+)'>(.*?)</a>"
|
||||
pattern = 'id="hentai2"><div[^>]+>(.*?)</div></div>'
|
||||
data = scrapertools.find_single_match(data, pattern)
|
||||
|
||||
patron = 'href="([^"]+)"[^>]+>(.*?)</a>'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for scrapedurl, scrapedtitle in matches:
|
||||
title = scrapertools.entityunescape(scrapedtitle)
|
||||
url = urlparse.urljoin(item.url, scrapedurl)
|
||||
for url, title in matches:
|
||||
# logger.debug("title=[{0}], url=[{1}]".format(title, url))
|
||||
|
||||
itemlist.append(Item(channel=item.channel, action="series", title=title, url=url))
|
||||
|
||||
return itemlist
|
||||
|
||||
|
||||
def search(item, texto):
|
||||
logger.info()
|
||||
if item.url == "":
|
||||
item.url = urlparse.urljoin(CHANNEL_HOST, "animes/?buscar=")
|
||||
texto = texto.replace(" ", "+")
|
||||
item.url = "%s%s" % (item.url, texto)
|
||||
|
||||
try:
|
||||
return series(item)
|
||||
# Se captura la excepción, para no interrumpir al buscador global si un canal falla
|
||||
except:
|
||||
import sys
|
||||
for line in sys.exc_info():
|
||||
logger.error("%s" % line)
|
||||
return []
|
||||
|
||||
|
||||
def series(item):
|
||||
logger.info()
|
||||
|
||||
data = httptools.downloadpage(item.url).data
|
||||
data = re.sub(r"\n|\r|\t|\s{2}", "", httptools.downloadpage(item.url).data)
|
||||
|
||||
patron = '<div class="post" id="post"[^<]+<center><h1 class="post-title entry-title"[^<]+<a href="([^"]+)">' \
|
||||
'(.*?)</a>[^<]+</h1></center>[^<]+<div[^<]+</div>[^<]+<div[^<]+<div.+?<img src="([^"]+)"'
|
||||
pattern = "<div class='wp-pagenavi'>(.*?)</div>"
|
||||
pagination = scrapertools.find_single_match(data, pattern)
|
||||
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
pattern = '<div class="col-xs-12 col-md-12 col-lg-9px-3"><ul>(.*?)</ul><div class="clearfix">'
|
||||
data = scrapertools.find_single_match(data, pattern)
|
||||
|
||||
pattern = '<a href="([^"]+)".*?<img src="([^"]+)" title="([^"]+)"'
|
||||
matches = re.compile(pattern, re.DOTALL).findall(data)
|
||||
itemlist = []
|
||||
|
||||
if item.extra == "novedades":
|
||||
@@ -97,25 +67,20 @@ def series(item):
|
||||
else:
|
||||
action = "episodios"
|
||||
|
||||
for scrapedurl, scrapedtitle, scrapedthumbnail in matches:
|
||||
title = scrapertools.unescape(scrapedtitle)
|
||||
for url, thumbnail, title in matches:
|
||||
fulltitle = title
|
||||
url = urlparse.urljoin(item.url, scrapedurl)
|
||||
thumbnail = urlparse.urljoin(item.url, scrapedthumbnail)
|
||||
show = title
|
||||
# logger.debug("title=[{0}], url=[{1}], thumbnail=[{2}]".format(title, url, thumbnail))
|
||||
itemlist.append(Item(channel=item.channel, action=action, title=title, url=url, thumbnail=thumbnail,
|
||||
show=show, fulltitle=fulltitle, fanart=thumbnail, folder=True))
|
||||
|
||||
patron = '</span><a class="page larger" href="([^"]+)"'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
for match in matches:
|
||||
if len(matches) > 0:
|
||||
scrapedurl = match
|
||||
scrapedtitle = ">> Pagina Siguiente"
|
||||
if pagination:
|
||||
page = scrapertools.find_single_match(pagination, '>Página\s*(\d+)\s*de\s*\d+<')
|
||||
pattern = 'href="([^"]+)">%s<' % (int(page) + 1)
|
||||
url_page = scrapertools.find_single_match(pagination, pattern)
|
||||
|
||||
itemlist.append(Item(channel=item.channel, action="series", title=scrapedtitle, url=scrapedurl,
|
||||
folder=True, viewmode="movies_with_plot"))
|
||||
if url_page:
|
||||
itemlist.append(Item(channel=item.channel, action="series", title=">> Página Siguiente", url=url_page))
|
||||
|
||||
return itemlist
|
||||
|
||||
@@ -124,9 +89,11 @@ def episodios(item):
|
||||
logger.info()
|
||||
itemlist = []
|
||||
|
||||
data = httptools.downloadpage(item.url).data
|
||||
data = scrapertools.find_single_match(data, '<div class="listanime">(.*?)</div>')
|
||||
patron = '<a href="([^"]+)">([^<]+)</a>'
|
||||
data = re.sub(r"\n|\r|\t|\s{2}", "", httptools.downloadpage(item.url).data)
|
||||
pattern = '<div class="box-entry-title text-center">Lista de Capítulos</div>(.*?)</div></div>'
|
||||
|
||||
data = scrapertools.find_single_match(data, pattern)
|
||||
patron = '<a href="([^"]+)"[^>]+>([^<]+)</a>'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for scrapedurl, scrapedtitle in matches:
|
||||
@@ -136,10 +103,9 @@ def episodios(item):
|
||||
plot = item.plot
|
||||
|
||||
# logger.debug("title=[{0}], url=[{1}], thumbnail=[{2}]".format(title, url, thumbnail))
|
||||
|
||||
itemlist.append(Item(channel=item.channel, action="findvideos", title=title, url=url,
|
||||
thumbnail=thumbnail, plot=plot, show=item.show, fulltitle="%s %s" % (item.show, title),
|
||||
fanart=thumbnail, viewmode="movies_with_plot", folder=True))
|
||||
fanart=thumbnail))
|
||||
|
||||
return itemlist
|
||||
|
||||
@@ -148,7 +114,8 @@ def findvideos(item):
|
||||
logger.info()
|
||||
|
||||
data = httptools.downloadpage(item.url).data
|
||||
patron = '<div id="tab\d".+?>[^<]+<[iframe|IFRAME].*?[src|SRC]="([^"]+)"'
|
||||
|
||||
patron = '<(?:iframe)?(?:IFRAME)?\s*(?:src)?(?:SRC)?="([^"]+)"'
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for url in matches:
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
"default": 0,
|
||||
"enabled": true,
|
||||
"visible": true,
|
||||
"llvalues": [
|
||||
"lvalues": [
|
||||
"No filtrar",
|
||||
"Latino",
|
||||
"Español",
|
||||
@@ -76,4 +76,4 @@
|
||||
"visible": true
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,5 +10,16 @@
|
||||
"categories": [
|
||||
"movie",
|
||||
"latino"
|
||||
],
|
||||
"settings": [
|
||||
{
|
||||
"id": "modo_grafico",
|
||||
"type": "bool",
|
||||
"label": "Buscar información extra",
|
||||
"default": true,
|
||||
"enabled": true,
|
||||
"visible": true
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -14,9 +14,16 @@ from core import scrapertools
|
||||
from core import servertools
|
||||
from core.item import Item
|
||||
from platformcode import config, logger
|
||||
from core import tmdb
|
||||
|
||||
__channel__ = "ver-peliculas"
|
||||
|
||||
host = "http://ver-peliculas.org/"
|
||||
|
||||
try:
|
||||
__modo_grafico__ = config.get_setting('modo_grafico', __channel__)
|
||||
except:
|
||||
__modo_grafico__ = True
|
||||
|
||||
def mainlist(item):
|
||||
logger.info()
|
||||
@@ -115,19 +122,22 @@ def listado(item):
|
||||
logger.info()
|
||||
itemlist = []
|
||||
data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url).data)
|
||||
logger.debug(data)
|
||||
# logger.debug(data)
|
||||
pattern = '<a href="([^"]+)"[^>]+><img (?:src)?(?:data-original)?="([^"]+)".*?alt="([^"]+)"'
|
||||
matches = re.compile(pattern, re.DOTALL).findall(data)
|
||||
|
||||
for url, thumb, title in matches:
|
||||
title = title.replace("Película", "", 1)
|
||||
year = scrapertools.find_single_match(url, '-(\d+)-online')
|
||||
title = title.replace("Película", "", 1).partition(" /")[0].partition(":")[0]
|
||||
itemlist.append(Item(channel=item.channel,
|
||||
action="findvideos",
|
||||
title=title,
|
||||
infoLabels={"year": year},
|
||||
url=url,
|
||||
thumbnail=thumb,
|
||||
contentTitle=title
|
||||
))
|
||||
tmdb.set_infoLabels(itemlist, __modo_grafico__)
|
||||
|
||||
pagination = scrapertools.find_single_match(data, '<ul class="pagination">(.*?)</ul>')
|
||||
if pagination:
|
||||
@@ -140,6 +150,13 @@ def listado(item):
|
||||
url=url,
|
||||
thumbnail=get_thumb("next.png")))
|
||||
|
||||
for item in itemlist:
|
||||
if item.infoLabels['plot'] == '':
|
||||
data = httptools.downloadpage(item.url).data
|
||||
item.plot = scrapertools.find_single_match(data, '<div class="desc">([^<]+)</div>').strip()
|
||||
item.fanart = scrapertools.find_single_match(data, '<meta property="og:image" content="([^"]+)"/>')
|
||||
|
||||
|
||||
return itemlist
|
||||
|
||||
|
||||
|
||||
@@ -6,8 +6,9 @@ from core import httptools
|
||||
from core import scrapertools
|
||||
from core.item import Item
|
||||
from platformcode import logger
|
||||
from core import servertools
|
||||
|
||||
host = 'http://www.18hentaionline.eu/'
|
||||
host = 'http://www.18hentaionline.net/'
|
||||
headers = [['User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0'],
|
||||
['Referer', host]]
|
||||
|
||||
@@ -92,17 +93,58 @@ def episodios(item):
|
||||
logger.info()
|
||||
itemlist = []
|
||||
data = httptools.downloadpage(item.url, headers=headers).data
|
||||
patron = '<td>([^<]+)<\/td>.<td>([^<]+)<\/td>.<td>([^<]+)<\/td>.<td>([^<]+)<\/td>.<td><a href="([^"]+)".*?>Ver Capitulo<\/a><\/td>'
|
||||
old_mode = scrapertools.find_single_match(data, '<th>Censura<\/th>')
|
||||
if old_mode:
|
||||
patron = '<td>(\d+)<\/td><td>(.*?)<\/td><td>(.*?)<\/td><td>(.*?)<\/td><td><a href="(.*?)".*?>Ver Capitulo<\/a><\/td>'
|
||||
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for scrapedcap, scrapedaud, scrapedsub, scrapedcen, scrapedurl in matches:
|
||||
url = scrapedurl
|
||||
title = 'CAPITULO ' + scrapedcap + ' AUDIO: ' + scrapedaud + ' SUB:' + scrapedsub + ' ' + censura[scrapedcen]
|
||||
thumbnail = ''
|
||||
plot = ''
|
||||
fanart = ''
|
||||
itemlist.append(Item(channel=item.channel, action="findvideos", title=title, fulltitle=item.fulltitle, url=url,
|
||||
thumbnail=item.thumbnail, plot=plot))
|
||||
for scrapedcap, scrapedaud, scrapedsub, scrapedcen, scrapedurl in matches:
|
||||
url = scrapedurl
|
||||
title = 'CAPITULO ' + scrapedcap + ' AUDIO: ' + scrapedaud + ' SUB:' + scrapedsub + ' ' + censura[scrapedcen]
|
||||
thumbnail = ''
|
||||
plot = ''
|
||||
fanart = ''
|
||||
itemlist.append(Item(channel=item.channel, action="findvideos", title=title, fulltitle=item.fulltitle, url=url,
|
||||
thumbnail=item.thumbnail, plot=plot))
|
||||
else:
|
||||
patron = '<\/i>.*?(.\d+)<\/td><td style="text-align:center">MP4<\/td><td style="text-align:center">(.*?)<\/td>.*?'
|
||||
patron +='<a class="dr-button" href="(.*?)" >'
|
||||
|
||||
matches = re.compile(patron, re.DOTALL).findall(data)
|
||||
|
||||
for scrapedcap, scrapedsub, scrapedurl in matches:
|
||||
url = scrapedurl
|
||||
if scrapedsub !='':
|
||||
subs= scrapedsub
|
||||
else:
|
||||
sub = 'No'
|
||||
title = 'CAPITULO %s SUB %s'%(scrapedcap, subs)
|
||||
thumbnail = ''
|
||||
plot = ''
|
||||
fanart = ''
|
||||
itemlist.append(Item(channel=item.channel, action="findvideos", title=title, fulltitle=item.fulltitle, url=url,
|
||||
thumbnail=item.thumbnail, plot=plot))
|
||||
|
||||
return itemlist
|
||||
|
||||
def findvideos(item):
|
||||
logger.info()
|
||||
|
||||
itemlist = []
|
||||
data = httptools.downloadpage(item.url).data
|
||||
gvideo = scrapertools.find_single_match(data,'<li rel="(http:\/\/www\.18hentaionline\.net\/ramus\/phar\.php\?vid=.*?)">')
|
||||
headers = {'Host':'www.18hentaionline.net', 'Referer':item.url}
|
||||
gvideo_data = httptools.downloadpage(gvideo, headers = headers).data
|
||||
gvideo_url = scrapertools.find_single_match(gvideo_data, 'file: "(.*?)"')
|
||||
server = 'directo'
|
||||
new_item = (item.clone(url=gvideo_url, server=server))
|
||||
itemlist.append(new_item)
|
||||
itemlist.extend(servertools.find_video_items(data=data))
|
||||
for videoitem in itemlist:
|
||||
videoitem.channel = item.channel
|
||||
videoitem.title = item.title+' (%s)'%videoitem.server
|
||||
videoitem.action = 'play'
|
||||
return itemlist
|
||||
|
||||
|
||||
|
||||
Executable → Regular
+11
-5
@@ -1,17 +1,23 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import re
|
||||
|
||||
from core import httptools
|
||||
from core import scrapertools
|
||||
from lib import jsunpack
|
||||
from platformcode import logger
|
||||
|
||||
|
||||
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
||||
logger.info("(page_url='%s')" % page_url)
|
||||
|
||||
data = scrapertools.cache_page(page_url)
|
||||
logger.info("data=" + data)
|
||||
media_url = scrapertools.find_single_match(data, '"file": "(.+?)"')
|
||||
logger.info("media_url=" + media_url)
|
||||
media_url = media_url.replace("?start=0", "")
|
||||
data = re.sub(r"\n|\r|\t|\s{2}", "", httptools.downloadpage(page_url).data)
|
||||
|
||||
match = scrapertools.find_single_match(data, "<script type='text/javascript'>(.*?)</script>")
|
||||
data = jsunpack.unpack(match)
|
||||
data = data.replace("\\'", "'")
|
||||
|
||||
media_url = scrapertools.find_single_match(data, '{type:"video/mp4",src:"([^"]+)"}')
|
||||
logger.info("media_url=" + media_url)
|
||||
|
||||
video_urls = list()
|
||||
|
||||
Executable → Regular
+2
-2
@@ -52,7 +52,7 @@ def get_video_url(page_url, premium=False, user="", password="", video_password=
|
||||
numeros = scrapertools.find_multiple_matches(data,
|
||||
'_[A-f0-9]+x[A-f0-9]+\s*(?:=|\^)\s*([0-9]{4,}|0x[A-f0-9]{4,})')
|
||||
op1, op2 = scrapertools.find_single_match(data, '\(0x(\d),0x(\d)\);')
|
||||
|
||||
idparse = scrapertools.find_single_match(data, "\^parseInt\('([0-9]+)'")
|
||||
videourl = ""
|
||||
for encode in var_encodes:
|
||||
text_decode = ""
|
||||
@@ -81,7 +81,7 @@ def get_video_url(page_url, premium=False, user="", password="", video_password=
|
||||
if value3 < index1:
|
||||
break
|
||||
|
||||
value4 = value2 ^ decode1[j % (mult / 8)]
|
||||
value4 = value2 ^ decode1[j % (mult / 8)] ^ int(idparse,8)
|
||||
for n in numeros:
|
||||
if not n.isdigit():
|
||||
n = int(n, 16)
|
||||
|
||||
Reference in New Issue
Block a user