# -*- coding: utf-8 -*-
import re
import urllib
import urlparse
from core import httptools
from core import scrapertools
from core.item import Item
from platformcode import config, logger
host = "https://www.porntrex.com"
def mainlist(item):
logger.info()
itemlist = []
config.set_setting("url_error", False, "porntrex")
itemlist.append(item.clone(action="lista", title="Nuevos Vídeos", url=host + "/latest-updates/"))
itemlist.append(item.clone(action="lista", title="Mejor Valorados", url=host + "/top-rated/"))
itemlist.append(item.clone(action="lista", title="Más Vistos", url=host + "/most-popular/"))
itemlist.append(item.clone(action="categorias", title="Categorías", url=host + "/categories/"))
itemlist.append(item.clone(action="categorias", title="Modelos",
url=host + "/models/?mode=async&function=get_block&block_id=list_models_models" \
"_list&sort_by=total_videos"))
itemlist.append(item.clone(action="playlists", title="Listas", url=host + "/playlists/"))
itemlist.append(item.clone(action="tags", title="Tags", url=host + "/tags/"))
itemlist.append(item.clone(title="Buscar...", action="search"))
itemlist.append(item.clone(action="configuracion", title="Configurar canal...", text_color="gold", folder=False))
return itemlist
def configuracion(item):
from platformcode import platformtools
ret = platformtools.show_channel_settings()
platformtools.itemlist_refresh()
return ret
def search(item, texto):
logger.info()
item.url = "%s/search/%s/" % (host, texto.replace("+", "-"))
item.extra = texto
try:
return lista(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 lista(item):
logger.info()
itemlist = []
# Descarga la pagina
data = get_data(item.url)
action = "play"
if config.get_setting("menu_info", "porntrex"):
action = "menu_info"
# Extrae las entradas
patron = '
.*?([^<]+)<'
matches = scrapertools.find_multiple_matches(data, patron)
for scrapedurl, scrapedtitle, scrapedthumbnail, quality, duration in matches:
if "go.php?" in scrapedurl:
scrapedurl = urllib.unquote(scrapedurl.split("/go.php?u=")[1].split("&")[0])
scrapedthumbnail = urlparse.urljoin(host, scrapedthumbnail)
else:
scrapedurl = urlparse.urljoin(host, scrapedurl)
if duration:
scrapedtitle = "%s - %s" % (duration, scrapedtitle)
if '>HD<' in quality:
scrapedtitle += " [COLOR red][HD][/COLOR]"
itemlist.append(item.clone(action=action, title=scrapedtitle, url=scrapedurl, thumbnail=scrapedthumbnail,
fanart=scrapedthumbnail))
# Extrae la marca de siguiente página
if item.extra:
next_page = scrapertools.find_single_match(data, '
.*?from_videos\+from_albums:(\d+)')
if next_page:
if "from_videos=" in item.url:
next_page = re.sub(r'&from_videos=(\d+)', '&from_videos=%s' % next_page, item.url)
else:
next_page = "%s?mode=async&function=get_block&block_id=list_videos_videos_list_search_result" \
"&q=%s&category_ids=&sort_by=post_date&from_videos=%s" % (item.url, item.extra, next_page)
itemlist.append(item.clone(action="lista", title=">> Página Siguiente", url=next_page))
else:
next_page = scrapertools.find_single_match(data, '.*?href="([^"]*)"')
if next_page and not next_page.startswith("#"):
if "go.php?" in next_page:
next_page = urllib.unquote(next_page.split("/go.php?u=")[1].split("&")[0])
else:
next_page = urlparse.urljoin(host, next_page)
itemlist.append(item.clone(action="lista", title=">> Página Siguiente", url=next_page))
else:
next_page = scrapertools.find_single_match(data, '.*?from:(\d+)')
if next_page:
if "from=" in item.url:
next_page = re.sub(r'&from=(\d+)', '&from=%s' % next_page, item.url)
else:
next_page = "%s?mode=async&function=get_block&block_id=list_videos_common_videos_list&sort_by=post_date&from=%s" % (
item.url, next_page)
itemlist.append(item.clone(action="lista", title=">> Página Siguiente", url=next_page))
return itemlist
def categorias(item):
logger.info()
itemlist = []
# Descarga la pagina
data = get_data(item.url)
# Extrae las entradas
patron = '([^<]+)<'
matches = scrapertools.find_multiple_matches(data, patron)
for scrapedurl, scrapedtitle, scrapedthumbnail, videos in matches:
if "go.php?" in scrapedurl:
scrapedurl = urllib.unquote(scrapedurl.split("/go.php?u=")[1].split("&")[0])
scrapedthumbnail = urllib.unquote(scrapedthumbnail.split("/go.php?u=")[1].split("&")[0])
else:
scrapedurl = urlparse.urljoin(host, scrapedurl)
if videos:
scrapedtitle = "%s (%s)" % (scrapedtitle, videos)
itemlist.append(item.clone(action="lista", title=scrapedtitle, url=scrapedurl, thumbnail=scrapedthumbnail,
fanart=scrapedthumbnail))
# Extrae la marca de siguiente página
next_page = scrapertools.find_single_match(data, '.*?from:(\d+)')
if next_page:
if "from=" in item.url:
next_page = re.sub(r'&from=(\d+)', '&from=%s' % next_page, item.url)
else:
next_page = "%s&from=%s" % (item.url, next_page)
itemlist.append(item.clone(action="categorias", title=">> Página Siguiente", url=next_page))
return itemlist
def playlists(item):
logger.info()
itemlist = []
# Descarga la pagina
data = get_data(item.url)
# Extrae las entradas
patron = '([^<]+)<'
matches = scrapertools.find_multiple_matches(data, patron)
for scrapedurl, scrapedtitle, scrapedthumbnail, videos in matches:
if "go.php?" in scrapedurl:
scrapedurl = urllib.unquote(scrapedurl.split("/go.php?u=")[1].split("&")[0])
scrapedthumbnail = urlparse.urljoin(host, scrapedthumbnail)
else:
scrapedurl = urlparse.urljoin(host, scrapedurl)
if videos:
scrapedtitle = "%s (%s)" % (scrapedtitle, videos)
itemlist.append(item.clone(action="videos", title=scrapedtitle, url=scrapedurl, thumbnail=scrapedthumbnail,
fanart=scrapedthumbnail))
# Extrae la marca de siguiente página
next_page = scrapertools.find_single_match(data, '
.*?href="([^"]+)"')
if next_page:
if "go.php?" in next_page:
next_page = urllib.unquote(next_page.split("/go.php?u=")[1].split("&")[0])
else:
next_page = urlparse.urljoin(host, next_page)
itemlist.append(item.clone(action="playlists", title=">> Página Siguiente", url=next_page))
return itemlist
def videos(item):
logger.info()
itemlist = []
# Descarga la pagina
data = get_data(item.url)
action = "play"
if config.get_setting("menu_info", "porntrex"):
action = "menu_info"
# Extrae las entradas
patron = '\s*([^<]+)<'
matches = scrapertools.find_multiple_matches(data, patron)
for scrapedurl, scrapedthumbnail, scrapedtitle in matches:
scrapedtitle = scrapedtitle.strip()
if "go.php?" in scrapedurl:
scrapedurl = urllib.unquote(scrapedurl.split("/go.php?u=")[1].split("&")[0])
scrapedthumbnail = urlparse.urljoin(host, scrapedthumbnail)
itemlist.append(item.clone(action=action, title=scrapedtitle, url=scrapedurl, thumbnail=scrapedthumbnail,
fanart=scrapedthumbnail))
# Extrae la marca de siguiente página
next_page = scrapertools.find_single_match(data, '.*?from:(\d+)')
if next_page:
if "from=" in item.url:
next_page = re.sub(r'&from=(\d+)', '&from=%s' % next_page, item.url)
else:
next_page = "%s?mode=async&function=get_block&block_id=playlist_view_playlist_view&sort_by" \
"=added2fav_date&&from=%s" % (item.url, next_page)
itemlist.append(item.clone(action="videos", title=">> Página Siguiente", url=next_page))
return itemlist
def play(item):
logger.info()
itemlist = []
data = get_data(item.url)
patron = '(?:video_url|video_alt_url[0-9]*)\s*:\s*\'([^\']+)\'.*?(?:video_url_text|video_alt_url[0-9]*_text)\s*:\s*\'([^\']+)\''
matches = scrapertools.find_multiple_matches(data, patron)
if not matches:
patron = '\s*(.*?)')
for title in matches:
title = title.strip()
if title not in letras:
letras.append(title)
itemlist.append(Item(channel=item.channel, action="tags", url=item.url, title=title, extra=title))
else:
if not item.length:
item.length = 0
bloque = scrapertools.find_single_match(data,
'>%s(.*?)(?:(?!%s)(?!#)[A-Z#]{1}|