# -*- coding: utf-8 -*- #------------------------------------------------------------ # pelisalacarta - XBMC Plugin # Canal para seriesyonkis # http://blog.tvalacarta.info/plugin-xbmc/pelisalacarta/ # Por Truenon y Jesus, modificada por Boludiko # v11 #------------------------------------------------------------ import urlparse,urllib2,urllib,re from core import logger from core import config from core import scrapertools from core.item import Item from servers import servertools __channel__ = "seriesyonkis" __category__ = "S,A" __type__ = "generic" __title__ = "Seriesyonkis" __language__ = "ES" DEBUG = config.get_setting("debug") def isGeneric(): return True def mainlist(item): logger.info("[seriesyonkis.py] mainlist") itemlist = [] itemlist.append( Item(channel=__channel__, action="lastepisodes" , title="Ultimos capítulos" , url="http://www.seriesyonkis.com/ultimos-capitulos")) itemlist.append( Item(channel=__channel__, action="listalfabetico" , title="Listado alfabetico", url="http://www.seriesyonkis.com")) itemlist.append( Item(channel=__channel__, action="mostviewed" , title="Series más vistas", url="http://www.seriesyonkis.com/series-mas-vistas")) itemlist.append( Item(channel=__channel__, action="search" , title="Buscar", url="http://www.seriesyonkis.com/buscar/serie")) return itemlist def search(item,texto, categoria="*"): logger.info("[seriesyonkis.py] search") itemlist = [] if categoria not in ("*", "S"): return itemlist ## <-- if item.url=="": item.url = "http://www.seriesyonkis.com/buscar/serie" url = "http://www.seriesyonkis.com/buscar/serie" # write ur URL here post = 'keywords='+texto[0:18] data = scrapertools.cache_page(url,post=post) patron = '
([^<]+)
' matches = re.compile(patron,re.DOTALL).findall(data) for match in matches: scrapedtitle = match[0] scrapedurl = urlparse.urljoin(item.url,match[1]) scrapedthumbnail = match[2] scrapedplot = match[3] if (DEBUG): logger.info("title=["+scrapedtitle+"], url=["+scrapedurl+"], thumbnail=["+scrapedthumbnail+"]") itemlist.append( Item(channel=__channel__, action="episodios" , title=scrapedtitle , fulltitle=scrapedtitle , url=scrapedurl, thumbnail=scrapedthumbnail, plot=scrapedplot, show=scrapedtitle)) return itemlist def lastepisodes(item): logger.info("[seriesyonkis.py] lastepisodes") data = scrapertools.cache_page(item.url) #
Strike back
Strike back
Cómo conocí a vuestra madre (.+?).*? (.+?)Cap.*? ', re.S).findall(data)
if len(matches)>0:
data = matches[0]
#', re.S).findall(data)
if len(matches)>0:
thumbnail = urlparse.urljoin(item.url,matches[0])
## <-- plot y titulo
patronvideos = '
([^<]+?)
matches = re.compile('
# 1x02 - El hombre en la unidad especial de victimas 18/08/2007 8 ([^<]+)(.*?)(.*?) ', re.S).findall(item.extra)
scrapertools.printMatches(matches)
itemlist=[]
for match in matches:
url = urlparse.urljoin(item.url,match[0])
title = match[1].strip()+match[2]
patron = ''
flags = re.compile(patron,re.DOTALL).findall(match[3])
for flag in flags:
title = title + " ("+flag+")"
itemlist.append( Item(channel=__channel__, action="findvideos" , title=title, fulltitle=item.fulltitle+" "+title, url=url, thumbnail=item.thumbnail, plot=item.plot, show = item.show, context="4", folder=True))
return itemlist
def findvideos(item):
logger.info("[seriesyonkis.py] findvideos")
itemlist = []
try:
Nro = 0
fmt=id=""
data = scrapertools.cache_page(item.url)
#Solo queremos los links de ONLINE
#matches = re.compile('.*?
.*?"flags ([^_]+)_sub".*?class="sprite quality([^"]+)"'
datos = re.compile(patron, re.S).findall(match)
for info in datos:
id = info[0]
servidor = info[1]
Nro = Nro + 1
fmt = info[4]
audio = "Audio:" + info[2]
subs = "Subs:" + info[3]
url = urlparse.urljoin(item.url,info[0])
scraptedtitle = "%02d) [%s %s] - (Q:%s) [%s] " % (Nro , audio,subs,fmt,servidor)
itemlist.append( Item(channel=__channel__, action="play" , title=scraptedtitle, fulltitle=item.fulltitle , url=url, thumbnail=item.thumbnail, plot=item.plot, folder=False))
except:
import sys
for line in sys.exc_info():
logger.error( "%s" % line )
return itemlist
def play(item):
logger.info("[seriesyonkis.py] play")
itemlist = []
# Descarga la página de reproducción de este episodio y server
#Reproducir ahora
logger.info("[seriesyonkis.py] play url="+item.url)
data = scrapertools.cache_page(item.url)
patron = 'Reproducir ahora'
matches = re.compile(patron,re.DOTALL).findall(data)
if len(matches)==0:
patron = 'Descargar ahora'
matches = re.compile(patron,re.DOTALL).findall(data)
if len(matches)==0:
logger.info("[seriesyonkis.py] play ERROR, no encuentro el enlace 'Reproducir ahora' o 'Descargar ahora'")
return []
playurl = urlparse.urljoin(item.url,matches[0])
logger.info("[seriesyonkis.py] play url="+playurl)
try:
location = scrapertools.getLocationHeaderFromResponse(playurl)
logger.info("[seriesyonkis.py] play location="+location)
if location<>"":
logger.info("[seriesyonkis.py] Busca videos conocidos en la url")
videos = servertools.findvideos(location)
if len(videos)==0:
location = scrapertools.getLocationHeaderFromResponse(location)
logger.info("[seriesyonkis.py] play location="+location)
if location<>"":
logger.info("[seriesyonkis.py] Busca videos conocidos en la url")
videos = servertools.findvideos(location)
if len(videos)==0:
logger.info("[seriesyonkis.py] play downloading location")
data = scrapertools.cache_page(location)
logger.info("------------------------------------------------------------")
#logger.info(data)
logger.info("------------------------------------------------------------")
videos = servertools.findvideos(data)
logger.info(str(videos))
logger.info("------------------------------------------------------------")
else:
logger.info("[seriesyonkis.py] play location vacía")
videos=[]
if(len(videos)>0):
url = videos[0][1]
server=videos[0][2]
itemlist.append( Item(channel=__channel__, action="play" , title=item.title, fulltitle=item.fulltitle , url=url, thumbnail=item.thumbnail, plot=item.plot, server=server, extra=item.extra, folder=False))
else:
data = scrapertools.cache_page(playurl)
patron='', re.S).findall(data)
#ONLINE + DESCARGA
matches = re.compile('
.*?
.*? ', re.S).findall(data)
#logger.info("3")
scrapertools.printMatches(matches)
#logger.info("4")
if len(matches)==0:
logger.info("no encuentra cabecera 2")
for match in matches:
#logger.info(match)
#
patron = '([^<]+)
Reproducir esp no lksomg ![]()
(.*?)
0):
if "xbmc" in config.get_platform():
data = matches[0]
#buscamos la public key
patron='src="http://www.google.com/recaptcha/api/noscript\?k=([^"]+)"'
pkeys = re.compile(patron, re.S).findall(data)
if(len(pkeys)>0):
pkey=pkeys[0]
#buscamos el id de challenge
data = scrapertools.cache_page("http://www.google.com/recaptcha/api/challenge?k="+pkey)
patron="challenge.*?'([^']+)'"
challenges = re.compile(patron, re.S).findall(data)
if(len(challenges)>0):
challenge = challenges[0]
image = "http://www.google.com/recaptcha/api/image?c="+challenge
#CAPTCHA
exec "import pelisalacarta.captcha as plugin"
tbd = plugin.Keyboard("","",image)
tbd.doModal()
confirmed = tbd.isConfirmed()
if (confirmed):
tecleado = tbd.getText()
sendcaptcha(playurl,challenge,tecleado)
del tbd
#tbd ya no existe
if(confirmed and tecleado != ""):
itemlist = play(item)
else:
itemlist.append( Item(channel=__channel__, action="error", title="El sitio web te requiere un captcha") )
except:
import sys
for line in sys.exc_info():
logger.error( "%s" % line )
logger.info("len(itemlist)=%s" % len(itemlist))
return itemlist
def sendcaptcha(url,challenge,text):
values = {'recaptcha_challenge_field' : challenge,
'recaptcha_response_field' : text}
form_data = urllib.urlencode(values)
request = urllib2.Request(url,form_data)
request.add_header('User-Agent', 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)')
response = urllib2.urlopen(request)
html = response.read()
response.close()
return html
# Pone todas las series del listado alfabético juntas, para no tener que ir entrando una por una
def completo(item):
logger.info("[seriesyonkis.py] completo()")
itemlist = []
# Carga el menú "Alfabético" de series
item = Item(channel=__channel__, action="listalfabetico")
items_letras = listalfabetico(item)
# Para cada letra
for item_letra in items_letras:
#print item_letra.title
# Lee las series
items_programas = series(item_letra)
salir = False
while not salir:
# Saca la URL de la siguiente página
ultimo_item = items_programas[ len(items_programas)-1 ]
# Páginas intermedias
if ultimo_item.action=="series":
#print ultimo_item.url
# Quita el elemento de "Página siguiente"
ultimo_item = items_programas.pop()
# Añade las series de la página a la lista completa
itemlist.extend( items_programas )
# Carga la sigiuente página
items_programas = series(ultimo_item)
# Última página
else:
# Añade a la lista completa y sale
itemlist.extend( items_programas )
salir = True
return itemlist
def listalfabetico(item):
logger.info("[seriesyonkis.py] listalfabetico")
itemlist = []
itemlist.append( Item(channel=__channel__, action="series" , title="0-9", url="http://www.seriesyonkis.com/lista-de-series/0-9"))
itemlist.append( Item(channel=__channel__, action="series" , title="A" , url="http://www.seriesyonkis.com/lista-de-series/A"))
itemlist.append( Item(channel=__channel__, action="series" , title="B" , url="http://www.seriesyonkis.com/lista-de-series/B"))
itemlist.append( Item(channel=__channel__, action="series" , title="C" , url="http://www.seriesyonkis.com/lista-de-series/C"))
itemlist.append( Item(channel=__channel__, action="series" , title="D" , url="http://www.seriesyonkis.com/lista-de-series/D"))
itemlist.append( Item(channel=__channel__, action="series" , title="E" , url="http://www.seriesyonkis.com/lista-de-series/E"))
itemlist.append( Item(channel=__channel__, action="series" , title="F" , url="http://www.seriesyonkis.com/lista-de-series/F"))
itemlist.append( Item(channel=__channel__, action="series" , title="G" , url="http://www.seriesyonkis.com/lista-de-series/G"))
itemlist.append( Item(channel=__channel__, action="series" , title="H" , url="http://www.seriesyonkis.com/lista-de-series/H"))
itemlist.append( Item(channel=__channel__, action="series" , title="I" , url="http://www.seriesyonkis.com/lista-de-series/I"))
itemlist.append( Item(channel=__channel__, action="series" , title="J" , url="http://www.seriesyonkis.com/lista-de-series/J"))
itemlist.append( Item(channel=__channel__, action="series" , title="K" , url="http://www.seriesyonkis.com/lista-de-series/K"))
itemlist.append( Item(channel=__channel__, action="series" , title="L" , url="http://www.seriesyonkis.com/lista-de-series/L"))
itemlist.append( Item(channel=__channel__, action="series" , title="M" , url="http://www.seriesyonkis.com/lista-de-series/M"))
itemlist.append( Item(channel=__channel__, action="series" , title="N" , url="http://www.seriesyonkis.com/lista-de-series/N"))
itemlist.append( Item(channel=__channel__, action="series" , title="O" , url="http://www.seriesyonkis.com/lista-de-series/O"))
itemlist.append( Item(channel=__channel__, action="series" , title="P" , url="http://www.seriesyonkis.com/lista-de-series/P"))
itemlist.append( Item(channel=__channel__, action="series" , title="Q" , url="http://www.seriesyonkis.com/lista-de-series/Q"))
itemlist.append( Item(channel=__channel__, action="series" , title="R" , url="http://www.seriesyonkis.com/lista-de-series/R"))
itemlist.append( Item(channel=__channel__, action="series" , title="S" , url="http://www.seriesyonkis.com/lista-de-series/S"))
itemlist.append( Item(channel=__channel__, action="series" , title="T" , url="http://www.seriesyonkis.com/lista-de-series/T"))
itemlist.append( Item(channel=__channel__, action="series" , title="U" , url="http://www.seriesyonkis.com/lista-de-series/U"))
itemlist.append( Item(channel=__channel__, action="series" , title="V" , url="http://www.seriesyonkis.com/lista-de-series/V"))
itemlist.append( Item(channel=__channel__, action="series" , title="W" , url="http://www.seriesyonkis.com/lista-de-series/W"))
itemlist.append( Item(channel=__channel__, action="series" , title="X" , url="http://www.seriesyonkis.com/lista-de-series/X"))
itemlist.append( Item(channel=__channel__, action="series" , title="Y" , url="http://www.seriesyonkis.com/lista-de-series/Y"))
itemlist.append( Item(channel=__channel__, action="series" , title="Z" , url="http://www.seriesyonkis.com/lista-de-series/Z"))
return itemlist