Pastebin launched a little side project called VERYVIRAL.com, check it out ;-) Want more features on Pastebin? Sign Up, it's FREE!
Guest

yaske

By: a guest on Nov 7th, 2012  |  syntax: Python  |  size: 8.24 KB  |  views: 187  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. # -*- coding: utf-8 -*-
  2. #------------------------------------------------------------
  3. # pelisalacarta - XBMC Plugin
  4. # Canal para yaske
  5. # http://blog.tvalacarta.info/plugin-xbmc/pelisalacarta/
  6. #------------------------------------------------------------
  7. import urlparse,urllib2,urllib,re
  8. import os, sys
  9.  
  10. from core import logger
  11. from core import config
  12. from core import scrapertools
  13. from core.item import Item
  14. from servers import servertools
  15.  
  16. __channel__ = "yaske"
  17. __category__ = "F"
  18. __type__ = "generic"
  19. __title__ = "Yaske.net"
  20. __language__ = "ES"
  21.  
  22. DEBUG = config.get_setting("debug")
  23.  
  24. def isGeneric():
  25.     return True
  26.  
  27. def mainlist(item):
  28.     logger.info("[yaske.py] mainlist")
  29.  
  30.     itemlist = []
  31.     itemlist.append( Item(channel=__channel__, title="Portada"            , action="peliculas", url="http://www.yaske.net/es/peliculas/"))
  32.     itemlist.append( Item(channel=__channel__, title="Categorías"         , action="categorias", url="http://www.yaske.net/es/peliculas/"))
  33.     itemlist.append( Item(channel=__channel__, title="Últimas agregadas"  , action="peliculas", url="http://www.yaske.net/es/peliculas/ultimas"))
  34.     itemlist.append( Item(channel=__channel__, title="Buscar"             , action="search") )
  35.  
  36.     return itemlist
  37.        
  38. def search(item,texto):
  39.  
  40.     logger.info("[yaske.py] search")
  41.     itemlist = []
  42.  
  43.     try:
  44.         item.url = "http://www.yaske.net/es/peliculas/search/%s"
  45.         item.url = item.url % texto
  46.         item.extra = ""
  47.         itemlist.extend(peliculas(item))
  48.         itemlist = sorted(itemlist, key=lambda Item: Item.title)
  49.        
  50.         return itemlist
  51.  
  52.     except:
  53.         import sys
  54.         for line in sys.exc_info():
  55.             logger.error( "%s" % line )
  56.         return []
  57.  
  58. def peliculas(item):
  59.     logger.info("[yaske.py] listado")
  60.  
  61.     # Descarga la página
  62.     data = scrapertools.downloadpageGzip(item.url)
  63.  
  64.     # Extrae las entradas
  65.     patron  = '<div class="itemdos c\d+" id="numitem\d+"><div class="img_box"><a href="([^"]+)" rel="([^"]+)">[^<]+'
  66.     patron += '<img src="([^"]+)"[^<]+</a>[^<]+'
  67.     patron += '<div class="quality">([^<]+)</div><div[^<]+<span[^<]+</span></div></div>[^<]+'
  68.     patron += '<div[^<]+<div[^<]+</div><div[^<]+<a[^<]+</a></div><div[^<]+</div>[^<]+'
  69.     patron += '<div class="idiomes">(.*?)</div>'
  70.     matches = re.compile(patron,re.DOTALL).findall(data)
  71.     #scrapertools.printMatches(matches)
  72.     itemlist = []
  73.  
  74.     for scrapedurl,scrapedtitle,scrapedthumbnail,calidad,idiomas in matches:
  75.        
  76.         patronidiomas = '<img src="[^"]+" title="([^"]+)"'
  77.         matchesidiomas = re.compile(patronidiomas,re.DOTALL).findall(idiomas)
  78.         idiomas_disponibles = ""
  79.         for idioma in matchesidiomas:
  80.             idiomas_disponibles = idiomas_disponibles + idioma.strip() + "/"
  81.         if len(idiomas_disponibles)>0:
  82.             idiomas_disponibles = "["+idiomas_disponibles[:-1]+"]"
  83.        
  84.         title = scrapedtitle.strip()+" "+idiomas_disponibles+"["+calidad+"]"
  85.         url = scrapedurl
  86.         thumbnail = scrapedthumbnail
  87.         scrapedplot = ""
  88.         if (DEBUG): logger.info("title=["+title+"], url=["+url+"], thumbnail=["+thumbnail+"]")
  89.         itemlist.append( Item(channel=__channel__, action="findvideos", title=title , url=url , thumbnail=thumbnail , plot=scrapedplot , viewmode="movie", folder=True) )
  90.  
  91.     # Extrae el paginador
  92.     patronvideos  = "<a href='([^']+)'>\&raquo\;</a>"
  93.     matches = re.compile(patronvideos,re.DOTALL).findall(data)
  94.     scrapertools.printMatches(matches)
  95.  
  96.     if len(matches)>0:
  97.         scrapedurl = urlparse.urljoin(item.url,matches[0])
  98.         itemlist.append( Item(channel=__channel__, action="peliculas", title=">> Página siguiente" , url=scrapedurl , folder=True) )
  99.  
  100.     return itemlist
  101.  
  102. def categorias(item):
  103.     logger.info("[yaske.py] categorias")
  104.  
  105.     # Descarga la página
  106.     data = scrapertools.downloadpageGzip(item.url)
  107.     data = scrapertools.get_match(data,'<div cc-type="generos">(.*?)</div>')
  108.  
  109.     # Extrae las entradas
  110.     #<li><a href="http://www.yaske.net/es/peliculas/genero/drama" cc-value="drama">Drama</a>
  111.     patron  = '<li><a href="([^"]+)"[^>]+>([^<]+)</a>'
  112.     matches = re.compile(patron,re.DOTALL).findall(data)
  113.     #scrapertools.printMatches(matches)
  114.     itemlist = []
  115.  
  116.     for scrapedurl,scrapedtitle in matches:
  117.         scrapedthumbnail = ""
  118.         scrapedplot = ""
  119.         if (DEBUG): logger.info("title=["+scrapedtitle+"], url=["+scrapedurl+"], thumbnail=["+scrapedthumbnail+"]")
  120.         itemlist.append( Item(channel=__channel__, action="peliculas", title=scrapedtitle , url=scrapedurl , thumbnail=scrapedthumbnail , plot=scrapedplot , folder=True) )
  121.  
  122.     return itemlist
  123.  
  124. def findvideos(item):
  125.     logger.info("[yaske.py] findvideos")
  126.  
  127.     # Descarga la página
  128.     data = scrapertools.downloadpageGzip(item.url)
  129.  
  130.     # Extrae las entradas
  131.     '''
  132.    <tr bgcolor="#e6e3e3"><td align="left" >
  133.    <a href="http://www.yaske.net/es/reproductor/pelicula/1748/10734/" title="Los mercenarios 2" target="_blank" style="text-decoration: none;"><img src="http://www.yaske.net/imagenes/servers/veronline.png" height="22" width="22"><b><font color="black">Opcion 11</font></b></a>
  134.    </td> <td align="center"><b>vk</b>
  135.    </td> <td align="left"><span style="margin-left:20px;"><img src="http://www.yaske.net/imagenes/flags/la_la.png" width="23"> Latino</span></td> <td align="center" class="center">
  136.    <span title="DVD SCREENER" style="text-transform:capitalize;">dvd screener</span></td> <td align="center" class="center">
  137.    <a href="http://www.yaske.net/es/reproductor/pelicula/1748/10734/" class="verLink" title="Los mercenarios 2" target="_blank"><img align="middle" width="100" height="26"  src="http://3.bp.blogspot.com/-ueSY010WZK0/UAgWBc6FIGI/AAAAAAAAHVw/P0Qe5GbwJS4/s1600/veron.png" /></a>
  138.    </td> <td align="center" class="episode-uploader"><span>
  139.    <iframe src="http://www.facebook.com/plugins/like.php?href=http://www.yaske.net/es/pelicula/0001748/ver-the-expendables-2-online.html?ref=opcion11&amp;send=false&amp;layout=button_count&amp;width=75&amp;show_faces=true&amp;action=like&amp;colorscheme=light&amp;font=arial&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:75px; height:21px;" allowTransparency="true"></iframe>
  140.    </span></td> <td align="center" class="center" style="overflow:hidden"><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.yaske.net/es/pelicula/0001748/ver-the-expendables-2-online.html?ref=opcion11" data-count="horizontal">Tweet</a></td> </tr>  </tbody>
  141.    '''
  142.     patron  = '<tr[^<]+<td[^<]+'
  143.     patron += '<a href="([^"]+)" title="[^"]+"[^<]+<img[^<]+<b><font[^>]+>([^<]+)</font></b></a>[^<]+'
  144.     patron += '</td[^<]+<td[^<]+<b>([^<]+)</b>[^<]+'
  145.     patron += '</td[^<]+<td[^<]+<span[^<]+<img[^>]+>([^<]+)</span></td[^<]+<td[^<]+'
  146.     patron += '<span title="([^"]+)"'
  147.  
  148.     matches = re.compile(patron,re.DOTALL).findall(data)
  149.     itemlist = []
  150.  
  151.     for url,title,server,idioma,calidad in matches:
  152.         scrapedtitle = title + " en "+server.strip()+" ["+idioma+" / "+calidad+"]"
  153.         scrapedurl = url
  154.         scrapedthumbnail = ""
  155.         scrapedplot = ""
  156.         if (DEBUG): logger.info("title=["+scrapedtitle+"], url=["+scrapedurl+"], thumbnail=["+scrapedthumbnail+"]")
  157.         itemlist.append( Item(channel=__channel__, action="play", title=scrapedtitle , url=scrapedurl , thumbnail=scrapedthumbnail , plot=scrapedplot , folder=False) )
  158.  
  159.     return itemlist
  160.  
  161. def play(item):
  162.     logger.info("[letmewatchthis.py] play")
  163.    
  164.     itemlist=[]
  165.    
  166.     data = scrapertools.downloadpageGzip(item.url)
  167.     #logger.info("data="+data)
  168.     itemlist = servertools.find_video_items(data=data)
  169.    
  170.     return itemlist
  171.  
  172.  
  173. # Verificación automática de canales: Esta función debe devolver "True" si está ok el canal.
  174. def test():
  175.     from servers import servertools
  176.     # mainlist
  177.     mainlist_items = mainlist(Item())
  178.     # Da por bueno el canal si alguno de los vídeos de "Novedades" devuelve mirrors
  179.     peliculas_items = peliculas(mainlist_items[0])
  180.     bien = False
  181.     for pelicula_item in peliculas_items:
  182.         mirrors = findvideos( item=pelicula_item )
  183.         if len(mirrors)>0:
  184.             bien = True
  185.             break
  186.  
  187.     return bien