Página 1 de 2

Canal Anime-Latino

Publicado: 10 Sep 2015, 16:06
por kampanita
Aquí tienes el Anime-Latino.
Lo probaré bien en casa antes de meterlo al git.

Código: Seleccionar todo


# -*- coding: utf-8 -*-
#-----------------------------------------------------------------
# pelisalacarta - XBMC Plugin
# Canal para animelatino - Por Kampanita-2015 
#
# 10/9/2015 - inicio
# 
# http://blog.tvalacarta.info/plugin-xbmc/pelisalacarta/
#-----------------------------------------------------------------
import urlparse,urllib2,urllib,re
import os, sys

from core import logger
from core import config
from core import scrapertools
from core.item import Item
from servers import servertools

__channel__ = "animelatino"
__category__ = "F,L"
__type__ = "generic"
__title__ = "animelatino"
__language__ = "ES"

DEBUG = config.get_setting("debug")

def isGeneric():
    return True

# Main list manual

#PDTE solo thumbs y fanart.   
def mainlist(item):
    logger.info("[animelatino] mainlist")
    itemlist = []
    #Peliculas,Series, Latino, Por Categoria, Alfabeticamente.
    itemlist.append( Item(channel=__channel__, action="menupelis", title="Peliculas",  url="http://www.anime-latino.net/peliculas.php" , thumbnail="http://primerasnoticias.com/wp-content/uploads/2012/07/game1.jpg", fanart="http://primerasnoticias.com/wp-content/uploads/2012/07/game1.jpg") )    
    itemlist.append( Item(channel=__channel__, action="menupelis", title="Series",  url="http://series.anime-latino.net/" , thumbnail="http://primerasnoticias.com/wp-content/uploads/2012/07/game1.jpg", fanart="http://primerasnoticias.com/wp-content/uploads/2012/07/game1.jpg") )        
    itemlist.append( Item(channel=__channel__, action="menupelis", title="Latino",  url="http://www.anime-latino.net/genero/latino.html" , thumbnail="http://primerasnoticias.com/wp-content/uploads/2012/07/game1.jpg", fanart="http://primerasnoticias.com/wp-content/uploads/2012/07/game1.jpg") )    
    itemlist.append( Item(channel=__channel__, action="porcat", title="Por Categoria",  url="" , thumbnail="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDsZyDowjAAE23njJbp9hYZRe9viAuq-f1niz2nRC4jNwXkD6W", fanart="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDsZyDowjAAE23njJbp9hYZRe9viAuq-f1niz2nRC4jNwXkD6W") )   
    itemlist.append( Item(channel=__channel__, action="poralf", title="Alfabeticamente",  url="" , thumbnail="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDsZyDowjAAE23njJbp9hYZRe9viAuq-f1niz2nRC4jNwXkD6W", fanart="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDsZyDowjAAE23njJbp9hYZRe9viAuq-f1niz2nRC4jNwXkD6W") )       
    return itemlist

#PDTE solo thumbs y fanart.   
def porcat(item):
    logger.info("[animelatino] porcat")
    itemlist = []   
    itemlist.append( Item(channel=__channel__, action="menupelis", title="Accion",  url="http://www.anime-latino.net/genero/accion.html" , thumbnail="http://primerasnoticias.com/wp-content/uploads/2012/07/game1.jpg", fanart="http://primerasnoticias.com/wp-content/uploads/2012/07/game1.jpg") )
    itemlist.append( Item(channel=__channel__, action="menupelis", title="Amistad",  url="http://www.anime-latino.net/genero/amistad.html" , thumbnail="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDsZyDowjAAE23njJbp9hYZRe9viAuq-f1niz2nRC4jNwXkD6W", fanart="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDsZyDowjAAE23njJbp9hYZRe9viAuq-f1niz2nRC4jNwXkD6W") )
    itemlist.append( Item(channel=__channel__, action="menupelis", title="Aventura",  url="http://www.anime-latino.net/genero/aventura.html" , thumbnail="http://st-listas.20minutos.es/images/2014-11/389838/list_640px.jpg?1416583998", fanart="http://st-listas.20minutos.es/images/2014-11/389838/list_640px.jpg?1416583998") )
    itemlist.append( Item(channel=__channel__, action="menupelis", title="Carreras",  url="http://www.anime-latino.net/genero/carreras.html" , thumbnail="https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcQlWwCJco1oc0Jlc5Jr6i1CcKoLWtZsEkFabDuuv4bFANk90LiE", fanart="https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcQlWwCJco1oc0Jlc5Jr6i1CcKoLWtZsEkFabDuuv4bFANk90LiE") )
    itemlist.append( Item(channel=__channel__, action="menupelis", title="Comedia",  url="http://www.anime-latino.net/genero/comedia.html" , thumbnail="https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcQlWwCJco1oc0Jlc5Jr6i1CcKoLWtZsEkFabDuuv4bFANk90LiE", fanart="https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcQlWwCJco1oc0Jlc5Jr6i1CcKoLWtZsEkFabDuuv4bFANk90LiE") )
    itemlist.append( Item(channel=__channel__, action="menupelis", title="Cyberpunk",  url="http://www.anime-latino.net/genero/cyberpunk.html" , thumbnail="http://bebefeliz.com/files/2013/05/pocoyo.jpg", fanart="http://bebefeliz.com/files/2013/05/pocoyo.jpg") )
    itemlist.append( Item(channel=__channel__, action="menupelis", title="Deportes",  url="http://www.anime-latino.net/genero/deportes.html" , thumbnail="http://upload.wikimedia.org/wikipedia/en/e/e2/Yes_stars_drama_logo.png", fanart="http://upload.wikimedia.org/wikipedia/en/e/e2/Yes_stars_drama_logo.png") )
    itemlist.append( Item(channel=__channel__, action="menupelis", title="Drama",  url="http://www.anime-latino.net/genero/drama.html" , thumbnail="http://upload.wikimedia.org/wikipedia/en/e/e2/Yes_stars_drama_logo.png", fanart="http://upload.wikimedia.org/wikipedia/en/e/e2/Yes_stars_drama_logo.png") )
    itemlist.append( Item(channel=__channel__, action="menupelis", title="Ecchi",  url="http://www.anime-latino.net/genero/ecchi.html" , thumbnail="http://st-listas.20minutos.es/images/2013-05/362124/4039926_640px.jpg?1374169785", fanart="http://st-listas.20minutos.es/images/2013-05/362124/4039926_640px.jpg?1374169785") )            
    itemlist.append( Item(channel=__channel__, action="menupelis", title="Escolares",  url="http://www.anime-latino.net/genero/escolares.html", thumbnail="http://b.vimeocdn.com/ts/389/464/389464338_640.jpg", fanart="http://b.vimeocdn.com/ts/389/464/389464338_640.jpg") )            

    return itemlist

def poralf(item):

    itemlist=[]
    for i in range(ord('a'),ord('z')+1):
        itemlist.append( Item(channel=__channel__, action="menupelis", title=chr(i),  url="http://www.anime-latino.net/letra/"+chr(i)+".html", thumbnail=item.thumbnail, fanart=item.fanart) )            
    return itemlist
    
    
def menupelis(item):
    logger.info("[animelatino] menupelis")
    logger.info("[animelatino] :"+item.url)
    
    itemlist = []
         
    data = scrapertools.cache_page(item.url).decode('iso-8859-1').encode('utf-8')              
    
    patronbloque = '<div id="mid">(.*?)<div id="right'
    matchesbloque = re.compile(patronbloque,re.DOTALL).findall(data)    
    
    for datos in matchesbloque:
        patron= '<img.*?src="([^"]+)".*?href="([^"]+.html)".*?title="([^"]+)"'
        matches = re.compile(patron,re.DOTALL).findall(datos)    

        for scrapedthumbnail,scrapedurl,scrapedtitle in matches:
            url = urlparse.urljoin(item.url,scrapedurl)               
            thumbnail=urlparse.urljoin(item.thumbnail,scrapedthumbnail)   
            itemlist.append( Item(channel=__channel__, action="verpeli", title=scrapedtitle, fulltitle=scrapedtitle , url=url, thumbnail=thumbnail) )
                      
    return itemlist 		

       
def verpeli(item):   
   
   logger.info("[animelatino] verpeli")
   logger.info("[animelatino] "+item.url)
    
   itemlist = []
            
   data = scrapertools.cache_page(item.url).decode('iso-8859-1').encode('utf-8')

   patronsin='<div class="sinop"><strong class="clms">Sinopsis: </strong>"([^"]+)"<div class="clearboth'
   matches = re.compile(patronsin,re.DOTALL).findall(data)    
   for scrapedplot in matches:
       scrapedplot=scrapedplot.htmlclean
          
   # el bloque entre   '<div class="clm">(.*?)<div class="adspl"'
    
   patronenlaces='<div class="clm">(.*?)<div class="adspl"'
   matches = re.compile(patronenlaces,re.DOTALL).findall(data)    
   scrapertools.printMatches(matches)
   itemlist = []      
   # title <h1>(.*?)</h1>
   # url   <iframe.*?src="()".*?</iframe>
   
   patron = '<h1>(.*?)</h1>.*?<iframe.*?src="([^"])+".*?</iframe>'
   re.compile(patron,re.DOTALL).findall(data)    
   for scrapedtitle,scrapedurl in matches:
       url=urlparse.urljoin(item.url,scrapedurl)          
       itemlist.append( Item(channel=__channel__, action="play", fanart=item.fanart, thumbnail=item.thumbnail,title=scrapedtitle, fulltitle=scrapedtitle , url=url, plot=scrapedplot) )
   
   return itemlist
   

def play(item):
   logger.info("[animelatino] play url="+item.url)
   
   itemlist = servertools.find_video_items(data=item.url)
    
   return itemlist
   


Re: Canal Anime-Latino

Publicado: 12 Sep 2015, 09:23
por kampanita
hasta aqui he llegado, me queda resolver el tema del javascript para sacar los enlaces

https://github.com/kampanita/pelisalaca ... elatino.py

Re: Canal Anime-Latino

Publicado: 12 Sep 2015, 22:07
por robalo
A ver si te gusta el invento. He modificado un poco la función 'menupelis' porque no me entregaba bien los item y faltaban algunos. No salía la peli '009 Re:Cyborg'

Código: Seleccionar todo

def menupelis(item):
    logger.info("[animelatino] menupelis")
    logger.info("[animelatino] :"+item.url)
    
    itemlist = []
         
    #data = scrapertools.cache_page(item.url).decode('iso-8859-1').encode('utf-8')
    data = scrapertools.cache_page(item.url)

    '''
    <div class="bl"><a href="http://www.anime-latino.net/pelicula/009-recyborg.html" title="009 Re:Cyborg"><img src="/img/anime/009-cyborg.jpg" alt="009 Re:Cyborg" width="166" height="250" border="0" class="im" /></a>
              <div class="tt2">
                <h1><a href=" http://www.anime-latino.net/pelicula/009-recyborg.html" title="009 Re:Cyborg">009 Re:Cyborg</a></h1>
              </div>
            </div>
    '''

    patronbloque = '<div class="bl">(.*?)<div id="right'
    matchesbloque = re.compile(patronbloque,re.DOTALL).findall(data)    
    
    #for datos in matchesbloque:
    #    #patron= '<img.*?src="([^"]+)".*?href="([^"]+.html)".*?title="([^"]+)"'
        
    patron='<div class="bl"><a href="([^"]+)" title="([^"]+)"><img src="([^"]+)".*?</a>'
    matches = re.compile(patron,re.DOTALL).findall(data)    
    
    for scrapedurl,scrapedtitle,scrapedthumbnail in matches:
        url = urlparse.urljoin(item.url,scrapedurl)               
        logger.info("URL ===== "+url)
        thumbnail=urlparse.urljoin(item.thumbnail,scrapedthumbnail)   
        itemlist.append( Item(channel=__channel__, action="verpeli", title=scrapedtitle, fulltitle=scrapedtitle , url=url, thumbnail=thumbnail) )
                      
    return itemlist 		

       
def verpeli(item):   
   
   logger.info("[animelatino] verpeli")
   logger.info("[animelatino] "+item.url)
    
   itemlist = []
            
   #data = scrapertools.cache_page(item.url).decode('iso-8859-1').encode('utf-8')
   data = scrapertools.cache_page(item.url)

   ## --- funciones JS url embed a lista --------------------
   patron_funciones_js = "<script type='text/javascript'>.*?"
   patron_funciones_js+= "function ([^\(]+)\(a\).*?var video= a;.*?"
   patron_funciones_js+= 'src="([^"]+)"'

   matches = re.compile(patron_funciones_js,re.DOTALL).findall(data)
   embed_url = {}
   for function, src in matches:
       embed_url[function] = src
   ## -------------------------------------------------------

   patronesin='<div class="sinop"><strong class="clms">Sinopsis: </strong>(.*?)</div>'

   matches = re.compile(patronesin,re.DOTALL).findall(data)    
   scrapertools.printMatches(matches)
   for scrapedplot in matches:
       scrapedplot=scrapertools.htmlclean(scrapedplot)
       logger.info("Sinopsis: "+scrapedplot)

   # el bloque entre   '<div class="clm">(.*?)<div class="clm">'
    
   
   #patron='<li class="lcc"><a href="([^"])+".*?>'   
   
   patron='<li class="lcc"><a href="(.*?)".*?</li>'

   matches2=re.compile(patron,re.DOTALL).findall(data)    
   
   for scrapedurl in matches2:
       url=urlparse.urljoin(item.url,scrapedurl)          
       logger.info("------------------------------------------------------VOY a la urL: " +scrapedurl)
       ##aqui llamaria a otra funcion para coger la pagina de la url.
       #data = scrapertools.cache_page(scrapedurl).decode('iso-8859-1').encode('utf-8')
       data = scrapertools.cache_page(scrapedurl)
       #	print data

   '''
   <div id="tab1" class="tab_content" style="padding:0;">
                    <center>
                                            <script type = 'text/javascript'> videoVTLPK('yhKNckY4dGZlcMi7UM8YANMTjNZETYmyPJy0liipFm0&put=12F66C741990F3F0');</script>
                                          </center>
                  </div>
   '''

   #patron='<div id="tab*?<script type="text/javascript">(.*?)</script>'
   patron="<div id=.tab.*?<script type = 'text/javascript'>(.*?)</script>"
   matchesx = re.compile(patron,re.DOTALL).findall(data)    
   logger.info("aqui .-----------")
   scrapertools.printMatches(matchesx)
   for scrapedurl in matchesx:
       scrapedurl = scrapedurl.strip()
       #patron='\((.*?)\)'
       patron="([^\(]+)\('([^']+)'\)"
       matches = re.compile(patron,re.DOTALL).findall(scrapedurl)
       
       #for dato in matches:
       for function, dato in matches:
           url = re.sub(r"'\+|\+'", " ", embed_url[function])
           url = url.replace(" video ", dato)
           if url.startswith('/'): url = "http://www.anime-latino.net" + url

           ########### pendiente --> aqui tendria que convertir el videoVTLPxx por la direccion correcta
           ########### esto puede ser un coñazo interesante
           ########### preguntar como mirar un substring sin get_match
           ########### en scrapedurl tengo el videoVTLPxx('dato')
           ########### y en dato, el identificador a sustituir como "video" en las url's
           
           ######## aqui un case o ifs anidados para cada server ??
           #vtplvk              
           #url='http://f6.videosxd.org/v.php?v='+dato
           #vtlpnw           
           #url='//embed.nowvideo.sx/embed.php?v='+dato
           #videoVTLPM
           #url='/server/stream/mediafire.php?x='+dato
           #vtlpyr
           #url='/server/stream/html5.php?yr='+dato+'&yourupload.com'
           # ..................  etc, hay un monton
           itemlist.append( Item(channel=__channel__, action="play", fanart=item.fanart, thumbnail=item.thumbnail,title=item.title+" "+dato, fulltitle=item.fulltitle , url=url, plot=scrapedplot) ) 
       
      
   
   return itemlist
       
Las funciones de los 'embed' las coge de la primera url. Si te va bién te quedaría la parte de los servidores en la función 'play' aunque usan servidores que no tenemos. Alguién se va tener que currar la creación de los nuevos conectores :)

Re: Canal Anime-Latino

Publicado: 13 Sep 2015, 01:11
por neno1978
alguien a matado a alguieeeen!!!... Aquí alguien es un asesinoooo...

Re: Canal Anime-Latino

Publicado: 13 Sep 2015, 01:13
por neno1978
Xcierto master, no me cansaré de decirte que lo tuyo es pa quitarse el sombrero y dejarlo colgado pa yo la vida en ofrenda a tu excelencia ;)

Re: Canal Anime-Latino

Publicado: 13 Sep 2015, 06:57
por robalo
:lol: :lol: :lol: No creo que sea para tanto
neno1978 escribió:alguien a matado a alguieeeen!!!... Aquí alguien es un asesinoooo...
Con "Alguién" se me fue la pinza, a saber por que le puse tílde, pero podría disculparlo diciendo que se traduce por "¿Alguien enm?" o algo así :lol:

Una cosilla el patrón

Código: Seleccionar todo

       patron="<div id=.tab.*?<script type = 'text/javascript'>(.*?)</script>"
mejor ponerlo

Código: Seleccionar todo

       patron="<div id=.tab.*?<script[^>]+>(.*?)</script>"
Y también, aunque funciona esta parte

Código: Seleccionar todo

               url = re.sub(r"'\+|\+'", " ", embed_url[function])
               url = url.replace(" video ", dato)
sólo sería así que está más mono

Código: Seleccionar todo

               url = embed_url[function].replace("'+video+'", dato)
Aquí también se me fue la pinza como con el "Alguién" :lol:

Re: Canal Anime-Latino

Publicado: 14 Sep 2015, 07:50
por kampanita
Chapeaú !

Justo lo que estaba intentando hacer...aunque no he tenido mucho tiempo este finde ;) . Lo que tenía pensado era bastante más enrevesado que todo esto...se nota que me falta conocimiento de python, no conozco las funciones que hay y ...se nota ;) ;) porque le doy más vueltas a las cosas más sencillas. Ojalá se pudiera programar esto en pl-sql / delphi / vbasic / c / .... o shellscript ;)...entonces si que no había problema ;)

Gracias de nuevo por la ayuda, a ver si esta noche saco un rato y lo integro ;)

Re: Canal Anime-Latino

Publicado: 14 Sep 2015, 09:36
por robalo
Para crear canales o conectores sólo se necesita leer un poco de sintaxis de python y conocer lo más básico de pelisalacarta. No hay que complicarse la vida. Si una idea es enrevesada en python también lo es en otro lenguaje.
Si crees que pensando en C, VB, ... te resulta más fácil pues piensa en C, VB, .... al final todos son bucles y decisiones :)

Re: Canal Anime-Latino

Publicado: 15 Sep 2015, 08:48
por kampanita
No, si el problema es que lo enreveso yo por no conocer todas las funciones que me ofrece python y las libs de xbmc y de pelisalacarta.... ;)
Luego veo tu codigo y pienso "hostias, con lo facil que era!" ;) ;) ... nah, se ve que tienes mucho gusto programando.

Ayer me puse a ver como va lo de los conectores y me decidí a hacer el de myvi.ru , es sencillo...creo que lo tengo, pero se me ha olvidado dejarlo en el git, lo estuve probando ayer en la raspberry y no me funcionaba, pero creo que la mayoría de enlaces que encontré para probar estaban ya eliminados del server :( ... o bien no he hecho algo bien ( que sería lo más normal )

@robalo, a ver, como de esto no está nada explicado por ahí, estoy sacando mis propias conclusiones, a ver si estoy en lo cierto...
Para el tema del conector, lo que estamos intentando es "traducir" mediante el find_videos(text) <<--- la url pegada en la pagina del canal, por la url del video en el "contenedor" ... en el caso de myvi.ru ---> http://myvi.ru/player/embed/html/(id_del_video) ---> http://myvi.ru/watch/(id_del_video_2) ... ¿¿?? Aqui, id_del_video <> id_del_video_2 ... y ayer no mire mucho pero no vi como obtener ese id_del_video_2
.... no tengo muy claro esta parte de momento.

Código: Seleccionar todo

patronvideos --=  '//(?:www.)?myvi.../player/embed/html/([^/]+)'
matches = re.compile(patronvideos, re.DOTALL).findall(text)

for media_id in matches:
     url='http://myvi.ru/watch/%s|http://myvi.ru/player/embed/html/%s' %s (media_id,media_id)
La segunda parte del url ( separado por el pipe )es el "Referrer", vale, desde donde se le llamó ... ( desde "text" ), no?
Y la primera parte del url sería la url que necesitamos para abrir el video, no ?
Lo que no veo es en este server la correlacion entre media_id de la primera parte y de la segunda, creo que son diferentes...
Uhm, igual necesito una explicación más clara de "de donde venimos" y "a donde vamos" ;) ;)

por ejemplo, para este video ...
veo que el codigo para embeberlo que tiene asociado es este :
<iframe width="640" height="390" src="//myvi.ru/player/embed/html/ofhCSghdp-o_Kd6NUCNMQ79q2MBCQoNzmd1ntxNcn2tnGZn0xWd6deBSLWsOm8iep0" frameborder="0" allowfullscreen></iframe>
así de primeras... no veo bien la relacion...

Agradecería un poco más de luz.

.... a find_videos(text) me está llegando la url http://myvi.ru/player/embed/html/ofhCSg ... FNYJu-Bp10 ( por ejemplo ) .... Y... si devuelvo esta misma url ?? no abriria el video ??



Esta semana cogeré vacaciones ( el jueves ), a ver si saco un rato y saco los de openload.co, y los otros .ru que suelen salir por Repelis.
Y mirare a ver alguno de los anime-latino, a ver si no son muy dificiles... ;)

Re: Canal Anime-Latino

Publicado: 15 Sep 2015, 09:32
por kampanita
Un poco de luz, @DrZ3r0 o @robalo ... o @neno1978 ...o @jesus... ;) a ver si entiendo...

Si abro el enlace que esta en la web del canal .. por ejemplo

http://myvi.ru/player/embed/html/ofhCSg ... FNYJu-Bp10

abro la pagina ... y creo que tengo la relación ....

Código: Seleccionar todo

 <script type="text/javascript">
        loadPlayer({
            autoplay: false,
            posterUrl:'http://fs.myvi.ru/thumbnail/ofhCSghdp-o_Kd6NUCNMQ79q2MBCQoNzmd1ntxNcn2tmcEgXtManU-1lFNYJu-Bp10/default_hq.jpg',
            dataUrl:'/player/api/Video/Get/ofhCSghdp-o_Kd6NUCNMQ79q2MBCQoNzmd1ntxNcn2tmcEgXtManU-1lFNYJu-Bp10?sig=40eedbb350e8f26c0c58ef3a5126e9bf&ap=True',
            advarkPluginName:'advarksprutoplugin',
            sprutoData:{"assetsroot":"\/\/videoplayer.ru\/ru\/player\/spruto\/images\/","behavior":{"afterPlay":"playlist","autoplay":false,"clickVideo":"video","playlistMode":"navigate_blank"},"design":{"endscreen":{"enable":true,"enableDownload":false,"showTitle":true},"logo":{"clickUrl":"video","enable":true},"social":{"embed":true,"enable":true,"parse":false}},"jsplayer":"\/\/videoplayer.ru\/ru\/player\/spruto\/sp.js?v=2.1.3.1","onPlayerReady":"onPlayerReady","playlist":[{"duration":1840,"embedHtml":"<iframe width=\"640\" height=\"390\" src=\"\/\/myvi.ru\/player\/embed\/html\/ofhCSghdp-o_Kd6NUCNMQ79q2MBCQoNzmd1ntxNcn2tl9of0OaD3gzQVTrhg-TlR80\" frameborder=\"0\" allowfullscreen><\/iframe>","extensions":{"AdvarkSprutoPlayerPlugin":{"videoPageUrl":"http:\/\/www.myvi.ru\/watch\/gIc8TuqTFUCwDEtUnMvuIA2","videoTitle":"09252027098","videoUrl":"\/\/myvi.tv\/embed\/html\/ofhCSghdp-o_Kd6NUCNMQ79q2MBCQoNzmd1ntxNcn2tl9of0OaD3gzQVTrhg-TlR80"},"MyviExtensions":{"shareUrl":"\/\/myvi.ru\/player\/embed\/redirect\/ofhCSghdp-o_Kd6NUCNMQ79q2MBCQoNzmd1ntxNcn2tl9of0OaD3gzQVTrhg-TlR80"}},"link":"\/\/myvi.ru\/player\/embed\/redirect\/ofhCSghdp-o_Kd6NUCNMQ79q2MBCQoNzmd1ntxNcn2tl9of0OaD3gzQVTrhg-TlR80","posterUrl":"http:\/\/fs81.myvi.ru\/1793603_tm1.jpg","title":"09252027098","video":[b][size=150][{"url":"http:\/\/fs.myvi.ru\/video\/1793603.mp4?uid=&puid=&ref=&d=1840&rnd=153054502&sig=b723f19ebc8369446cc2dfba75236d8c"}],[/size][/b]"videoId":"4e3c8780-93ea-4015-b00c-4b549ccbee20"}],"playlistUrl":"http:\/\/api.myvi.ru\/v2.0\/endscreen?video_id=1793603&player_type=external&sig=d06f8c3412e7d877d448a59177861a43","plugins":[{"name":"advarksprutoplugin","settings":{"categoryId":5,"id":"14-1-3"},"url":"advark"},{"name":null,"settings":{"comScoreContentType":"06","comScoreId":"17199490","gaAccount":"UA-1067932-5","gaCategory":"VideoPlayer","gaLabel":"prikoly_razvlechenia"},"url":"counters"}],"skin":"\/\/videoplayer.ru\/ru\/player\/spruto\/skin_myvi.swf?v=1.0.0.3","streaming":{"enable":true,"flvOffsetParameter":"position","mp4OffsetParameter":"offset","streamingProvider":"async_server"},"swfplayer":"\/\/videoplayer.ru\/ru\/player\/spruto\/player.swf?v=3.1.0.4","uiLanguage":"ru"},
            fixCrossDomainCookieUrl: '/player/embed/Cookies',
            testCookieUrl: "",
            locale: {videoNotFound:'Видео не найдено', videoNotSupported:'Видео на данном устройстве не доступно', unknownError:'Неизвестная ошибка. ', tryAgain:'Повторить?', gotoWatchPage:'Перейдите по ссылке на страницу просмотра видео', clickRequired:'Ошибка воспроизведения видео. Попробуйте еще раз'}
        });
        var img = new Image();
        img.src = "//counter.yadro.ru/hit?r" + escape(document.referrer) +
            ((typeof (screen) == "undefined") ? "" :
            ";s" + screen.width + "*" + screen.height + "*" +
            (screen.colorDepth ? screen.colorDepth : screen.pixelDepth)) +
            ";uhttp%3a%2f%2fwww.myvi.ru;" + Math.random();
        document.body.appendChild(img);
    </script>

_Uhmmm, es decir, tendria que devolver -->
[{"url":"http:\/\/fs.myvi.ru\/video\/1793603.mp4?uid=&puid=&ref=&d=1840&rnd=153054502&sig=b723f19ebc8369446cc2dfba75236d8c"}],

http://fs.myvi.ru/video/1793603.mp4?uid ... ba75236d8c

correcto ¿¿??



algo así ¿?

myvi.ru

Código: Seleccionar todo

# -*- coding: utf-8 -*-
# ------------------------------------------------------------
# pelisalacarta - XBMC Plugin
# Conector for myvi.ru
# http://blog.tvalacarta.info/plugin-xbmc/pelisalacarta/
# by Kampanita
# ------------------------------------------------------------

import re
import urllib

from core import scrapertools
from core import logger

headers = [
    ['User-Agent', 'Mozilla/5.0 (Windows NT 6.1; rv:38.0) Gecko/20100101 Firefox/38.0'],
    ['Accept-Encoding', 'gzip, deflate'],
    ['Connection', 'keep-alive']
]


def get_video_url(page_url, premium=False, user="", password="", video_password=""):
    logger.info("[myviru.py] url=" + page_url)
    video_urls = []

    headers.append(['Referer', page_url.split('|')[1]])

    data = scrapertools.cache_page(page_url.split('|')[0], headers=headers)

    headers.append(['X-Requested-With', 'ShockwaveFlash/99.999.999.999'])
    _headers = urllib.urlencode(dict(headers))

    # URL del vídeo
    for type, url in re.findall(r'\{"name":"([^"]+)","video:.*?url":"([^"]+)"', data, re.DOTALL):
        url = url.replace("%3B", ";").replace(r"\u0026", "&")
        url += '|' + _headers
        video_urls.append([type + " [myviru]", url])

    return video_urls


# Encuentra vídeos del servidor en el texto pasado
def find_videos(text):
    encontrados = set()
    devuelve = []

    patronvideos = '//(?:www.)?myvi.../player/embed/html/([^/]+)'
    logger.info("[myviru.py] find_videos #" + patronvideos + "#")

    matches = re.compile(patronvideos, re.DOTALL).findall(text)

    for media_id in matches:
        titulo = "[myviru]"
       
        url='http://myvi.ru/player/embed/html/%s|http://myvi.ru/player/embed/html/%s' %s (media_id,media_id)
        if url not in encontrados:
            logger.info("  url=" + url)
            devuelve.append([titulo, url, 'myviru'])
            encontrados.add(url)
        else:
            logger.info("  url duplicada=" + url)

    return devuelve

PD: Todo este código está sin probar, ahora mismo estoy "offline" en el kodi, estoy detrás de un proxy con firewall y el kodi en windows donde estoy ahora mismo...no me va :( ... Probaré "cuando arrivie a casa"