Merge pull request #9 from kodiondemand/master

riorganizzazione
This commit is contained in:
greko
2019-05-23 19:00:39 +02:00
committed by GitHub
81 changed files with 1130 additions and 5372 deletions
+2 -2
View File
@@ -5,8 +5,8 @@
import re import re
import urlparse import urlparse
from channels import filtertools, autoplay, support from specials import filtertools, autoplay
from core import servertools, httptools, tmdb, scrapertoolsV2 from core import servertools, httptools, tmdb, scrapertoolsV2, support
from core.item import Item from core.item import Item
from platformcode import logger, config from platformcode import logger, config
+1 -1
View File
@@ -14,7 +14,7 @@
{ {
"id": "modo_grafico", "id": "modo_grafico",
"type": "bool", "type": "bool",
"label": "Buscar información extra", "label": "Cerca informazioni extra",
"default": true, "default": true,
"enabled": true, "enabled": true,
"visible": true "visible": true
+2 -6
View File
@@ -5,13 +5,9 @@
# -*- last change: 04/05/2019 # -*- last change: 04/05/2019
from channels import autoplay, support, filtertools from specials import autoplay, filtertools
from channelselector import get_thumb from channelselector import get_thumb
from core import httptools from core import httptools, channeltools, scrapertools, servertools, tmdb, support
from core import channeltools
from core import scrapertools
from core import servertools
from core import tmdb
from core.item import Item from core.item import Item
from platformcode import config, logger from platformcode import config, logger
+2 -2
View File
@@ -5,8 +5,8 @@
import re import re
from channels import autoplay, filtertools, support from specials import autoplay, filtertools
from core import servertools from core import servertools, support
from core.item import Item from core.item import Item
from platformcode import logger, config from platformcode import logger, config
+1 -1
View File
@@ -7,7 +7,7 @@ import re
from core import httptools, scrapertools, servertools, tmdb from core import httptools, scrapertools, servertools, tmdb
from platformcode import logger, config from platformcode import logger, config
from core.item import Item from core.item import Item
from channels import autoplay from specials import autoplay
from channelselector import thumb from channelselector import thumb
+3 -3
View File
@@ -5,9 +5,9 @@
import re import re
from channels import filtertools, autoplay, support, autorenumber from specials import filtertools, autoplay, autorenumber
from channels.support import log, menu from core.support import log, menu
from core import servertools, httptools, scrapertoolsV2, scrapertools, tmdb from core import servertools, httptools, scrapertoolsV2, scrapertools, tmdb, support
from platformcode import logger, config from platformcode import logger, config
from core.item import Item from core.item import Item
from lib.js2py.host import jsfunctions from lib.js2py.host import jsfunctions
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"id": "animesaturn", "id": "animesaturn",
"name": "AnimeSaturn", "name": "AnimeSaturn",
"active": false, "active": true,
"adult": false, "adult": false,
"language": ["ita"], "language": ["ita"],
"thumbnail": "animesaturn.png", "thumbnail": "animesaturn.png",
+50 -25
View File
@@ -8,9 +8,9 @@ import re
import time import time
import urlparse import urlparse
import channelselector import channelselector, filtertools
from channels import autoplay, support, filtertools from core import httptools, tmdb, scrapertools, servertools, support
from core import httptools, tmdb, scrapertools, servertools from specials import autoplay
from core.item import Item from core.item import Item
from platformcode import logger, config from platformcode import logger, config
__channel__ = "animesaturn" __channel__ = "animesaturn"
@@ -30,11 +30,10 @@ def mainlist(item):
support.log(item.channel + 'mainlist') support.log(item.channel + 'mainlist')
itemlist = [] itemlist = []
support.menu(itemlist, 'Anime bold', 'lista_anime', "%s/animelist?load_all=1" % host,'anime') support.menu(itemlist, 'Anime bold', 'lista_anime', "%s/animelist?load_all=1" % host,'anime')
# support.menu(itemlist, 'Novità submenu', 'ultimiep', "%s/fetch_pages.php?request=episodes" % host,'anime')
itemlist.append( itemlist.append(
Item(channel=item.channel, Item(channel=item.channel,
action="ultimiep", action="ultimiep",
url="%s/fetch_pages.php?request=episodes" % host, url="%s/fetch_pages.php?request=episodios" % host,
title=support.typo("Novità submenu"), title=support.typo("Novità submenu"),
extra="", extra="",
contentType='anime', contentType='anime',
@@ -124,29 +123,36 @@ def lista_anime(item):
if (p - 1) * PERPAGE > i: continue if (p - 1) * PERPAGE > i: continue
if i >= p * PERPAGE: break if i >= p * PERPAGE: break
title = cleantitle(scrapedtitle).replace('(ita)','(ITA)') title = cleantitle(scrapedtitle).replace('(ita)','(ITA)')
movie = False
showtitle = title showtitle = title
if '(ITA)' in title: if '(ITA)' in title:
title = title.replace('(ITA)','').strip() title = title.replace('(ITA)','').strip()
showtitle = title showtitle = title
title += ' '+support.typo(' [ITA] color kod') title += ' '+support.typo(' (ITA)')
infoLabels = {} infoLabels = {}
# if 'Akira' in title:
# movie = True
# infoLabels['year']= 1988
itemlist.append( itemlist.append(
Item(channel=item.channel, Item(channel=item.channel,
extra=item.extra, extra=item.extra,
action="episodios", action="episodios" if movie == False else 'findvideos',
title=title, title=title,
url=scrapedurl, url=scrapedurl,
thumbnail=scrapedthumbnail, thumbnail=scrapedthumbnail,
fulltitle=showtitle, fulltitle=showtitle,
show=showtitle, show=showtitle,
contentTitle=showtitle,
plot=scrapedplot, plot=scrapedplot,
contentType='episode', contentType='episode' if movie == False else 'movie',
originalUrl=scrapedurl, originalUrl=scrapedurl,
infoLabels=infoLabels, infoLabels=infoLabels,
folder=True)) folder=True))
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True) tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
autorenumber.renumber(itemlist)
# Paginazione # Paginazione
if len(matches) >= p * PERPAGE: if len(matches) >= p * PERPAGE:
@@ -175,6 +181,10 @@ def episodios(item):
anime_id = scrapertools.find_single_match(data, r'\?anime_id=(\d+)') anime_id = scrapertools.find_single_match(data, r'\?anime_id=(\d+)')
#movie or series
movie = scrapertools.find_single_match(data, r'\Episodi:</b>\s(\d*)\sMovie')
data = httptools.downloadpage( data = httptools.downloadpage(
host + "/loading_anime?anime_id=" + anime_id, host + "/loading_anime?anime_id=" + anime_id,
headers={ headers={
@@ -188,7 +198,8 @@ def episodios(item):
for scrapedtitle, scrapedurl in matches: for scrapedtitle, scrapedurl in matches:
scrapedtitle = cleantitle(scrapedtitle) scrapedtitle = cleantitle(scrapedtitle)
scrapedtitle = re.sub(r'<[^>]*?>', '', scrapedtitle) scrapedtitle = re.sub(r'<[^>]*?>', '', scrapedtitle)
scrapedtitle = '[COLOR azure][B]' + scrapedtitle + '[/B][/COLOR]' scrapedtitle = '[B]' + scrapedtitle + '[/B]'
itemlist.append( itemlist.append(
Item( Item(
channel=item.channel, channel=item.channel,
@@ -202,10 +213,16 @@ def episodios(item):
fanart=item.thumbnail, fanart=item.thumbnail,
thumbnail=item.thumbnail)) thumbnail=item.thumbnail))
if((len(itemlist) == 1 and 'Movie' in itemlist[0].title) or movie):
item.url = itemlist[0].url
item.contentType = 'movie'
return findvideos(item)
# tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
# support.videolibrary(itemlist,item,'bold color kod')
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
autorenumber.renumber(itemlist, item)
support.videolibrary(itemlist,item,'bold color kod')
return itemlist return itemlist
@@ -214,24 +231,32 @@ def episodios(item):
# ---------------------------------------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------------------------------------
def findvideos(item): def findvideos(item):
support.log(item.channel + " findvideos") support.log(item.channel + " findvideos")
originalItem = item
if(item.contentType == 'movie'):
episodes = episodios(item)
if(len(episodes)>0):
item.url = episodes[0].url
itemlist = [] itemlist = []
data = httptools.downloadpage(item.url).data data = httptools.downloadpage(item.url).data
patron = r'<a href="([^"]+)"><div class="downloadestreaming">' patron = r'<a href="([^"]+)"><div class="downloadestreaming">'
url = scrapertools.find_single_match(data, patron) url = scrapertools.find_single_match(data, patron)
data = httptools.downloadpage(url).data data = httptools.downloadpage(url).data
patron = r"""<source\s*src=(?:"|')([^"']+?)(?:"|')\s*type=(?:"|')video/mp4(?:"|')>""" # patron = r"""<source\s*src=(?:"|')([^"']+?)(?:"|')\s*type=(?:"|')video/mp4(?:"|')>"""
matches = re.compile(patron, re.DOTALL).findall(data) # matches = re.compile(patron, re.DOTALL).findall(data)
for video in matches: # for video in matches:
itemlist.append( # itemlist.append(
Item( # Item(
channel=item.channel, # channel=item.channel,
action="play", # action="play",
fulltitle=item.fulltitle, # fulltitle=item.fulltitle,
title="".join([item.title, ' ', support.typo(video.title, 'color kod []')]), # title="".join([item.title, ' ', support.typo(video.title, 'color kod []')]),
url=video, # url=video,
contentType=item.contentType, # contentType=item.contentType,
folder=False)) # folder=False))
itemlist = support.server(item, data=data) itemlist = support.server(item, data=data)
# itemlist = filtertools.get_links(itemlist, item, list_language) # itemlist = filtertools.get_links(itemlist, item, list_language)
@@ -295,7 +320,7 @@ def ultimiep(item):
channel=item.channel, channel=item.channel,
action="ultimiep", action="ultimiep",
title=support.typo(config.get_localized_string(30992), 'color kod bold'), title=support.typo(config.get_localized_string(30992), 'color kod bold'),
url=host + "/fetch_pages?request=episodes", url=host + "/fetch_pages?request=episodios",
thumbnail= support.thumb(), thumbnail= support.thumb(),
extra=next_page, extra=next_page,
folder=True)) folder=True))
@@ -317,7 +342,7 @@ def newest(categoria):
item.extra = '' item.extra = ''
try: try:
if categoria == "anime": if categoria == "anime":
item.url = "%s/fetch_pages?request=episodes" % host item.url = "%s/fetch_pages?request=episodios" % host
item.action = "ultimiep" item.action = "ultimiep"
itemlist = ultimiep(item) itemlist = ultimiep(item)
+3 -3
View File
@@ -13,9 +13,9 @@ from channelselector import get_thumb
from core import tmdb from core import tmdb
from core.item import Item from core.item import Item
from platformcode import logger, config from platformcode import logger, config
from channels import autoplay from specials import autoplay
from channels import filtertools from specials import filtertools
from channels import renumbertools from specials import renumbertools
host = "https://animespace.tv/" host = "https://animespace.tv/"
+1 -2
View File
@@ -7,10 +7,9 @@
import re, urllib, urlparse import re, urllib, urlparse
from core import servertools, httptools, scrapertools, tmdb from core import servertools, httptools, scrapertools, tmdb, support
from platformcode import logger, config from platformcode import logger, config
from core.item import Item from core.item import Item
from channels import support
+2 -2
View File
@@ -4,10 +4,10 @@
# ---------------------------------------------------------- # ----------------------------------------------------------
import re, urlparse import re, urlparse
from core import httptools, scrapertoolsV2, servertools, tmdb, tvdb from core import httptools, scrapertoolsV2, servertools, tmdb, tvdb, support
from core.item import Item from core.item import Item
from platformcode import logger, config from platformcode import logger, config
from channels import autoplay, filtertools, support, autorenumber from specials import autoplay, filtertools, autorenumber
from channelselector import thumb from channelselector import thumb
+2 -2
View File
@@ -5,8 +5,8 @@
# ------------------------------------------------------------ # ------------------------------------------------------------
import re, urlparse import re, urlparse
from core import scrapertools, scrapertoolsV2, httptools, servertools, tmdb from core import scrapertools, scrapertoolsV2, httptools, servertools, tmdb, support
from channels import autoplay, filtertools, support from specials import autoplay, filtertools
from core.item import Item from core.item import Item
from platformcode import logger, config from platformcode import logger, config
from channelselector import thumb, get_thumb from channelselector import thumb, get_thumb
+2 -2
View File
@@ -4,8 +4,8 @@
# ------------------------------------------------------------ # ------------------------------------------------------------
import re, urlparse, base64 import re, urlparse, base64
from core import scrapertoolsV2, httptools, servertools, tmdb from core import scrapertoolsV2, httptools, servertools, tmdb, support
from channels import autoplay, support from specials import autoplay
from core.item import Item from core.item import Item
from platformcode import logger, config from platformcode import logger, config
+20 -9
View File
@@ -6,8 +6,8 @@
import re import re
import urlparse import urlparse
from channels import autoplay, filtertools, support from specials import autoplay, filtertools
from core import scrapertoolsV2, httptools, servertools, tmdb from core import scrapertoolsV2, httptools, servertools, tmdb, support
from core.item import Item from core.item import Item
from lib import unshortenit from lib import unshortenit
from platformcode import logger, config from platformcode import logger, config
@@ -53,6 +53,7 @@ def mainlist(item):
support.menu(itemlist, 'Cerca film... submenu', 'search', host, args='film') support.menu(itemlist, 'Cerca film... submenu', 'search', host, args='film')
support.menu(itemlist, 'Serie TV bold', 'peliculas', host + '/serietv/', contentType='episode') support.menu(itemlist, 'Serie TV bold', 'peliculas', host + '/serietv/', contentType='episode')
support.menu(itemlist, 'Aggiornamenti serie tv', 'last', host + '/serietv/aggiornamento-quotidiano-serie-tv/', contentType='episode')
support.menu(itemlist, 'Per Lettera submenu', 'menu', host + '/serietv/', contentType='episode', args="Serie-Tv per Lettera") support.menu(itemlist, 'Per Lettera submenu', 'menu', host + '/serietv/', contentType='episode', args="Serie-Tv per Lettera")
support.menu(itemlist, 'Per Genere submenu', 'menu', host + '/serietv/', contentType='episode', args="Serie-Tv per Genere") support.menu(itemlist, 'Per Genere submenu', 'menu', host + '/serietv/', contentType='episode', args="Serie-Tv per Genere")
support.menu(itemlist, 'Per anno submenu', 'menu', host + '/serietv/', contentType='episode', args="Serie-Tv per Anno") support.menu(itemlist, 'Per anno submenu', 'menu', host + '/serietv/', contentType='episode', args="Serie-Tv per Anno")
@@ -118,21 +119,31 @@ def last(item):
infoLabels = {} infoLabels = {}
quality = '' quality = ''
matches = support.match(item, r'<ahref=([^>]+)>([^(:(|[)]+)([^<]+)<\/a>', r'<strong>Ultimi 100 film Aggiornati:<\/a><\/strong>(.*?)<td>', headers)[0] if item.contentType == 'episode':
matches = support.match(item, r'<a href="([^">]+)".*?>([^(:(|[)]+)([^<]+)<\/a>', '<article class="sequex-post-content.*?</article>', headers)[0]
else:
matches = support.match(item, r'<ahref=([^>]+)>([^(:(|[)]+)([^<]+)<\/a>', r'<strong>Ultimi 100 film Aggiornati:<\/a><\/strong>(.*?)<td>', headers)[0]
for url, title, info in matches: for url, title, info in matches:
add = True
title = title.rstrip() title = title.rstrip()
infoLabels['year'] = scrapertoolsV2.find_single_match(info, r'\(([0-9]+)\)') if item.contentType == 'episode':
quality = scrapertoolsV2.find_single_match(info, r'\[([A-Z]+)\]') for i in itemlist:
if i.url == url: # togliamo i doppi
add = False
else:
infoLabels['year'] = scrapertoolsV2.find_single_match(info, r'\(([0-9]+)\)')
quality = scrapertoolsV2.find_single_match(info, r'\[([A-Z]+)\]')
if quality: if quality:
longtitle = title + support.typo(quality,'_ [] color kod') longtitle = title + support.typo(quality,'_ [] color kod')
else: else:
longtitle = title longtitle = title
itemlist.append( if add:
itemlist.append(
Item(channel=item.channel, Item(channel=item.channel,
action='findvideos', action='findvideos' if item.contentType != 'episode' else 'episodios',
contentType=item.contentType, contentType=item.contentType,
title=longtitle, title=longtitle,
fulltitle=title, fulltitle=title,
+2 -3
View File
@@ -6,9 +6,8 @@ import base64
import re import re
import urlparse import urlparse
from channels import autoplay, support from specials import autoplay, filtertools
from channels import filtertools from core import scrapertools, servertools, httptools, support
from core import scrapertools, servertools, httptools
from platformcode import logger, config from platformcode import logger, config
from core.item import Item from core.item import Item
from lib import unshortenit from lib import unshortenit
+2 -2
View File
@@ -4,8 +4,8 @@
# ------------------------------------------------------------ # ------------------------------------------------------------
import re import re
from channels import filtertools, support, autoplay from specials import filtertools, autoplay
from core import scrapertools, servertools, httptools, scrapertoolsV2 from core import scrapertools, servertools, httptools, scrapertoolsV2, support
from core.item import Item from core.item import Item
host = 'https://cinemastreaming.icu' host = 'https://cinemastreaming.icu'
+2 -2
View File
@@ -15,8 +15,8 @@ from channelselector import get_thumb
from core import tmdb from core import tmdb
from core.item import Item from core.item import Item
from platformcode import logger, config, platformtools from platformcode import logger, config, platformtools
from channels import autoplay from specials import autoplay
from channels import filtertools from specials import filtertools
list_data = {} list_data = {}
+1 -1
View File
@@ -19,7 +19,7 @@
{ {
"id": "modo_grafico", "id": "modo_grafico",
"type": "bool", "type": "bool",
"label": "Buscar información extra", "label": "Cerca informazioni extra",
"default": true, "default": true,
"enabled": true, "enabled": true,
"visible": true "visible": true
+2 -2
View File
@@ -17,8 +17,8 @@
import re import re
from channels import autoplay, filtertools, support from specials import autoplay, filtertools
from core import scrapertoolsV2, httptools, servertools, tmdb from core import scrapertoolsV2, httptools, servertools, tmdb, support
from core.item import Item from core.item import Item
from platformcode import logger, config from platformcode import logger, config
+10 -2
View File
@@ -4,10 +4,18 @@
"language": ["ita"], "language": ["ita"],
"active": true, "active": true,
"adult": false, "adult": false,
"thumbnail": "http://fastsubita.ml/wp-content/uploads/2017/10/Untitled-222255xxx.jpg", "thumbnail": "http://fastsubita.com/wp-content/uploads/2017/10/Untitled-222255xxx.jpg",
"banner": "http://fastsubita.ml/wp-content/uploads/2017/10/Untitled-222255xxx.jpg", "banner": "http://fastsubita.com/wp-content/uploads/2017/10/Untitled-222255xxx.jpg",
"categories": ["tvshow", "vosi"], "categories": ["tvshow", "vosi"],
"settings": [ "settings": [
{
"id": "channel_host",
"type": "text",
"label": "Host del canale",
"default": "http://fastsubita.com",
"enabled": true,
"visible": true
},
{ {
"id": "include_in_global_search", "id": "include_in_global_search",
"type": "bool", "type": "bool",
+265 -100
View File
@@ -1,25 +1,25 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# ------------------------------------------------------------ # ------------------------------------------------------------
# Ringraziamo Icarus crew # Thanks Icarus crew & Alfa addon
# Canale per fastsubita # Canale per fastsubita
# ------------------------------------------------------------ # ------------------------------------------------------------
import re, urlparse import re, urlparse
from channels import autoplay, filtertools from specials import autoplay, filtertools
from core import scrapertools, servertools, httptools, tmdb from core import scrapertools, servertools, httptools, tmdb
from core.item import Item from core.item import Item
from platformcode import config, logger from platformcode import config, logger
host = "http://fastsubita.com" __channel__ = 'fastsubita'
host = config.get_setting("channel_host", __channel__)
IDIOMAS = {'Italiano': 'IT'} IDIOMAS = {'Italiano': 'IT'}
list_language = IDIOMAS.values() list_language = IDIOMAS.values()
list_servers = ['verystream', 'openload', 'speedvideo', 'wstream', 'flashx', 'vidoza', 'vidtome'] list_servers = ['verystream', 'openload', 'speedvideo', 'wstream', 'flashx', 'vidoza', 'vidtome']
list_quality = ['default'] list_quality = ['default']
__comprueba_enlaces__ = config.get_setting('comprueba_enlaces', 'fastsubita') # __comprueba_enlaces__ = config.get_setting('comprueba_enlaces', 'fastsubita')
__comprueba_enlaces_num__ = config.get_setting('comprueba_enlaces_num', 'fastsubita') # __comprueba_enlaces_num__ = config.get_setting('comprueba_enlaces_num', 'fastsubita')
headers = [ headers = [
['Host', 'fastsubita.com'], ['Host', 'fastsubita.com'],
@@ -34,45 +34,52 @@ headers = [
['Cache-Control', 'max-age=0'] ['Cache-Control', 'max-age=0']
] ]
PERPAGE = 14 PERPAGE = 15
def mainlist(item): def mainlist(item):
logger.info("[fastsubita.py] mainlist") logger.info(item.channel+" mainlist")
itemlist = []
support.menu(itemlist, 'Serie TV bold', 'lista_serie', host,'tvshow')
support.menu(itemlist, 'Novità submenu', 'pelicuals_tv', host,'tvshow')
support.menu(itemlist, 'Archivio A-Z submenu', 'list_az', host,'tvshow',args=['serie'])
support.menu(itemlist, 'Cerca', 'search', host,'tvshow')
autoplay.init(item.channel, list_servers, list_quality) autoplay.init(item.channel, list_servers, list_quality)
itemlist = [Item(channel=item.channel,
title="[COLOR azure]Aggiornamenti[/COLOR]",
action="serietv",
extra='serie',
url=host,
thumbnail="http://orig03.deviantart.net/6889/f/2014/079/7/b/movies_and_popcorn_folder_icon_by_matheusgrilo-d7ay4tw.png"),
Item(channel=item.channel,
title="[COLOR azure]Tutte le Serie TV[/COLOR]",
action="all_quick",
extra='serie',
url="%s/elenco-serie-tv/" % host,
thumbnail="http://orig03.deviantart.net/6889/f/2014/079/7/b/movies_and_popcorn_folder_icon_by_matheusgrilo-d7ay4tw.png"),
Item(channel=item.channel,
title="[COLOR yellow]Cerca...[/COLOR]",
action="search",
extra='serie',
thumbnail="http://dc467.4shared.com/img/fEbJqOum/s7/13feaf0c8c0/Search")]
autoplay.show_option(item.channel, itemlist) autoplay.show_option(item.channel, itemlist)
itemlist.append(
Item(channel='setting',
action="channel_config",
title=support.typo("Configurazione Canale color lime"),
config=item.channel,
folder=False,
thumbnail=channelselector.get_thumb('setting_0.png'))
)
return itemlist return itemlist
# ----------------------------------------------------------------------------------------------------------------
def cleantitle(scrapedtitle):
scrapedtitle = scrapertools.decodeHtmlentities(scrapedtitle.strip())
scrapedtitle = scrapedtitle.replace('', '\'').replace('&#215;','x').replace('×','x')
return scrapedtitle.strip()
# ================================================================================================================
def newest(categoria): def newest(categoria):
logger.info("[fastsubita.py]==> newest" + categoria) logger.info(__channel__+" newest" + categoria)
itemlist = [] itemlist = []
item = Item() item = Item()
try: try:
if categoria == "series": if categoria == "series":
item.url = host item.url = host
item.action = "serietv" # item.action = "serietv"
itemlist = serietv(item) itemlist = pelicuals_tv(item)
if itemlist[-1].action == "serietv": if itemlist[-1].action == "serietv":
itemlist.pop() itemlist.pop()
@@ -87,13 +94,12 @@ def newest(categoria):
return itemlist return itemlist
def serietv(item): def pelicuals_tv(item):
logger.info("[fastsubita.py] peliculas") logger.info(item.channel+" pelicuals_tv")
itemlist = [] itemlist = []
# Carica la pagina # Carica la pagina
data = httptools.downloadpage(item.url, headers=headers).data data = httptools.downloadpage(item.url, headers=headers).data
logger.info("[fastsubita.py] peliculas")
# Estrae i contenuti # Estrae i contenuti
patron = r'<h3 class="entry-title title-font"><a href="([^"]+)" rel="bookmark">(.*?)<' patron = r'<h3 class="entry-title title-font"><a href="([^"]+)" rel="bookmark">(.*?)<'
@@ -103,9 +109,11 @@ def serietv(item):
scrapedplot = "" scrapedplot = ""
scrapedthumbnail = "" scrapedthumbnail = ""
scraped_1 = scrapedtitle.split("&#215;")[0][:-2] scraped_1 = scrapedtitle.split("&#215;")[0][:-2]
scrapedtitle = scrapertools.decodeHtmlentities(scrapedtitle) scrapedtitle = cleantitle(scrapedtitle)
episode = scrapertools.find_multiple_matches(scrapedtitle, r'((\d*)x(\d*))')[0]
scrapedtitle = scrapedtitle.replace(scraped_1, "") scrapedtitle = scrapedtitle.replace(scraped_1, "")
if "http:" in scrapedurl: if "http:" in scrapedurl:
scrapedurl = scrapedurl scrapedurl = scrapedurl
else: else:
@@ -115,37 +123,64 @@ def serietv(item):
Item(channel=item.channel, Item(channel=item.channel,
action="findvideos", action="findvideos",
contentTpye="tvshow", contentTpye="tvshow",
title="[COLOR azure]" + scraped_1 + "[/COLOR]" + " " + scrapedtitle, title=scraped_1 + " " + scrapedtitle,
fulltitle=scraped_1, fulltitle=scraped_1 + " " + scrapedtitle,
url=scrapedurl, url=scrapedurl,
thumbnail=scrapedthumbnail, thumbnail=scrapedthumbnail,
plot=scrapedplot, plot=scrapedplot,
show=scraped_1, show=scraped_1,
extra=item.extra, extra=item.extra,
contentSerieName=scraped_1+" ("+episode[0]+" Sub-Ita)",
folder=True)) folder=True))
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True) tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
# Paginazione # Paginazione
patronvideos = r'<a class="next page-numbers" href="(.*?)">Successivi' support.nextPage(itemlist,item,data,'<a class="next page-numbers" href="(.*?)">Successivi')
matches = re.compile(patronvideos, re.DOTALL).findall(data)
if len(matches) > 0:
scrapedurl = urlparse.urljoin(item.url, matches[0])
itemlist.append(
Item(channel=item.channel,
action="serietv",
title="[COLOR lightgreen]" + config.get_localized_string(30992) + "[/COLOR]",
url=scrapedurl,
thumbnail="http://2.bp.blogspot.com/-fE9tzwmjaeQ/UcM2apxDtjI/AAAAAAAAeeg/WKSGM2TADLM/s1600/pager+old.png",
extra=item.extra,
folder=True))
return itemlist return itemlist
def serietv():
logger.info(__channel__+" serietv")
def all_quick(item): itemlist = []
logger.info("[fastsubita.py] peliculas") data = httptools.downloadpage("%s/" % host, headers=headers).data
# block = scrapertools.find_single_match(data, r'<div class="entry-content">(.*?)</div>')
block = scrapertools.find_single_match(data, r"<select\s*?name='cat'\s*?id='cat'\s*?class='postform'\s*?>(.*?)</select>")
# block = data
# Estrae i contenuti
# patron = r'<a style.*?href="([^"]+)">([^<]+)<\/a>'
# patron = r'<a.*?href="([^"]+)">([^<]+)<\/a>'
# matches = re.compile(patron, re.DOTALL).findall(block)
matches = re.compile(r'<option class="level-([0-9]?)" value="([^"]+)">([^<]+)</option>', re.DOTALL).findall(block)
index = 0
# for scrapedurl, scrapedtitle in matches:
# scrapedtitle = cleantitle(scrapedtitle)
# if "http:" not in scrapedurl:
# scrapedurl = "http:" + scrapedurl
#
# if ('S' in scrapedtitle.strip().upper()[0] and len(scrapedtitle.strip()) == 3) or '02' == scrapedtitle:
# # itemlist[index -1][0]+='{|}'+scrapedurl
# continue
#
# itemlist.append([scrapedurl,scrapedtitle])
# index += 1
for level, cat, title in matches:
title = cleantitle(title)
url = '%s?cat=%s' % (host, cat)
if int(level) > 0:
itemlist[index - 1][0] += '{|}' + url
continue
itemlist.append([url, title])
index += 1
logger.debug(itemlist)
return itemlist
def lista_serie(item):
logger.info(item.channel+" lista_serie")
itemlist = [] itemlist = []
p = 1 p = 1
@@ -153,57 +188,65 @@ def all_quick(item):
item.url, p = item.url.split('{}') item.url, p = item.url.split('{}')
p = int(p) p = int(p)
# logger.debug(p)
# Carica la pagina # Carica la pagina
data = httptools.downloadpage(item.url, headers=headers).data # data = httptools.downloadpage(item.url, headers=headers).data
#
# block = scrapertools.find_single_match(data,r'<div class="entry-content">(.*?)</div>')
#
# # Estrae i contenuti
# # patron = r'<a style.*?href="([^"]+)">([^<]+)<\/a>'
# patron = r'<a.*?href="([^"]+)">([^<]+)<\/a>'
# matches = re.compile(patron, re.DOTALL).findall(block)
if '||' in item.url:
series = item.url.split('\n\n')
matches = []
for i, serie in enumerate(series):
matches.append(serie.split('||'))
series = matches
else:
series = serietv()
# Estrae i contenuti for i, (scrapedurl, scrapedtitle) in enumerate(series):
patron = r'<a style.*?href="([^"]+)">([^<]+)<\/a>'
matches = re.compile(patron, re.DOTALL).findall(data)
for i, (scrapedurl, scrapedtitle) in enumerate(matches):
if (p - 1) * PERPAGE > i: continue if (p - 1) * PERPAGE > i: continue
if i >= p * PERPAGE: break if i >= p * PERPAGE: break
scrapedplot = "" scrapedplot = ""
scrapedthumbnail = "" scrapedthumbnail = ""
scrapedtitle = scrapertools.decodeHtmlentities(scrapedtitle)
if 'S' in scrapedtitle.lower(): continue
if "http:" in scrapedurl:
scrapedurl = scrapedurl
else:
scrapedurl = "http:" + scrapedurl
itemlist.append( itemlist.append(
Item(channel=item.channel, Item(channel=item.channel,
action="serietv", action="episodios",
contentType="tvshow",
title=scrapedtitle, title=scrapedtitle,
fulltitle=scrapedtitle, fulltitle=scrapedtitle,
text_color="azure",
url=scrapedurl, url=scrapedurl,
thumbnail=scrapedthumbnail, thumbnail=scrapedthumbnail,
plot=scrapedplot, plot=scrapedplot,
show=scrapedtitle, show=scrapedtitle,
extra=item.extra, extra=item.extra,
contentType='episode',
originalUrl=scrapedurl,
folder=True)) folder=True))
# ii += 1
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True) tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
if len(matches) >= p * PERPAGE: if len(series) >= p * PERPAGE:
scrapedurl = item.url + '{}' + str(p + 1) scrapedurl = item.url + '{}' + str(p + 1)
itemlist.append( itemlist.append(
Item(channel=item.channel, Item(channel=item.channel,
extra=item.extra, action='lista_serie',
action="all_quick", contentType=item.contentType,
title="[COLOR lightgreen]" + config.get_localized_string(30992) + "[/COLOR]", title=support.typo(config.get_localized_string(30992), 'color kod bold'),
url=scrapedurl, url=scrapedurl,
thumbnail="http://2.bp.blogspot.com/-fE9tzwmjaeQ/UcM2apxDtjI/AAAAAAAAeeg/WKSGM2TADLM/s1600/pager+old.png", args=item.args,
folder=True)) extra=item.extra,
thumbnail=support.thumb()))
return itemlist return itemlist
def findvideos(item): def findvideos(item):
logger.info("[fastsubita.py] findvideos") logger.info(item.channel+" findvideos")
itemlist = [] itemlist = []
data = httptools.downloadpage(item.url, headers=headers).data data = httptools.downloadpage(item.url, headers=headers).data
@@ -217,30 +260,33 @@ def findvideos(item):
scrapedurl, follow_redirects=False) scrapedurl, follow_redirects=False)
data += resp.headers.get("location", "") + '\n' data += resp.headers.get("location", "") + '\n'
itemlist = servertools.find_video_items(data=data)
for videoitem in itemlist: itemlist = support.server(item,data)
videoitem.title = item.title + videoitem.title
videoitem.fulltitle = item.fulltitle
videoitem.thumbnail = item.thumbnail
videoitem.show = item.show
videoitem.plot = item.plot
videoitem.channel = item.channel
videoitem.contentType = item.contentType
videoitem.language = IDIOMAS['Italiano']
# Requerido para Filtrar enlaces # itemlist = servertools.find_video_items(data=data)
#
if __comprueba_enlaces__: # for videoitem in itemlist:
itemlist = servertools.check_list_links(itemlist, __comprueba_enlaces_num__) # videoitem.title = item.title + videoitem.title
# videoitem.fulltitle = item.fulltitle
# Requerido para FilterTools # videoitem.thumbnail = item.thumbnail
# videoitem.show = item.show
# itemlist = filtertools.get_links(itemlist, item, list_language) # videoitem.plot = item.plot
# videoitem.channel = item.channel
# Requerido para AutoPlay # videoitem.contentType = item.contentType
# videoitem.language = IDIOMAS['Italiano']
autoplay.start(itemlist, item) #
# # Requerido para Filtrar enlaces
#
# if __comprueba_enlaces__:
# itemlist = servertools.check_list_links(itemlist, __comprueba_enlaces_num__)
#
# # Requerido para FilterTools
#
# # itemlist = filtertools.get_links(itemlist, item, list_language)
#
# # Requerido para AutoPlay
#
# autoplay.start(itemlist, item)
@@ -248,10 +294,30 @@ def findvideos(item):
def search(item, texto): def search(item, texto):
logger.info("[fastsubita.py] " + item.url + " search " + texto) logger.info(item.channel + " " + item.url + " search " + texto)
item.url = "%s/?s=%s" % (host, texto) # item.url = "%s/?s=%s" % (host, texto)
# item.url = "%s/elenco-serie-tv/" % host
itemlist = []
try: try:
return serietv(item) series = serietv()
for i, (scrapedurl, scrapedtitle) in enumerate(series):
if texto.upper() in scrapedtitle.upper():
scrapedthumbnail = ""
scrapedplot = ""
itemlist.append(
Item(channel=item.channel,
extra=item.extra,
action="episodios",
title=scrapedtitle,
url=scrapedurl,
thumbnail=scrapedthumbnail,
fulltitle=scrapedtitle,
show=scrapedtitle,
plot=scrapedplot,
contentType='episode',
originalUrl=scrapedurl,
folder=True))
return itemlist
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
import sys import sys
@@ -259,4 +325,103 @@ def search(item, texto):
logger.error("%s" % line) logger.error("%s" % line)
return [] return []
# ----------------------------------------------------------------------------------------------------------------
def list_az(item):
support.log(item.channel + " list_az")
itemlist = []
alphabet = dict()
for i, (scrapedurl, scrapedtitle) in enumerate(serietv()):
letter = scrapedtitle[0].upper()
if letter not in alphabet:
alphabet[letter] = []
alphabet[letter].append(scrapedurl + '||' + scrapedtitle)
for letter in sorted(alphabet):
itemlist.append(
Item(channel=item.channel,
action="lista_serie",
url='\n\n'.join(alphabet[letter]),
title=letter,
fulltitle=letter))
return itemlist
# ================================================================================================================
# ----------------------------------------------------------------------------------------------------------------
def episodios(item,itemlist = []):
support.log(item.channel + " episodios")
urls = item.url.split('{|}')
# logger.debug(urls)
# Carica la pagina
data = httptools.downloadpage(urls[0], headers=headers).data
urls.pop(0)
# Estrae i contenuti
patron = r'<h3 class="entry-title title-font"><a href="([^"]+)" rel="bookmark">(.*?)<'
matches = re.compile(patron, re.DOTALL).findall(data)
# logger.debug(matches)
for scrapedurl, scrapedtitle in matches:
scrapedplot = ""
scrapedthumbnail = ""
scrapedtitle = cleantitle(scrapedtitle)
episode = scrapertools.find_multiple_matches(scrapedtitle,r'((\d*)x(\d*))')[0]
season = episode[1].lstrip('0')
# if season in seasons and '/page/' not in item.url: break
# logger.debug(scrapedtitle)
# logger.debug(episode)
# return False
infoLabels = {}
infoLabels['season'] = season
infoLabels['episode'] = episode[2]
title = infoLabels['season']+'x'+infoLabels['episode']
if "http:" not in scrapedurl:
scrapedurl = "http:" + scrapedurl
itemlist.append(
Item(channel=item.channel,
action="findvideos",
contentTpye="tvshow",
title=title,
fulltitle=scrapedtitle,
url=scrapedurl,
thumbnail=scrapedthumbnail,
plot=scrapedplot,
show=item.show,
extra=item.extra,
infoLabels=infoLabels,
folder=True))
next_page = scrapertools.find_single_match(data,r'<a class="next page-numbers" href="(.*?)">Successivi')
if next_page != "":
urls.insert(0,next_page)
# logger.debug(urls)
if(len(urls) > 0):
item.url = '{|}'.join(urls)
itemlist = episodios(item, itemlist)
else:
cleanItemlist = []
episodes = []
for episode in itemlist:
if episode.title in episodes: continue
cleanItemlist.append(episode)
episodes.append(episode.title)
itemlist = cleanItemlist
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
item.url = item.originalUrl
support.videolibrary(itemlist, item, 'bold color kod')
return itemlist
# ================================================================================================================
+2 -2
View File
@@ -7,8 +7,8 @@ import re
import urlparse import urlparse
from channelselector import get_thumb from channelselector import get_thumb
from channels import filtertools, support, autoplay from specials import filtertools, autoplay
from core import scrapertools, servertools, httptools, tmdb from core import scrapertools, servertools, httptools, tmdb, support
from platformcode import logger, config from platformcode import logger, config
from core.item import Item from core.item import Item
+2 -2
View File
@@ -5,8 +5,8 @@
import re import re
import urlparse import urlparse
from channels import autoplay, support from specials import autoplay
from core import scrapertoolsV2, servertools, httptools, tmdb from core import scrapertoolsV2, servertools, httptools, tmdb, support
from core.item import Item from core.item import Item
from lib import unshortenit from lib import unshortenit
from platformcode import config, logger from platformcode import config, logger
+2 -3
View File
@@ -7,9 +7,8 @@ import re
import urlparse import urlparse
from channelselector import get_thumb from channelselector import get_thumb
from channels import autoplay from specials import filtertools, autoplay
from channels import filtertools, support from core import scrapertools, servertools, httptools, support
from core import scrapertools, servertools, httptools
from platformcode import logger, config from platformcode import logger, config
from core.item import Item from core.item import Item
from platformcode import config from platformcode import config
+2 -2
View File
@@ -6,8 +6,8 @@ import base64
import re import re
import urlparse import urlparse
from channels import autoplay from specials import autoplay
from channels import filtertools from specials import filtertools
from core import scrapertools, servertools, httptools from core import scrapertools, servertools, httptools
from platformcode import logger, config from platformcode import logger, config
from core.item import Item from core.item import Item
+1 -2
View File
@@ -6,11 +6,10 @@
import re import re
from core import httptools, scrapertools, servertools from core import httptools, scrapertools, servertools, support
from core.item import Item from core.item import Item
from core import tmdb from core import tmdb
from platformcode import logger, config from platformcode import logger, config
from channels import support
host = "http://www.guardaserie.watch" host = "http://www.guardaserie.watch"
+2 -2
View File
@@ -8,8 +8,8 @@ import re, urlparse
from platformcode import config, logger from platformcode import config, logger
from core import scrapertools, servertools, httptools from core import scrapertools, servertools, httptools
from core.item import Item from core.item import Item
from channels import autoplay from specials import autoplay
from channels import filtertools from specials import filtertools
from core import tmdb from core import tmdb
__channel__ = "ilgeniodellostreaming" __channel__ = "ilgeniodellostreaming"
+3 -4
View File
@@ -7,11 +7,10 @@ import base64
import re import re
import urlparse import urlparse
from channels import autoplay from specials import autoplay
from channels import filtertools, support from specials import filtertools
from core import scrapertools, servertools, httptools from core import scrapertools, servertools, httptools, tmdb, support
from core.item import Item from core.item import Item
from core import tmdb
from platformcode import logger, config from platformcode import logger, config
IDIOMAS = {'Italiano': 'IT'} IDIOMAS = {'Italiano': 'IT'}
+1 -4
View File
@@ -7,12 +7,9 @@ import base64
import re import re
import urlparse import urlparse
from core import scrapertools, httptools from core import scrapertools, httptools, servertools, tmdb, support
from core import servertools
from core.item import Item from core.item import Item
from core import tmdb
from platformcode import logger, config from platformcode import logger, config
from channels import support
+2 -2
View File
@@ -7,8 +7,8 @@
import re import re
import urllib import urllib
from channels import autoplay from specials import autoplay
from channels import filtertools from specials import filtertools
from core import scrapertools, servertools, httptools, scrapertoolsV2 from core import scrapertools, servertools, httptools, scrapertoolsV2
from core.item import Item from core.item import Item
from core import tmdb from core import tmdb
+2 -2
View File
@@ -6,8 +6,8 @@
import re import re
import urlparse import urlparse
from channels import autoplay from specials import autoplay
from channels import filtertools from specials import filtertools
from core import httptools, scrapertools, servertools from core import httptools, scrapertools, servertools
from core.item import Item from core.item import Item
from core import tmdb from core import tmdb
+3 -3
View File
@@ -4,9 +4,9 @@
# ------------------------------------------------------------ # ------------------------------------------------------------
import urlparse import urlparse
from channels import autoplay, filtertools, support from specials import autoplay, filtertools
from channels.support import menu, log from core.support import menu, log
from core import scrapertoolsV2, servertools, httptools, tmdb from core import scrapertoolsV2, servertools, httptools, tmdb, support
from core.item import Item from core.item import Item
from platformcode import logger, config from platformcode import logger, config
from channelselector import thumb from channelselector import thumb
+2 -2
View File
@@ -4,11 +4,11 @@
# ---------------------------------------------------------- # ----------------------------------------------------------
import re import re
from core import httptools, scrapertoolsV2, servertools, tmdb from core import httptools, scrapertoolsV2, servertools, tmdb, support
from core.item import Item from core.item import Item
from lib import unshortenit from lib import unshortenit
from platformcode import logger, config from platformcode import logger, config
from channels import autoplay, support from specials import autoplay
from channelselector import thumb from channelselector import thumb
host = "https://serietvonline.live" host = "https://serietvonline.live"
+8 -4
View File
@@ -8,8 +8,8 @@ import re
import time import time
import channelselector import channelselector
from channels import autoplay, support, filtertools from specials import autoplay, filtertools
from core import httptools, tmdb, scrapertools, servertools from core import httptools, tmdb, scrapertools, servertools, support
from core.item import Item from core.item import Item
from platformcode import logger, config from platformcode import logger, config
__channel__ = "serietvsubita" __channel__ = "serietvsubita"
@@ -30,7 +30,7 @@ def mainlist(item):
itemlist = [] itemlist = []
support.menu(itemlist, 'Serie TV bold', 'lista_serie', host,'tvshow') support.menu(itemlist, 'Serie TV bold', 'lista_serie', host,'tvshow')
support.menu(itemlist, 'Novità submenu', 'peliculas_tv', host,'tvshow') support.menu(itemlist, 'Novità submenu', 'peliculas_tv', host,'tvshow')
support.menu(itemlist, 'Archivio A-Z submenu', 'list_az', host,'tvshow') support.menu(itemlist, 'Archivio A-Z submenu', 'list_az', host,'tvshow',args=['serie'])
support.menu(itemlist, 'Cerca', 'search', host,'tvshow') support.menu(itemlist, 'Cerca', 'search', host,'tvshow')
@@ -293,9 +293,13 @@ def peliculas_tv(item):
scrapedthumbnail = "" scrapedthumbnail = ""
scrapedplot = "" scrapedplot = ""
scrapedtitle = cleantitle(scrapedtitle) scrapedtitle = cleantitle(scrapedtitle)
episode = scrapertools.find_multiple_matches(scrapedtitle, r'((\d*)x(\d*))')[0]
title = scrapedtitle.split(" S0")[0].strip() title = scrapedtitle.split(" S0")[0].strip()
title = title.split(" S1")[0].strip() title = title.split(" S1")[0].strip()
title = title.split(" S2")[0].strip() title = title.split(" S2")[0].strip()
itemlist.append( itemlist.append(
Item(channel=item.channel, Item(channel=item.channel,
action="findvideos", action="findvideos",
@@ -304,7 +308,7 @@ def peliculas_tv(item):
title=scrapedtitle, title=scrapedtitle,
url=scrapedurl, url=scrapedurl,
thumbnail=scrapedthumbnail, thumbnail=scrapedthumbnail,
contentSerieName=title, contentSerieName=title+" ("+episode[0]+" Sub-Ita)",
plot=scrapedplot, plot=scrapedplot,
folder=True)) folder=True))
+2 -2
View File
@@ -6,8 +6,8 @@
import re import re
import channelselector import channelselector
from channels import autoplay, support, filtertools from specials import autoplay, filtertools
from core import httptools, tmdb, scrapertools, servertools from core import httptools, tmdb, scrapertools, servertools, support
from core.item import Item from core.item import Item
from platformcode import logger, config from platformcode import logger, config
__channel__ = 'serietvu' __channel__ = 'serietvu'
+8 -2
View File
@@ -1,7 +1,13 @@
from channels import support, autoplay # -*- coding: utf-8 -*-
# ------------------------------------------------------------
# Canale per Streaming Altadefinizione
# ------------------------------------------------------------
from core import support
from specials import autoplay
from core.item import Item from core.item import Item
host = 'https://www.streamingaltadefinizione.world/' host = 'https://www.streamingaltadefinizione.space'
list_servers = ['verystream', 'openload', 'wstream'] list_servers = ['verystream', 'openload', 'wstream']
list_quality = ['1080p', 'HD', 'DVDRIP', 'SD', 'CAM'] list_quality = ['1080p', 'HD', 'DVDRIP', 'SD', 'CAM']
+8 -8
View File
@@ -7,7 +7,7 @@ import urllib
from lib import unshortenit from lib import unshortenit
from platformcode import logger, config from platformcode import logger, config
from channelselector import thumb from channelselector import thumb
from channels import autoplay from specials import autoplay
def hdpass_get_servers(item): def hdpass_get_servers(item):
@@ -379,7 +379,8 @@ def menu(itemlist, title='', action='', url='', contentType='movie', args=[]):
def typo(string, typography=''): def typo(string, typography=''):
kod_color = '0xFF0081C2' kod_color = '0xFF65B3DA' #'0xFF0081C2'
# Check if the typographic attributes are in the string or outside # Check if the typographic attributes are in the string or outside
if typography: if typography:
@@ -388,7 +389,7 @@ def typo(string, typography=''):
string = string + ' >' string = string + ' >'
# If there are no attributes, it applies the default ones # If there are no attributes, it applies the default ones
attribute = ['[]','()','{}','submenu','color','bold','italic','_','[B]','[I]','[COLOR]'] attribute = ['[]','()','{}','submenu','color','bold','italic','_','--','[B]','[I]','[COLOR]']
movie_word_list = ['film', 'serie', 'tv', 'anime', 'cinema', 'sala'] movie_word_list = ['film', 'serie', 'tv', 'anime', 'cinema', 'sala']
search_word_list = ['cerca'] search_word_list = ['cerca']
@@ -422,6 +423,8 @@ def typo(string, typography=''):
string = '[I]' + re.sub(r'\sitalic','',string) + '[/I]' string = '[I]' + re.sub(r'\sitalic','',string) + '[/I]'
if '_' in string: if '_' in string:
string = ' ' + re.sub(r'\s_','',string) string = ' ' + re.sub(r'\s_','',string)
if '--' in string:
string = ' - ' + re.sub(r'\s--','',string)
return string return string
@@ -455,7 +458,7 @@ def videolibrary(itemlist, item, typography=''):
action = 'add_serie_to_library' action = 'add_serie_to_library'
extra = 'episodios' extra = 'episodios'
contentType = 'tvshow' contentType = 'tvshow'
if not typography: typography = 'color kod bold'
title = typo(config.get_localized_string(30161) + ' ' + typography) title = typo(config.get_localized_string(30161) + ' ' + typography)
if inspect.stack()[1][3] == 'findvideos' and contentType == 'movie' or inspect.stack()[1][3] != 'findvideos' and contentType != 'movie': if inspect.stack()[1][3] == 'findvideos' and contentType == 'movie' or inspect.stack()[1][3] != 'findvideos' and contentType != 'movie':
if config.get_videolibrary_support() and len(itemlist) > 0: if config.get_videolibrary_support() and len(itemlist) > 0:
@@ -500,11 +503,8 @@ def server(item, data='', headers='', AutoPlay=True, CheckLinks=True):
if not data: if not data:
data = httptools.downloadpage(item.url, headers=headers).data data = httptools.downloadpage(item.url, headers=headers).data
## fix by greko
data = str(item.url)
## FINE fix by greko
itemlist = servertools.find_video_items(data=data) itemlist = servertools.find_video_items(data=str(data))
for videoitem in itemlist: for videoitem in itemlist:
videoitem.title = "".join([item.title, ' ', typo(videoitem.title, 'color kod []')]) videoitem.title = "".join([item.title, ' ', typo(videoitem.title, 'color kod []')])
+3 -3
View File
@@ -6,9 +6,9 @@
import re import re
import urlparse import urlparse
from channels import support, autorenumber from specials import autorenumber
from channels.support import menu, log, aplay from core.support import menu, log, aplay
from core import scrapertoolsV2, httptools, tmdb from core import scrapertoolsV2, httptools, tmdb, support
from core.item import Item from core.item import Item
from platformcode import config, logger from platformcode import config, logger
+1 -1
View File
@@ -14,7 +14,7 @@
{ {
"id": "modo_grafico", "id": "modo_grafico",
"type": "bool", "type": "bool",
"label": "Buscar información extra", "label": "Cerca informazioni extra",
"default": true, "default": true,
"enabled": true, "enabled": true,
"visible": true "visible": true
+2 -2
View File
@@ -7,8 +7,8 @@
import re import re
import urlparse import urlparse
from channels import autoplay, filtertools, support from specials import autoplay, filtertool
from core import scrapertools, scrapertoolsV2, httptools, tmdb, servertools from core import scrapertools, scrapertoolsV2, httptools, tmdb, servertoolss, support
from core.item import Item from core.item import Item
from platformcode import logger, config from platformcode import logger, config
+2 -2
View File
@@ -6,8 +6,8 @@
import re import re
import urlparse import urlparse
from channels import autoplay, support from specials import autoplay
from core import scrapertoolsV2, httptools, servertools from core import scrapertoolsV2, httptools, servertools, support
from core.item import Item from core.item import Item
from platformcode import logger from platformcode import logger
from channelselector import thumb from channelselector import thumb
+1 -1
View File
@@ -14,7 +14,7 @@
{ {
"id": "modo_grafico", "id": "modo_grafico",
"type": "bool", "type": "bool",
"label": "Buscar información extra", "label": "Cerca informazioni extra",
"default": true, "default": true,
"enabled": true, "enabled": true,
"visible": true "visible": true
+2 -2
View File
@@ -27,11 +27,11 @@ def getmainlist(view="thumb_"):
thumbnail=get_thumb("channels.png", view), view=view, thumbnail=get_thumb("channels.png", view), view=view,
category=config.get_localized_string(30119), viewmode="thumbnails")) category=config.get_localized_string(30119), viewmode="thumbnails"))
itemlist.append(Item(title=config.get_localized_string(70527), channel="alfavorites", action="mainlist", itemlist.append(Item(title=config.get_localized_string(70527), channel="kodfavorites", action="mainlist",
thumbnail=get_thumb("mylink.png", view), view=view, thumbnail=get_thumb("mylink.png", view), view=view,
category=config.get_localized_string(70527), viewmode="thumbnails")) category=config.get_localized_string(70527), viewmode="thumbnails"))
itemlist.append(Item(title=config.get_localized_string(30103), channel="search", action="mainlist", itemlist.append(Item(title=config.get_localized_string(30103), channel="search", path='special', action="mainlist",
thumbnail=get_thumb("search.png", view), thumbnail=get_thumb("search.png", view),
category=config.get_localized_string(30119), viewmode="list", category=config.get_localized_string(30119), viewmode="list",
context=[{"title": config.get_localized_string(70286), "channel": "search", "action": "opciones", context=[{"title": config.get_localized_string(70286), "channel": "search", "action": "opciones",
+3 -1
View File
@@ -133,6 +133,8 @@ def get_channel_json(channel_name):
channel_json = None channel_json = None
try: try:
channel_path = filetools.join(config.get_runtime_path(), "channels", channel_name + ".json") channel_path = filetools.join(config.get_runtime_path(), "channels", channel_name + ".json")
if not os.path.isfile(channel_path):
channel_path = filetools.join(config.get_runtime_path(), "specials", channel_name + ".json")
if filetools.isfile(channel_path): if filetools.isfile(channel_path):
# logger.info("channel_data=" + channel_path) # logger.info("channel_data=" + channel_path)
channel_json = jsontools.load(filetools.read(channel_path)) channel_json = jsontools.load(filetools.read(channel_path))
@@ -149,7 +151,7 @@ def get_channel_json(channel_name):
def get_channel_controls_settings(channel_name): def get_channel_controls_settings(channel_name):
# logger.info("channel_name=" + channel_name) # logger.info("channel_name=" + channel_name)
dict_settings = {} dict_settings = {}
# import web_pdb; web_pdb.set_trace()
list_controls = get_channel_json(channel_name).get('settings', list()) list_controls = get_channel_json(channel_name).get('settings', list())
for c in list_controls: for c in list_controls:
+534
View File
@@ -0,0 +1,534 @@
# support functions that are needed by many channels, to no repeat the same code
import base64, urlparse, re, os, inspect
from core import httptools, scrapertoolsV2, servertools, tmdb
from core.item import Item
import urllib
from lib import unshortenit
from platformcode import logger, config
from channelselector import thumb
from specials import autoplay
def hdpass_get_servers(item):
# Carica la pagina
data = httptools.downloadpage(item.url).data.replace('\n', '')
patron = r'<iframe(?: id="[^"]+")? width="[^"]+" height="[^"]+" src="([^"]+)"[^>]+><\/iframe>'
url = scrapertoolsV2.find_single_match(data, patron).replace("?alta", "")
url = url.replace("&download=1", "")
if 'https' not in url:
url = 'https:' + url
if 'hdpass' or 'hdplayer' in url:
data = httptools.downloadpage(url).data
start = data.find('<div class="row mobileRes">')
end = data.find('<div id="playerFront">', start)
data = data[start:end]
patron_res = '<div class="row mobileRes">(.*?)</div>'
patron_mir = '<div class="row mobileMirrs">(.*?)</div>'
patron_media = r'<input type="hidden" name="urlEmbed" data-mirror="([^"]+)" id="urlEmbed"\s*value="([^"]+)"\s*/>'
res = scrapertoolsV2.find_single_match(data, patron_res)
itemlist = []
for res_url, res_video in scrapertoolsV2.find_multiple_matches(res, '<option.*?value="([^"]+?)">([^<]+?)</option>'):
data = httptools.downloadpage(urlparse.urljoin(url, res_url)).data.replace('\n', '')
mir = scrapertoolsV2.find_single_match(data, patron_mir)
for mir_url, server in scrapertoolsV2.find_multiple_matches(mir, '<option.*?value="([^"]+?)">([^<]+?)</value>'):
data = httptools.downloadpage(urlparse.urljoin(url, mir_url)).data.replace('\n', '')
for media_label, media_url in scrapertoolsV2.find_multiple_matches(data, patron_media):
itemlist.append(Item(channel=item.channel,
action="play",
title=item.title+" ["+color(server, 'orange')+"]"+" - "+color(res_video, 'limegreen'),
fulltitle=item.fulltitle,
quality=res_video,
show=item.show,
thumbnail=item.thumbnail,
contentType=item.contentType,
server=server,
url=url_decode(media_url)))
log("video -> ", res_video)
return itemlist
def url_decode(url_enc):
lenght = len(url_enc)
if lenght % 2 == 0:
len2 = lenght / 2
first = url_enc[0:len2]
last = url_enc[len2:lenght]
url_enc = last + first
reverse = url_enc[::-1]
return base64.b64decode(reverse)
last_car = url_enc[lenght - 1]
url_enc[lenght - 1] = ' '
url_enc = url_enc.strip()
len1 = len(url_enc)
len2 = len1 / 2
first = url_enc[0:len2]
last = url_enc[len2:len1]
url_enc = last + first
reverse = url_enc[::-1]
reverse = reverse + last_car
return base64.b64decode(reverse)
def color(text, color):
return "[COLOR " + color + "]" + text + "[/COLOR]"
def scrape(item, patron = '', listGroups = [], headers="", blacklist="", data="", patron_block="",
patronNext="", action="findvideos", addVideolibrary = True):
# patron: the patron to use for scraping page, all capturing group must match with listGroups
# listGroups: a list containing the scraping info obtained by your patron, in order
# accepted values are: url, title, thumb, quality, year, plot, duration, genre, rating
# header: values to pass to request header
# blacklist: titles that you want to exclude(service articles for example)
# data: if you want to pass data manually, maybe because you need some custom replacement
# patron_block: patron to get parts of the page (to scrape with patron attribute),
# if you need a "block inside another block" you can create a list, please note that all matches
# will be packed as string
# patronNext: patron for scraping next page link
# action: if you want results perform an action different from "findvideos", useful when scraping film by genres
# url_host: string to prepend to scrapedurl, useful when url don't contain host
# example usage:
# import support
# itemlist = []
# patron = 'blablabla'
# headers = [['Referer', host]]
# blacklist = 'Request a TV serie!'
# return support.scrape(item, itemlist, patron, ['thumb', 'quality', 'url', 'title', 'year', 'plot'],
# headers=headers, blacklist=blacklist)
itemlist = []
if not data:
data = httptools.downloadpage(item.url, headers=headers).data.replace("'", '"')
data = re.sub('\n|\t', ' ', data)
# replace all ' with " and eliminate newline, so we don't need to worry about
log('DATA =', data)
block = data
if patron_block:
if type(patron_block) == str:
patron_block = [patron_block]
for n, regex in enumerate(patron_block):
blocks = scrapertoolsV2.find_multiple_matches(block, regex)
block = ""
for b in blocks:
block += "\n" + b
log('BLOCK ', n, '=', block)
else:
block = data
if patron and listGroups:
matches = scrapertoolsV2.find_multiple_matches(block, patron)
log('MATCHES =', matches)
known_keys = ['url', 'title', 'episode', 'thumb', 'quality', 'year', 'plot', 'duration', 'genere', 'rating'] #by greko aggiunto episode
for match in matches:
if len(listGroups) > len(match): # to fix a bug
match = list(match)
match.extend([''] * (len(listGroups) - len(match)))
scraped = {}
for kk in known_keys:
val = match[listGroups.index(kk)] if kk in listGroups else ''
if val and (kk == "url" or kk == 'thumb') and 'http' not in val:
val = scrapertoolsV2.find_single_match(item.url, 'https?://[a-z0-9.-]+') + val
scraped[kk] = val
title = scrapertoolsV2.decodeHtmlentities(scraped["title"]).strip()
plot = scrapertoolsV2.htmlclean(scrapertoolsV2.decodeHtmlentities(scraped["plot"]))
if scraped["quality"] and scraped["episode"]: # by greko aggiunto episode
longtitle = '[B]' + title + '[/B] - [B]' + scraped["episode"] + '[/B][COLOR blue][' + scraped["quality"] + '][/COLOR]' # by greko aggiunto episode
elif scraped["episode"]: # by greko aggiunto episode
longtitle = '[B]' + title + '[/B] - [B]' + scraped["episode"] + '[/B]' # by greko aggiunto episode
else:
longtitle = '[B]' + title + '[/B]'
if item.infoLabels["title"] or item.fulltitle: # if title is set, probably this is a list of episodes or video sources
infolabels = item.infoLabels
else:
infolabels = {}
if scraped["year"]:
infolabels['year'] = scraped["year"]
if scraped["plot"]:
infolabels['plot'] = plot
if scraped["duration"]:
matches = scrapertoolsV2.find_multiple_matches(scraped["duration"],r'([0-9])\s*?(?:[hH]|:|\.|,|\\|\/|\||\s)\s*?([0-9]+)')
for h, m in matches:
scraped["duration"] = int(h) * 60 + int(m)
if not matches:
scraped["duration"] = scrapertoolsV2.find_single_match(scraped["duration"], r'(\d+)')
infolabels['duration'] = int(scraped["duration"]) * 60
if scraped["genere"]:
genres = scrapertoolsV2.find_multiple_matches(scraped["genere"], '[A-Za-z]+')
infolabels['genere'] = ", ".join(genres)
if scraped["rating"]:
infolabels['rating'] = scrapertoolsV2.decodeHtmlentities(scraped["rating"])
if scraped["title"] not in blacklist:
it = Item(
channel=item.channel,
action=action,
contentType=item.contentType,
title=longtitle,
fulltitle=title,
show=title,
quality=scraped["quality"],
url=scraped["url"],
infoLabels=infolabels,
thumbnail=scraped["thumb"],
args=item.args
)
for lg in list(set(listGroups).difference(known_keys)):
it.__setattr__(lg, match[listGroups.index(lg)])
itemlist.append(it)
if (item.contentType == "episode" and (action != "findvideos" and action != "play")) \
or (item.contentType == "movie" and action != "play"):
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
else:
for it in itemlist:
it.infoLabels = item.infoLabels
if patronNext:
nextPage(itemlist, item, data, patronNext, 2)
if addVideolibrary and (item.infoLabels["title"] or item.fulltitle):
item.fulltitle = item.infoLabels["title"]
videolibrary(itemlist, item)
return itemlist
def dooplay_get_links(item, host):
# get links from websites using dooplay theme and dooplay_player
# return a list of dict containing these values: url, title and server
data = httptools.downloadpage(item.url).data.replace("'", '"')
patron = r'<li id="player-option-[0-9]".*?data-type="([^"]+)" data-post="([^"]+)" data-nume="([^"]+)".*?<span class="title".*?>([^<>]+)</span>(?:<span class="server">([^<>]+))?'
matches = scrapertoolsV2.find_multiple_matches(data, patron)
ret = []
for type, post, nume, title, server in matches:
postData = urllib.urlencode({
"action": "doo_player_ajax",
"post": post,
"nume": nume,
"type": type
})
dataAdmin = httptools.downloadpage(host + 'wp-admin/admin-ajax.php', post=postData,headers={'Referer': item.url}).data
link = scrapertoolsV2.find_single_match(dataAdmin, "<iframe.*src='([^']+)'")
ret.append({
'url': link,
'title': title,
'server': server
})
return ret
def dooplay_get_episodes(item):
itemlist = []
item.contentType = "episode"
data = httptools.downloadpage(item.url).data.replace("'", '"')
patron = '<li class="mark-[0-9]">.*?<img.*?data-lazy-src="([^"]+).*?([0-9] - [0-9]).*?<a href="([^"]+)">([^<>]+).*?([0-9]{4})'
for scrapedthumb, scrapedep, scrapedurl, scrapedtitle, scrapedyear in scrapertoolsV2.find_multiple_matches(data, patron):
scrapedep = scrapedep.replace(' - ', 'x')
infoLabels = {}
infoLabels['year'] = scrapedyear
itemlist.append(
Item(channel=item.channel,
action="findvideos",
contentType="episode",
title=scrapedep + " " + scrapedtitle,
fulltitle=scrapedtitle,
show=item.fulltitle,
url=scrapedurl,
thumbnail=scrapedthumb,
infoLabels=infoLabels
)
)
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
videolibrary(itemlist, item)
return itemlist
def dooplay_films(item, blacklist=""):
if item.contentType == 'movie':
action = 'findvideos'
patron = '<article id="post-[0-9]+" class="item movies">.*?<img src="(?!data)([^"]+)".*?<span class="quality">([^<>]+).*?<a href="([^"]+)">([^<>]+)</a></h3>.*?(?:<span>([0-9]{4})</span>|</article>).*?(?:<span>([0-9]+) min</span>|</article>).*?(?:<div class="texto">([^<>]+)|</article>).*?(?:genres">(.*?)</div>|</article>)'
else:
action = 'episodios'
patron = '<article id="post-[0-9]+" class="item tvshows">.*?<img src="(?!data)([^"]+)".*?(?:<span class="quality">([^<>]+))?.*?<a href="([^"]+)">([^<>]+)</a></h3>.*?(?:<span>([0-9]{4})</span>|</article>).*?(?:<span>([0-9]+) min</span>|</article>).*?(?:<div class="texto">([^<>]+)|</article>).*?(?:genres">(.*?)</div>|</article>)'
# patronNext = '<a class="arrow_pag" href="([^"]+)"><i id="nextpagination"'
patronNext = '<div class="pagination">.*?class="current".*?<a href="([^"]+)".*?<div class="resppages">'
itemlist = scrape(item, patron, ['thumb', 'quality', 'url', 'title', 'year', 'duration', 'plot', 'genre'], blacklist=blacklist, patronNext=patronNext, action=action, addVideolibrary=False)
if itemlist and 'Successivo' in itemlist[-1].title:
itemlist[-1].action = 'peliculas'
return itemlist
def dooplay_search(item, blacklist=""):
if item.contentType == 'movie':
type = 'movies'
action = 'findvideos'
else:
type = 'tvshows'
action = 'episodios'
patron = '<div class="result-item">.*?<img src="([^"]+)".*?<span class="' + type + '">([^<>]+).*?<a href="([^"]+)">([^<>]+)</a>.*?<span class="year">([0-9]{4}).*?<div class="contenido"><p>([^<>]+)'
patronNext = '<a class="arrow_pag" href="([^"]+)"><i id="nextpagination"'
return scrape(item, patron, ['thumb', 'quality', 'url', 'title', 'year', 'plot'], blacklist=blacklist, patronNext=patronNext, action=action)
def swzz_get_url(item):
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:59.0) Gecko/20100101 Firefox/59.0'}
if "/link/" in item.url:
data = httptools.downloadpage(item.url, headers=headers).data
if "link =" in data:
data = scrapertoolsV2.find_single_match(data, 'link = "([^"]+)"')
if 'http' not in data:
data = 'https:' + data
else:
match = scrapertoolsV2.find_single_match(data, r'<meta name="og:url" content="([^"]+)"')
match = scrapertoolsV2.find_single_match(data, r'URL=([^"]+)">') if not match else match
if not match:
from lib import jsunpack
try:
data = scrapertoolsV2.find_single_match(data.replace('\n', ''), r"(eval\s?\(function\(p,a,c,k,e,d.*?)</script>")
data = jsunpack.unpack(data)
logger.debug("##### play /link/ unpack ##\n%s\n##" % data)
except:
logger.debug("##### The content is yet unpacked ##\n%s\n##" % data)
data = scrapertoolsV2.find_single_match(data, r'var link(?:\s)?=(?:\s)?"([^"]+)";')
data, c = unshortenit.unwrap_30x_only(data)
else:
data = match
if data.startswith('/'):
data = urlparse.urljoin("http://swzz.xyz", data)
if not "vcrypt" in data:
data = httptools.downloadpage(data).data
logger.debug("##### play /link/ data ##\n%s\n##" % data)
else:
data = item.url
return data
def menu(itemlist, title='', action='', url='', contentType='movie', args=[]):
# Function to simplify menu creation
frame = inspect.stack()[1]
filename = frame[0].f_code.co_filename
filename = os.path.basename(filename).replace('.py','')
# Call typo function
title = typo(title)
if contentType == 'movie': extra = 'movie'
else: extra = 'tvshow'
itemlist.append(Item(
channel = filename,
title = title,
action = action,
url = url,
extra = extra,
args = args,
contentType = contentType
))
# Apply auto Thumbnails at the menus
from channelselector import thumb
thumb(itemlist)
return itemlist
def typo(string, typography=''):
kod_color = '0xFF65B3DA' #'0xFF0081C2'
# Check if the typographic attributes are in the string or outside
if typography:
string = string + ' ' + typography
if config.get_localized_string(30992) in string:
string = string + ' >'
# If there are no attributes, it applies the default ones
attribute = ['[]','()','{}','submenu','color','bold','italic','_','--','[B]','[I]','[COLOR]']
movie_word_list = ['film', 'serie', 'tv', 'anime', 'cinema', 'sala']
search_word_list = ['cerca']
categories_word_list = ['genere', 'categoria', 'categorie', 'ordine', 'lettera', 'anno', 'alfabetico', 'a-z', 'menu']
if not any(word in string for word in attribute):
if any(word in string.lower() for word in search_word_list):
string = '[COLOR '+ kod_color +']' + string + '[/COLOR]'
elif any(word in string.lower() for word in categories_word_list):
string = ' > ' + string
elif any(word in string.lower() for word in movie_word_list):
string = '[B]' + string + '[/B]'
# Otherwise it uses the typographical attributes of the string
else:
if '[]' in string:
string = '[' + re.sub(r'\s\[\]','',string) + ']'
if '()' in string:
string = '(' + re.sub(r'\s\(\)','',string) + ')'
if '{}' in string:
string = '{' + re.sub(r'\s\{\}','',string) + '}'
if 'submenu' in string:
string = ' > ' + re.sub(r'\ssubmenu','',string)
if 'color' in string:
color = scrapertoolsV2.find_single_match(string,'color ([a-z]+)')
if color == 'kod' or '': color = kod_color
string = '[COLOR '+ color +']' + re.sub(r'\scolor\s([a-z]+)','',string) + '[/COLOR]'
if 'bold' in string:
string = '[B]' + re.sub(r'\sbold','',string) + '[/B]'
if 'italic' in string:
string = '[I]' + re.sub(r'\sitalic','',string) + '[/I]'
if '_' in string:
string = ' ' + re.sub(r'\s_','',string)
if '--' in string:
string = ' - ' + re.sub(r'\s--','',string)
return string
def match(item, patron='', patron_block='', headers='', url=''):
matches = []
url = url if url else item.url
data = httptools.downloadpage(url, headers=headers).data.replace("'", '"')
data = re.sub('\n|\t', '', data)
log('DATA= ', data)
if patron_block:
block = scrapertoolsV2.find_single_match(data, patron_block)
log('BLOCK= ',block)
else:
block = data
if patron:
matches = scrapertoolsV2.find_multiple_matches(block, patron)
log('MATCHES= ',matches)
return matches, data
def videolibrary(itemlist, item, typography=''):
if item.contentType != 'episode':
action = 'add_pelicula_to_library'
extra = 'findvideos'
contentType = 'movie'
else:
action = 'add_serie_to_library'
extra = 'episodios'
contentType = 'tvshow'
if not typography: typography = 'color kod bold'
title = typo(config.get_localized_string(30161) + ' ' + typography)
if inspect.stack()[1][3] == 'findvideos' and contentType == 'movie' or inspect.stack()[1][3] != 'findvideos' and contentType != 'movie':
if config.get_videolibrary_support() and len(itemlist) > 0:
itemlist.append(
Item(channel=item.channel,
title=title,
contentType=contentType,
contentSerieName=item.fulltitle if contentType == 'tvshow' else '',
url=item.url,
action=action,
extra=extra,
contentTitle=item.fulltitle))
def nextPage(itemlist, item, data, patron, function_level=1):
# Function_level is useful if the function is called by another function.
# If the call is direct, leave it blank
next_page = scrapertoolsV2.find_single_match(data, patron)
if next_page != "":
if 'http' not in next_page:
next_page = scrapertoolsV2.find_single_match(item.url, 'https?://[a-z0-9.-]+') + next_page
log('NEXT= ', next_page)
itemlist.append(
Item(channel=item.channel,
action=inspect.stack()[function_level][3],
contentType=item.contentType,
title=typo(config.get_localized_string(30992), 'color kod bold'),
url=next_page,
args=item.args,
thumbnail=thumb()))
return itemlist
def server(item, data='', headers='', AutoPlay=True, CheckLinks=True):
__comprueba_enlaces__ = config.get_setting('comprueba_enlaces', item.channel)
log(__comprueba_enlaces__ )
__comprueba_enlaces_num__ = config.get_setting('comprueba_enlaces_num', item.channel)
log(__comprueba_enlaces_num__ )
if not data:
data = httptools.downloadpage(item.url, headers=headers).data
itemlist = servertools.find_video_items(data=str(data))
for videoitem in itemlist:
videoitem.title = "".join([item.title, ' ', typo(videoitem.title, 'color kod []')])
videoitem.fulltitle = item.fulltitle
videoitem.show = item.show
videoitem.thumbnail = item.thumbnail
videoitem.channel = item.channel
videoitem.contentType = item.contentType
if __comprueba_enlaces__ and CheckLinks:
itemlist = servertools.check_list_links(itemlist, __comprueba_enlaces_num__)
if AutoPlay == True:
autoplay.start(itemlist, item)
return itemlist
def aplay(item, itemlist, list_servers='', list_quality=''):
if inspect.stack()[1][3] == 'mainlist':
autoplay.init(item.channel, list_servers, list_quality)
autoplay.show_option(item.channel, itemlist)
else:
autoplay.start(itemlist, item)
def log(stringa1="", stringa2="", stringa3="", stringa4="", stringa5=""):
# Function to simplify the log
# Automatically returns File Name and Function Name
frame = inspect.stack()[1]
filename = frame[0].f_code.co_filename
filename = os.path.basename(filename)
logger.info("[" + filename + "] - [" + inspect.stack()[1][3] + "] " + str(stringa1) + str(stringa2) + str(stringa3) + str(stringa4) + str(stringa5))
+4
View File
@@ -11,6 +11,10 @@ import xbmc
from platformcode import config, logger from platformcode import config, logger
logger.info("init...") logger.info("init...")
if os.path.isfile(os.path.join(config.get_data_path(), 'alfavorites-default.json')):
os.rename(os.path.join(config.get_data_path(), 'alfavorites-default.json'), os.path.join(config.get_data_path(), 'kodfavorites-default.json'))
if os.path.isfile(os.path.join(config.get_data_path(), 'alfa_db.sqlite')):
os.rename(os.path.join(config.get_data_path(), 'alfa_db.sqlite'), os.path.join(config.get_data_path(), 'kod_db.sqlite'))
librerias = xbmc.translatePath(os.path.join(config.get_runtime_path(), 'lib')) librerias = xbmc.translatePath(os.path.join(config.get_runtime_path(), 'lib'))
sys.path.append(librerias) sys.path.append(librerias)
+5 -5
View File
@@ -93,19 +93,19 @@ def faq(item):
if item.extra == "onoff_canales": if item.extra == "onoff_canales":
respuesta = platformtools.dialog_yesno(config.get_localized_string(60457), config.get_localized_string(60458)) respuesta = platformtools.dialog_yesno(config.get_localized_string(60457), config.get_localized_string(60458))
if respuesta == 1: if respuesta == 1:
from channels import setting from specials import setting
setting.conf_tools(Item(extra='channels_onoff')) setting.conf_tools(Item(extra='channels_onoff'))
elif item.extra == "trakt_sync": elif item.extra == "trakt_sync":
respuesta = platformtools.dialog_yesno(config.get_localized_string(60457), config.get_localized_string(60459)) respuesta = platformtools.dialog_yesno(config.get_localized_string(60457), config.get_localized_string(60459))
if respuesta == 1: if respuesta == 1:
from channels import videolibrary from specials import videolibrary
videolibrary.channel_config(Item(channel='videolibrary')) videolibrary.channel_config(Item(channel='videolibrary'))
elif item.extra == "tiempo_enlaces": elif item.extra == "tiempo_enlaces":
respuesta = platformtools.dialog_yesno(config.get_localized_string(60457), config.get_localized_string(60460)) respuesta = platformtools.dialog_yesno(config.get_localized_string(60457), config.get_localized_string(60460))
if respuesta == 1: if respuesta == 1:
from channels import videolibrary from specials import videolibrary
videolibrary.channel_config(Item(channel='videolibrary')) videolibrary.channel_config(Item(channel='videolibrary'))
elif item.extra == "prob_busquedacont": elif item.extra == "prob_busquedacont":
@@ -128,7 +128,7 @@ def faq(item):
config.get_localized_string(60465)) config.get_localized_string(60465))
if respuesta == 1: if respuesta == 1:
itemlist = [] itemlist = []
from channels import setting from specials import setting
new_item = Item(channel="setting", action="submenu_tools", folder=True) new_item = Item(channel="setting", action="submenu_tools", folder=True)
itemlist.extend(setting.submenu_tools(new_item)) itemlist.extend(setting.submenu_tools(new_item))
return itemlist return itemlist
@@ -142,7 +142,7 @@ def faq(item):
elif item.extra == "buscador_juntos": elif item.extra == "buscador_juntos":
respuesta = platformtools.dialog_yesno(config.get_localized_string(60457), config.get_localized_string(60466)) respuesta = platformtools.dialog_yesno(config.get_localized_string(60457), config.get_localized_string(60466))
if respuesta == 1: if respuesta == 1:
from channels import search from specials import search
search.settings("") search.settings("")
elif item.extra == "report_error": elif item.extra == "report_error":
@@ -1229,7 +1229,7 @@ def busqueda_global(item, infoLabels, org_title=False):
new_item.extra = infoLabels.get("originaltitle", "") new_item.extra = infoLabels.get("originaltitle", "")
new_item.category = item.contentType new_item.category = item.contentType
from channels import search from specials import search
return search.do_search(new_item, cat) return search.do_search(new_item, cat)
@@ -2188,7 +2188,7 @@ class images(xbmcgui.WindowDialog):
class Trailer(xbmcgui.WindowXMLDialog): class Trailer(xbmcgui.WindowXMLDialog):
def Start(self, item, trailers): def Start(self, item, trailers):
self.item = item self.item = item
from channels import trailertools from specials import trailertools
self.video_url, self.windows = trailertools.buscartrailer(self.item.clone(), trailers=trailers) self.video_url, self.windows = trailertools.buscartrailer(self.item.clone(), trailers=trailers)
self.doModal() self.doModal()
+19 -16
View File
@@ -56,7 +56,7 @@ def run(item=None):
category = dictCategory[config.get_setting("category")] category = dictCategory[config.get_setting("category")]
item = Item(channel="news", action="novedades", extra=category, mode = 'silent') item = Item(channel="news", action="novedades", extra=category, mode = 'silent')
else: else:
from channels import side_menu from specials import side_menu
item= Item() item= Item()
item = side_menu.check_user_home(item) item = side_menu.check_user_home(item)
item.start = True item.start = True
@@ -140,18 +140,22 @@ def run(item=None):
# updater.update_channel(item.channel) # updater.update_channel(item.channel)
# Checks if channel exists # Checks if channel exists
channel_file = os.path.join(config.get_runtime_path(), if os.path.isfile(os.path.join(config.get_runtime_path(), 'channels', item.channel + ".py")):
'channels', item.channel + ".py") CHANNELS = 'channels'
logger.info("channel_file=%s" % channel_file) else:
CHANNELS ='specials'
channel_file = os.path.join(config.get_runtime_path(), CHANNELS, item.channel + ".py")
logger.info("channel_file= " + channel_file)
channel = None channel = None
if os.path.exists(channel_file): if os.path.exists(channel_file):
try: try:
channel = __import__('channels.%s' % item.channel, None, channel = __import__(CHANNELS + item.channel, None, None, [CHANNELS + item.channel])
None, ["channels.%s" % item.channel])
except ImportError: except ImportError:
exec "import channels." + item.channel + " as channel" importer = "import " + CHANNELS + "." + item.channel + " as channel"
exec(importer)
logger.info("Running channel %s | %s" % (channel.__name__, channel.__file__)) logger.info("Running channel %s | %s" % (channel.__name__, channel.__file__))
@@ -223,7 +227,7 @@ def run(item=None):
# Special action for downloading all episodes from a serie # Special action for downloading all episodes from a serie
elif item.action == "download_all_episodes": elif item.action == "download_all_episodes":
from channels import downloads from specials import downloads
item.action = item.extra item.action = item.extra
del item.extra del item.extra
downloads.save_download(item) downloads.save_download(item)
@@ -244,7 +248,7 @@ def run(item=None):
tecleado = platformtools.dialog_input(last_search) tecleado = platformtools.dialog_input(last_search)
if tecleado is not None: if tecleado is not None:
if last_search_active and not tecleado.startswith("http"): if last_search_active and not tecleado.startswith("http"):
from channels import search from specials import search
search.save_search(tecleado) search.save_search(tecleado)
itemlist = channel.search(item, tecleado) itemlist = channel.search(item, tecleado)
@@ -253,8 +257,9 @@ def run(item=None):
platformtools.render_items(itemlist, item) platformtools.render_items(itemlist, item)
# For all other actions # For all other actions
else: else:
# import web_pdb; web_pdb.set_trace()
logger.info("Executing channel '%s' method" % item.action) logger.info("Executing channel '%s' method" % item.action)
itemlist = getattr(channel, item.action)(item) itemlist = getattr(channel, item.action)(item)
if config.get_setting('trakt_sync'): if config.get_setting('trakt_sync'):
@@ -291,8 +296,7 @@ def run(item=None):
import traceback import traceback
logger.error(traceback.format_exc()) logger.error(traceback.format_exc())
patron = 'File "' + os.path.join(config.get_runtime_path(), "channels", "").replace("\\", patron = 'File "' + os.path.join(config.get_runtime_path(), CHANNELS, "").replace("\\", "\\\\") + '([^.]+)\.py"'
"\\\\") + '([^.]+)\.py"'
canal = scrapertools.find_single_match(traceback.format_exc(), patron) canal = scrapertools.find_single_match(traceback.format_exc(), patron)
platformtools.dialog_ok( platformtools.dialog_ok(
@@ -302,8 +306,7 @@ def run(item=None):
import traceback import traceback
logger.error(traceback.format_exc()) logger.error(traceback.format_exc())
patron = 'File "' + os.path.join(config.get_runtime_path(), "channels", "").replace("\\", patron = 'File "' + os.path.join(config.get_runtime_path(), "channels", "").replace("\\", "\\\\") + '([^.]+)\.py"'
"\\\\") + '([^.]+)\.py"'
canal = scrapertools.find_single_match(traceback.format_exc(), patron) canal = scrapertools.find_single_match(traceback.format_exc(), patron)
try: try:
@@ -430,7 +433,7 @@ def play_from_library(item):
else: else:
# Ventana emergente # Ventana emergente
from channels import videolibrary from specials import videolibrary
p_dialog = platformtools.dialog_progress_bg(config.get_localized_string(20000), config.get_localized_string(70004)) p_dialog = platformtools.dialog_progress_bg(config.get_localized_string(20000), config.get_localized_string(70004))
p_dialog.update(0, '') p_dialog.update(0, '')
@@ -488,6 +491,6 @@ def play_from_library(item):
item = videolibrary.play(itemlist[seleccion])[0] item = videolibrary.play(itemlist[seleccion])[0]
platformtools.play_video(item) platformtools.play_video(item)
from channels import autoplay from specials import autoplay
if (platformtools.is_playing() and item.action) or item.server == 'torrent' or autoplay.is_active(item.contentChannel): if (platformtools.is_playing() and item.action) or item.server == 'torrent' or autoplay.is_active(item.contentChannel):
break break
+10 -10
View File
@@ -180,7 +180,7 @@ def render_items(itemlist, parent_item):
item.thumbnail = get_thumb("videolibrary_tvshow.png") item.thumbnail = get_thumb("videolibrary_tvshow.png")
if unify_enabled and parent_item.channel != 'alfavorites': if unify_enabled and parent_item.channel != 'kodfavorites':
# Formatear titulo con unify # Formatear titulo con unify
item = unify.title_format(item) item = unify.title_format(item)
else: else:
@@ -268,11 +268,11 @@ def render_items(itemlist, parent_item):
# ...forzamos segun el viewcontent # ...forzamos segun el viewcontent
xbmcplugin.setContent(int(sys.argv[1]), parent_item.viewcontent) xbmcplugin.setContent(int(sys.argv[1]), parent_item.viewcontent)
elif parent_item.channel not in ["channelselector", "", "alfavorites"]: elif parent_item.channel not in ["channelselector", "", "kodfavorites"]:
# ... o segun el canal # ... o segun el canal
xbmcplugin.setContent(int(sys.argv[1]), "movies") xbmcplugin.setContent(int(sys.argv[1]), "movies")
elif parent_item.channel == "alfavorites" and parent_item.action == 'mostrar_perfil': elif parent_item.channel == "kodfavorites" and parent_item.action == 'mostrar_perfil':
xbmcplugin.setContent(int(sys.argv[1]), "movies") xbmcplugin.setContent(int(sys.argv[1]), "movies")
# Fijamos el "breadcrumb" # Fijamos el "breadcrumb"
@@ -470,7 +470,7 @@ def set_context_commands(item, parent_item):
# Si no se está dentro de Alfavoritos y hay los contextos de alfavoritos, descartarlos. # Si no se está dentro de Alfavoritos y hay los contextos de alfavoritos, descartarlos.
# (pasa al ir a un enlace de alfavoritos, si este se clona en el canal) # (pasa al ir a un enlace de alfavoritos, si este se clona en el canal)
if parent_item.channel != 'alfavorites' and 'i_perfil' in command and 'i_enlace' in command: if parent_item.channel != 'kodfavorites' and 'i_perfil' in command and 'i_enlace' in command:
continue continue
if "goto" in command: if "goto" in command:
@@ -481,7 +481,7 @@ def set_context_commands(item, parent_item):
(command["title"], "XBMC.RunPlugin(%s?%s)" % (sys.argv[0], item.clone(**command).tourl()))) (command["title"], "XBMC.RunPlugin(%s?%s)" % (sys.argv[0], item.clone(**command).tourl())))
# No añadir más opciones predefinidas si se está dentro de Alfavoritos # No añadir más opciones predefinidas si se está dentro de Alfavoritos
if parent_item.channel == 'alfavorites': if parent_item.channel == 'kodfavorites':
return context_commands return context_commands
# Opciones segun criterios, solo si el item no es un tag (etiqueta), ni es "Añadir a la videoteca", etc... # Opciones segun criterios, solo si el item no es un tag (etiqueta), ni es "Añadir a la videoteca", etc...
@@ -548,7 +548,7 @@ def set_context_commands(item, parent_item):
# Añadir a Alfavoritos (Mis enlaces) # Añadir a Alfavoritos (Mis enlaces)
if item.channel not in ["favorites", "videolibrary", "help", ""] and parent_item.channel != "favorites": if item.channel not in ["favorites", "videolibrary", "help", ""] and parent_item.channel != "favorites":
context_commands.append(('[COLOR blue]%s[/COLOR]' % config.get_localized_string(70557), "XBMC.RunPlugin(%s?%s)" % context_commands.append(('[COLOR blue]%s[/COLOR]' % config.get_localized_string(70557), "XBMC.RunPlugin(%s?%s)" %
(sys.argv[0], item.clone(channel="alfavorites", action="addFavourite", (sys.argv[0], item.clone(channel="kodfavorites", action="addFavourite",
from_channel=item.channel, from_channel=item.channel,
from_action=item.action).tourl()))) from_action=item.action).tourl())))
@@ -596,7 +596,7 @@ def set_context_commands(item, parent_item):
if item.channel != "downloads" and downloadenabled != "false": if item.channel != "downloads" and downloadenabled != "false":
# Descargar pelicula # Descargar pelicula
if item.contentType == "movie" and item.contentTitle: if item.contentType == "movie":
context_commands.append((config.get_localized_string(60354), "XBMC.RunPlugin(%s?%s)" % context_commands.append((config.get_localized_string(60354), "XBMC.RunPlugin(%s?%s)" %
(sys.argv[0], item.clone(channel="downloads", action="save_download", (sys.argv[0], item.clone(channel="downloads", action="save_download",
from_channel=item.channel, from_action=item.action) from_channel=item.channel, from_action=item.action)
@@ -966,7 +966,7 @@ def set_opcion(item, seleccion, opciones, video_urls):
# "Descargar" # "Descargar"
elif opciones[seleccion] == config.get_localized_string(30153): elif opciones[seleccion] == config.get_localized_string(30153):
from channels import downloads from specials import downloads
import xbmcaddon import xbmcaddon
import xbmcgui import xbmcgui
__addon__ = xbmcaddon.Addon() __addon__ = xbmcaddon.Addon()
@@ -984,13 +984,13 @@ def set_opcion(item, seleccion, opciones, video_urls):
# "Quitar de favoritos" # "Quitar de favoritos"
elif opciones[seleccion] == config.get_localized_string(30154): elif opciones[seleccion] == config.get_localized_string(30154):
from channels import favorites from specials import favorites
favorites.delFavourite(item) favorites.delFavourite(item)
salir = True salir = True
# "Añadir a favoritos": # "Añadir a favoritos":
elif opciones[seleccion] == config.get_localized_string(30155): elif opciones[seleccion] == config.get_localized_string(30155):
from channels import favorites from specials import favorites
item.from_channel = "favorites" item.from_channel = "favorites"
favorites.addFavourite(item) favorites.addFavourite(item)
salir = True salir = True
+3 -3
View File
@@ -174,12 +174,12 @@ class SettingsWindow(xbmcgui.WindowXMLDialog):
channelpath = inspect.currentframe().f_back.f_back.f_code.co_filename channelpath = inspect.currentframe().f_back.f_back.f_code.co_filename
self.channel = os.path.basename(channelpath).replace(".py", "") self.channel = os.path.basename(channelpath).replace(".py", "")
self.ch_type = os.path.basename(os.path.dirname(channelpath)) self.ch_type = os.path.basename(os.path.dirname(channelpath))
logger.info('PATH= ' + channelpath)
# Si no tenemos list_controls, hay que sacarlos del json del canal # Si no tenemos list_controls, hay que sacarlos del json del canal
if not self.list_controls: if not self.list_controls:
# Si la ruta del canal esta en la carpeta "channels", obtenemos los controles y valores mediante chaneltools # Si la ruta del canal esta en la carpeta "channels", obtenemos los controles y valores mediante chaneltools
if os.path.join(config.get_runtime_path(), "channels") in channelpath: if os.path.join(config.get_runtime_path(), "channels") or os.path.join(config.get_runtime_path(), "specials") in channelpath:
# La llamada se hace desde un canal # La llamada se hace desde un canal
self.list_controls, default_values = channeltools.get_channel_controls_settings(self.channel) self.list_controls, default_values = channeltools.get_channel_controls_settings(self.channel)
@@ -544,7 +544,7 @@ class SettingsWindow(xbmcgui.WindowXMLDialog):
default = "" default = ""
c["default"] = c.get("default", default) c["default"] = c.get("default", default)
c["color"] = c.get("color", "0xFF0066CC") c["color"] = c.get("color", "0xFFFFFFFF")
c["visible"] = c.get("visible", True) c["visible"] = c.get("visible", True)
c["enabled"] = c.get("enabled", True) c["enabled"] = c.get("enabled", True)
+2 -2
View File
@@ -51,7 +51,7 @@ def mark_auto_as_watched(item):
logger.debug("marcado") logger.debug("marcado")
item.playcount = 1 item.playcount = 1
sync_with_trakt = True sync_with_trakt = True
from channels import videolibrary from specials import videolibrary
videolibrary.mark_content_as_watched2(item) videolibrary.mark_content_as_watched2(item)
break break
@@ -326,7 +326,7 @@ def mark_season_as_watched_on_kodi(item, value=1):
def mark_content_as_watched_on_alfa(path): def mark_content_as_watched_on_alfa(path):
from channels import videolibrary from specials import videolibrary
from core import videolibrarytools from core import videolibrarytools
from core import scrapertools from core import scrapertools
from core import filetools from core import filetools
File diff suppressed because it is too large Load Diff
+34 -24
View File
@@ -721,6 +721,14 @@ msgctxt "#60055"
msgid "Error of provider configuration in BD." msgid "Error of provider configuration in BD."
msgstr "Errore di configurazione del provider in BD." msgstr "Errore di configurazione del provider in BD."
msgctxt "#60056"
msgid "Videolibrary %s not configured"
msgstr "Videoteca %s non configurata"
msgctxt "#60057"
msgid "Videolibrary %s configured"
msgstr "Videoteca %s configurata"
msgctxt "#60058" msgctxt "#60058"
msgid "You need to restart Kodi for the changes to take effect." msgid "You need to restart Kodi for the changes to take effect."
msgstr "E' necessario riavviare Kodi affinchè le modifiche abbiano effetto." msgstr "E' necessario riavviare Kodi affinchè le modifiche abbiano effetto."
@@ -729,6 +737,10 @@ msgctxt "#60059"
msgid "Congratulations, Kodi's video library has been configured correctly." msgid "Congratulations, Kodi's video library has been configured correctly."
msgstr "Complimenti, la videoteca di Kodi è stata configurata correttamente." msgstr "Complimenti, la videoteca di Kodi è stata configurata correttamente."
msgctxt "#60060"
msgid "KOD Auto-configuration"
msgstr "KOD Auto-configurazione"
msgctxt "#60062" msgctxt "#60062"
msgid "Adding movies to your video library..." msgid "Adding movies to your video library..."
msgstr "Aggiunta film alla videoteca..." msgstr "Aggiunta film alla videoteca..."
@@ -786,8 +798,8 @@ msgid "No coincidence"
msgstr "Nessuna coincidenza" msgstr "Nessuna coincidenza"
msgctxt "#60076" msgctxt "#60076"
msgid "New quality/server available in \nConfiguration" msgid "New quality/server available in configuration"
msgstr "Nuova qualità/server disponibile in \nConfigurazione" msgstr "Nuova qualità/server disponibile in configurazione"
msgctxt "#60077" msgctxt "#60077"
msgid "AutoPlay initialization error" msgid "AutoPlay initialization error"
@@ -1886,7 +1898,7 @@ msgid "Uploading new data"
msgstr "Caricamento nuovi dati" msgstr "Caricamento nuovi dati"
msgctxt "#60470" msgctxt "#60470"
msgid "Buscando en Tmdb......." msgid "Searching in Tmdb......."
msgstr "Ricerca in Tmdb......." msgstr "Ricerca in Tmdb......."
msgctxt "#60471" msgctxt "#60471"
@@ -2334,7 +2346,7 @@ msgid " - Settings created"
msgstr "- Impostazioni create" msgstr "- Impostazioni create"
msgctxt "#60589" msgctxt "#60589"
msgid "- - No correction necessary" msgid " - No correction necessary"
msgstr " - Nessuna correzione necessaria" msgstr " - Nessuna correzione necessaria"
msgctxt "#60590" msgctxt "#60590"
@@ -2754,7 +2766,7 @@ msgid "Search for actor"
msgstr "Cerca attore" msgstr "Cerca attore"
msgctxt "#70012" msgctxt "#70012"
msgid "Beginnin" msgid "Beginning"
msgstr "Inizio" msgstr "Inizio"
msgctxt "#70013" msgctxt "#70013"
@@ -2902,23 +2914,23 @@ msgid " My Account"
msgstr " Il Mio Account" msgstr " Il Mio Account"
msgctxt "#70049" msgctxt "#70049"
msgid " Most Popular" msgid "Most Popular"
msgstr "Più Popolari" msgstr "Più Popolari"
msgctxt "#70050" msgctxt "#70050"
msgid " Recommended Now" msgid "Recommended Now"
msgstr "Da Vedere" msgstr "Da Vedere"
msgctxt "#70051" msgctxt "#70051"
msgid " Most Anticipated " msgid "Most Anticipated "
msgstr "Più Attesi" msgstr "Più Attesi"
msgctxt "#70052" msgctxt "#70052"
msgid " Custom recommendations" msgid "Custom recommendations"
msgstr "Raccomandazioni personalizzate" msgstr "Raccomandazioni personalizzate"
msgctxt "#70053" msgctxt "#70053"
msgid " Most Viewed" msgid "Most Viewed"
msgstr "Più Visti" msgstr "Più Visti"
msgctxt "#70054" msgctxt "#70054"
@@ -2982,11 +2994,11 @@ msgid "In my Collection"
msgstr "Nella mia Collezione" msgstr "Nella mia Collezione"
msgctxt "#70069" msgctxt "#70069"
msgid "Search %s in kod: %s" msgid "Search %s in KOD: %s"
msgstr "Cerca %s in kod: %s" msgstr "Cerca %s in KOD: %s"
msgctxt "#70070" msgctxt "#70070"
msgid " Search original title: %s" msgid "Search original title: %s"
msgstr "Cerca il titolo originale: %s" msgstr "Cerca il titolo originale: %s"
msgctxt "#70071" msgctxt "#70071"
@@ -2994,8 +3006,8 @@ msgid "Cast"
msgstr "Vedi Cast" msgstr "Vedi Cast"
msgctxt "#70072" msgctxt "#70072"
msgid " Most Viewed" msgid "Most Viewed"
msgstr " Più Viste" msgstr "Più Viste"
msgctxt "#70073" msgctxt "#70073"
msgid "Most Anticipated" msgid "Most Anticipated"
@@ -3014,7 +3026,7 @@ msgid "Top rated"
msgstr "Più Votate" msgstr "Più Votate"
msgctxt "#70077" msgctxt "#70077"
msgid " Most Viewed" msgid "Most Viewed"
msgstr "Più Viste" msgstr "Più Viste"
msgctxt "#70078" msgctxt "#70078"
@@ -3495,7 +3507,7 @@ msgstr "Vuoi annullare il processo?"
msgctxt "#70200" msgctxt "#70200"
msgid "Finishing and deleting data" msgid "Finishing and deleting data"
msgstr Fine e cancellazione dati" msgstr "Fine e cancellazione dati"
msgctxt "#70201" msgctxt "#70201"
msgid "Mass Testing Tools" msgid "Mass Testing Tools"
@@ -3841,7 +3853,6 @@ msgctxt "#70291"
msgid "Error, during conversion" msgid "Error, during conversion"
msgstr "Errore, in conversione" msgstr "Errore, in conversione"
# Servers ----
msgctxt "#70292" msgctxt "#70292"
msgid "[%s] File no longer exist on this server." msgid "[%s] File no longer exist on this server."
msgstr "[%s] Il file non è più presente nel server." msgstr "[%s] Il file non è più presente nel server."
@@ -3893,7 +3904,6 @@ msgstr "[%s] Questo server non funziona con la tua versione di Plex, prova ad ag
msgctxt "#70304" msgctxt "#70304"
msgid "[%s] This server requires updating python to version 2.7.9 or higher." msgid "[%s] This server requires updating python to version 2.7.9 or higher."
msgstr "[%s] Questo server richiede la versione 2.7.9 (O Maggiore) di Python." msgstr "[%s] Questo server richiede la versione 2.7.9 (O Maggiore) di Python."
# ============
msgctxt "#70305" msgctxt "#70305"
msgid "Search in channels" msgid "Search in channels"
@@ -4060,7 +4070,7 @@ msgid "[Trakt] Remove %s from your collection"
msgstr "[Trakt] Rimuovi %s dalla tua collezione" msgstr "[Trakt] Rimuovi %s dalla tua collezione"
msgctxt "#70346" msgctxt "#70346"
msgid "[Trakt] Add %s to your collection msgid "[Trakt] Add %s to your collection"
msgstr "[Trakt] Aggiungi %s alla tua collezione" msgstr "[Trakt] Aggiungi %s alla tua collezione"
msgctxt "#70347" msgctxt "#70347"
@@ -5017,7 +5027,7 @@ msgstr "Configura la rinumerazione della serie..."
msgctxt "#70587" msgctxt "#70587"
msgid "Set up" msgid "Set up"
msgstr "" msgstr "Configurazione"
msgctxt "#70588" msgctxt "#70588"
msgid "No series found, look for a series and click on contextual menu" msgid "No series found, look for a series and click on contextual menu"
@@ -5100,8 +5110,8 @@ msgid "List informations"
msgstr "Informazioni lista" msgstr "Informazioni lista"
msgctxt "#70608" msgctxt "#70608"
msgid "Liste dei link" msgid "Link lists"
msgstr "Listas de enlaces" msgstr "Liste dei link"
msgctxt "#70609" msgctxt "#70609"
msgid "File_id of tinyupload link" msgid "File_id of tinyupload link"
@@ -5388,7 +5398,7 @@ msgstr "Aggiungi un canale"
msgctxt "#70677" msgctxt "#70677"
msgid "Episode" msgid "Episode"
msgstr "%sx%s - Episodio %s" msgstr "Episodio"
msgctxt "#70678" msgctxt "#70678"
msgid "From local file" msgid "From local file"
+2 -2
View File
@@ -137,7 +137,7 @@
<setting id="addon_update_timer" type="labelenum" values="0|6|12|24" label="70581" default="12"/> <setting id="addon_update_timer" type="labelenum" values="0|6|12|24" label="70581" default="12"/>
<setting id="addon_update_message" type="bool" label="70582" default="false"/> <setting id="addon_update_message" type="bool" label="70582" default="false"/>
<setting label="Lista activa" type="text" id="lista_activa" default="alfavorites-default.json" visible="false"/> <setting label="Lista activa" type="text" id="lista_activa" default="kodfavorites-default.json" visible="false"/>
<setting type="sep"/> <setting type="sep"/>
<setting label="70583" type="lsep"/> <setting label="70583" type="lsep"/>
@@ -275,7 +275,7 @@
<setting id="addon_update_timer" type="labelenum" values="0|6|12|24" label="Intervalo entre actualizaciones automáticas (horas)" default="12"/> <setting id="addon_update_timer" type="labelenum" values="0|6|12|24" label="Intervalo entre actualizaciones automáticas (horas)" default="12"/>
<setting id="addon_update_message" type="bool" label="¿Quiere ver mensajes de las actualizaciones?" default="false"/> <setting id="addon_update_message" type="bool" label="¿Quiere ver mensajes de las actualizaciones?" default="false"/>
<setting label="Lista activa" type="text" id="lista_activa" default="alfavorites-default.json" visible="false"/> <setting label="Lista activa" type="text" id="lista_activa" default="kodfavorites-default.json" visible="false"/>
<setting type="sep"/> <setting type="sep"/>
<setting label="Gestión de actualizaciones de otros addon relacionados con Alfa:" type="lsep"/> <setting label="Gestión de actualizaciones de otros addon relacionados con Alfa:" type="lsep"/>
@@ -23,7 +23,7 @@
<height>34</height> <height>34</height>
<width>725</width> <width>725</width>
<font>font12_title</font> <font>font12_title</font>
<textcolor>0xFFFFA500</textcolor> <textcolor>0xFFFFFFFF</textcolor>
<align>center</align> <align>center</align>
<aligny>center</aligny> <aligny>center</aligny>
<label>$ADDON[plugin.video.kod 70000]</label> <label>$ADDON[plugin.video.kod 70000]</label>
+12
View File
@@ -0,0 +1,12 @@
# -*- coding: utf-8 -*-
import os
import sys
# Appends the main plugin dir to the PYTHONPATH if an internal package cannot be imported.
# Examples: In Plex Media Server all modules are under "Code.*" package, and in Enigma2 under "Plugins.Extensions.*"
try:
# from core import logger
import core
except:
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
@@ -14,7 +14,7 @@ from platformcode import config
from core import jsontools, tvdb from core import jsontools, tvdb
from core.item import Item from core.item import Item
from platformcode import platformtools from platformcode import platformtools
from channels.support import typo, log from core.support import typo, log
TAG_TVSHOW_RENUMERATE = "TVSHOW_AUTORENUMBER" TAG_TVSHOW_RENUMERATE = "TVSHOW_AUTORENUMBER"
TAG_SEASON_EPISODE = "season_episode" TAG_SEASON_EPISODE = "season_episode"
@@ -86,7 +86,7 @@ def write_data(channel, show, data):
log() log()
dict_series = jsontools.get_node_from_file(channel, TAG_TVSHOW_RENUMERATE) dict_series = jsontools.get_node_from_file(channel, TAG_TVSHOW_RENUMERATE)
tvshow = show.strip() tvshow = show.strip()
list_season_episode = dict_series.get(tvshow, {}).get(TAG_SEASON_EPISODE, []) # list_season_episode = dict_series.get(tvshow, {}).get(TAG_SEASON_EPISODE, [])
if data: if data:
dict_renumerate = {TAG_SEASON_EPISODE: data} dict_renumerate = {TAG_SEASON_EPISODE: data}
@@ -94,7 +94,7 @@ def write_data(channel, show, data):
else: else:
dict_series.pop(tvshow, None) dict_series.pop(tvshow, None)
result, json_data = jsontools.update_node(dict_series, channel, TAG_TVSHOW_RENUMERATE) result = jsontools.update_node(dict_series, channel, TAG_TVSHOW_RENUMERATE)[0]
if result: if result:
if data: if data:
@@ -103,7 +103,7 @@ def write_data(channel, show, data):
message = config.get_localized_string(60444) message = config.get_localized_string(60444)
else: else:
message = config.get_localized_string(70593) message = config.get_localized_string(70593)
heading = show.strip() heading = show.strip()
platformtools.dialog_notification(heading, message) platformtools.dialog_notification(heading, message)
@@ -128,9 +128,9 @@
"label": "@70238", "label": "@70238",
"lvalues": [ "lvalues": [
"@70244", "@70244",
"Reordenar" "@70245"
], ],
"default": 1, "default": 0,
"enabled": true, "enabled": true,
"visible": true "visible": true
}, },
@@ -139,13 +139,13 @@
"type": "list", "type": "list",
"label": "@70246", "label": "@70246",
"lvalues": [ "lvalues": [
"Esp, Lat, Sub, Eng, Vose", "Ita, Sub, Eng, Vos, Vosi",
"Esp, Sub, Lat, Eng, Vose", "Eng, Ita, Sub, Vos, Vosi",
"Eng, Sub, Vose, Esp, Lat", "Sub, Ita, Eng, Vos, Vosi",
"Vose, Eng, Sub, Esp, Lat" "Eng, Sub, Ita, Vos, Vosi"
], ],
"default": 0, "default": 0,
"enabled": "eq(-1,'Reordenar')", "enabled": "eq(-1,'@70245')",
"visible": true "visible": true
}, },
{ {
@@ -9,12 +9,7 @@ import time
import unicodedata import unicodedata
from core import filetools from core import filetools, jsontools, scraper, scrapertools, servertools, videolibrarytools, support
from core import jsontools
from core import scraper
from core import scrapertools
from core import servertools
from core import videolibrarytools
from core.downloader import Downloader from core.downloader import Downloader
from core.item import Item from core.item import Item
from platformcode import config, logger from platformcode import config, logger
@@ -90,7 +85,7 @@ def mainlist(item):
estados = [i.downloadStatus for i in itemlist] estados = [i.downloadStatus for i in itemlist]
# Si hay alguno completado # Si hay alguno completado
if 2 in estados: if 2 in estados:
itemlist.insert(0, Item(channel=item.channel, action="clean_ready", title=config.get_localized_string(70218), itemlist.insert(0, Item(channel=item.channel, action="clean_ready", title=config.get_localized_string(70218),
contentType=item.contentType, contentChannel=item.contentChannel, contentType=item.contentType, contentChannel=item.contentChannel,
@@ -104,22 +99,20 @@ def mainlist(item):
# Si hay alguno pendiente # Si hay alguno pendiente
if 1 in estados or 0 in estados: if 1 in estados or 0 in estados:
itemlist.insert(0, Item(channel=item.channel, action="download_all", title=config.get_localized_string(70220), itemlist.insert(0, Item(channel=item.channel, action="download_all", title=support.typo(config.get_localized_string(70220),'bold'),
contentType=item.contentType, contentChannel=item.contentChannel, contentType=item.contentType, contentChannel=item.contentChannel,
contentSerieName=item.contentSerieName, text_color="green")) contentSerieName=item.contentSerieName))
if len(itemlist): if len(itemlist):
itemlist.insert(0, Item(channel=item.channel, action="clean_all", title=config.get_localized_string(70221), itemlist.insert(0, Item(channel=item.channel, action="clean_all", title=support.typo(config.get_localized_string(70221),'bold'),
contentType=item.contentType, contentChannel=item.contentChannel, contentType=item.contentType, contentChannel=item.contentChannel,
contentSerieName=item.contentSerieName, text_color="red")) contentSerieName=item.contentSerieName))
if not item.contentType == "tvshow" and config.get_setting("browser", "downloads") == True: if not item.contentType == "tvshow" and config.get_setting("browser", "downloads") == True:
itemlist.insert(0, Item(channel=item.channel, action="browser", title=config.get_localized_string(70222), itemlist.insert(0, Item(channel=item.channel, action="browser", title=support.typo(config.get_localized_string(70222),'bold'),url=DOWNLOAD_PATH))
url=DOWNLOAD_PATH, text_color="yellow"))
if not item.contentType == "tvshow": if not item.contentType == "tvshow":
itemlist.insert(0, Item(channel=item.channel, action="settings", title=config.get_localized_string(70223), itemlist.insert(0, Item(channel=item.channel, action="settings", title= support.typo(config.get_localized_string(70223),'bold color kod')))
text_color="blue"))
return itemlist return itemlist
@@ -274,8 +267,7 @@ def move_to_libray(item):
library_path = filetools.join(config.get_videolibrary_path(), *filetools.split(item.downloadFilename)) library_path = filetools.join(config.get_videolibrary_path(), *filetools.split(item.downloadFilename))
final_path = download_path final_path = download_path
if config.get_setting("library_add", "downloads") == True and config.get_setting("library_move", if config.get_setting("library_add", "downloads") == True and config.get_setting("library_move", "downloads") == True:
"downloads") == True:
if not filetools.isdir(filetools.dirname(library_path)): if not filetools.isdir(filetools.dirname(library_path)):
filetools.mkdir(filetools.dirname(library_path)) filetools.mkdir(filetools.dirname(library_path))
@@ -7,8 +7,7 @@
import re import re
import urllib import urllib
from channels import support from core import httptools, scrapertools, tmdb, support
from core import httptools, scrapertools, tmdb
from core.item import Item from core.item import Item
from platformcode import logger from platformcode import logger
@@ -85,5 +84,5 @@ def tvoggi(item):
def do_search(item): def do_search(item):
from channels import search from specials import search
return search.do_search(item) return search.do_search(item)
@@ -30,7 +30,7 @@ def fechahora_actual():
# Helpers para listas # Helpers para listas
# ------------------- # -------------------
PREFIJO_LISTA = 'alfavorites-' PREFIJO_LISTA = 'kodfavorites-'
# Devuelve el nombre de la lista activa (Ej: alfavorites-default.json) # Devuelve el nombre de la lista activa (Ej: alfavorites-default.json)
def get_lista_activa(): def get_lista_activa():
+1 -1
View File
@@ -257,7 +257,7 @@ def novedades(item):
list_canales, any_active = get_channels_list() list_canales, any_active = get_channels_list()
if config.is_xbmc(): if config.is_xbmc():
from channels import side_menu from specials import side_menu
if mode=='silent' and any_active and len(list_canales[item.extra]) > 0: if mode=='silent' and any_active and len(list_canales[item.extra]) > 0:
side_menu.set_menu_settings(item) side_menu.set_menu_settings(item)
aux_list=[] aux_list=[]
+1 -2
View File
@@ -13,7 +13,6 @@ from core.item import Item
from platformcode import config, logger from platformcode import config, logger
from platformcode import platformtools from platformcode import platformtools
from core import tmdb from core import tmdb
import xbmc, xbmcaddon import xbmc, xbmcaddon
addon = xbmcaddon.Addon('metadata.themoviedb.org') addon = xbmcaddon.Addon('metadata.themoviedb.org')
def_lang = addon.getSetting('language') def_lang = addon.getSetting('language')
@@ -437,7 +436,7 @@ def show_result(item):
def channel_search(search_results, channel_parameters, tecleado): def channel_search(search_results, channel_parameters, tecleado):
try: try:
exec "from channels import " + channel_parameters["channel"] + " as module" exec("from specials import " + channel_parameters["channel"] + " as module")
mainlist = module.mainlist(Item(channel=channel_parameters["channel"])) mainlist = module.mainlist(Item(channel=channel_parameters["channel"]))
search_items = [item for item in mainlist if item.action == "search"] search_items = [item for item in mainlist if item.action == "search"]
if not search_items: if not search_items:
@@ -624,7 +624,7 @@ def channel_search(queue, channel_parameters, category, title_year, tecleado):
title_search = urllib.unquote_plus(tecleado) title_search = urllib.unquote_plus(tecleado)
exec "from channels import " + channel_parameters["channel"] + " as module" exec "from specials import " + channel_parameters["channel"] + " as module"
mainlist = module.mainlist(Item(channel=channel_parameters["channel"])) mainlist = module.mainlist(Item(channel=channel_parameters["channel"]))
for item in mainlist: for item in mainlist:
@@ -89,7 +89,7 @@ def get_start_page():
if custom_start == False: if custom_start == False:
item = Item(channel="news", action="novedades", extra=category, mode='silent') item = Item(channel="news", action="novedades", extra=category, mode='silent')
else: else:
from channels import side_menu from specials import side_menu
item = Item() item = Item()
item = side_menu.check_user_home(item) item = side_menu.check_user_home(item)
return item return item
@@ -15,7 +15,7 @@ from platformcode import config, logger
from platformcode import platformtools from platformcode import platformtools
import xbmc, xbmcaddon import xbmc, xbmcaddon
from channelselector import get_thumb from channelselector import get_thumb
from channels.support import typo, thumb from core.support import typo, thumb
addon = xbmcaddon.Addon('metadata.themoviedb.org') addon = xbmcaddon.Addon('metadata.themoviedb.org')
def_lang = addon.getSetting('language') def_lang = addon.getSetting('language')
@@ -139,7 +139,7 @@ def busqueda(item):
new_item.extra = item.contentTitle.replace("+", " ") new_item.extra = item.contentTitle.replace("+", " ")
new_item.category = item.extra new_item.category = item.extra
from channels import search from specials import search
return search.do_search(new_item, cat) return search.do_search(new_item, cat)
@@ -1975,7 +1975,7 @@ def imagenes(item):
return itemlist return itemlist
if item.images: if item.images:
from channels import infoplus from specials import infoplus
for key, value in item.images.iteritems(): for key, value in item.images.iteritems():
if key == "tmdb" and "Tmdb" in item.title: if key == "tmdb" and "Tmdb" in item.title:
if item.folder: if item.folder:
View File
@@ -422,7 +422,7 @@ def get_episodes(item):
def findvideos(item): def findvideos(item):
from channels import autoplay from specials import autoplay
logger.info() logger.info()
# logger.debug("item:\n" + item.tostring('\n')) # logger.debug("item:\n" + item.tostring('\n'))
+1 -1
View File
@@ -23,7 +23,7 @@ except:
from core import channeltools, filetools, videolibrarytools from core import channeltools, filetools, videolibrarytools
from platformcode import logger from platformcode import logger
from platformcode import platformtools from platformcode import platformtools
from channels import videolibrary from specials import videolibrary
from lib import generictools from lib import generictools