105 Commits

Author SHA1 Message Date
Alhaziel01
1e1787e9e9 Playback Monitor as a service,
Global search fix
other minimal fix
2021-11-27 11:58:20 +01:00
Alhaziel01
5257183fb7 Modifiche del 26/11/2021 2021-11-26 18:55:51 +01:00
Alhaziel01
48996688a6 Riscritto News e fix vari 2021-10-23 10:51:56 +02:00
Alhaziel01
123bf489ac Fix linkup e styonline 2021-10-23 09:55:26 +02:00
Alhaziel01
55dbf957c0 fix 2021-10-23 09:10:12 +02:00
Alhaziel01
526bbdd4d1 Chiusure videolibrarybd in videolibrary 2021-10-06 19:04:32 +02:00
Alhaziel01
a578a095ff DB Compresso 2021-10-06 18:58:36 +02:00
Alhaziel01
ca29ea7216 Fix Visualizzazione 2021-10-01 19:53:16 +02:00
Alhaziel01
3c60b5c710 Fix News 2021-10-01 19:23:19 +02:00
Alhaziel01
f2177d7ffd ops 2021-10-01 09:50:19 +02:00
Alhaziel01
003f3905f0 - Fix AltadefinizioneCommunity
- Fix HDmario e Streamtape
2021-10-01 09:41:31 +02:00
Alhaziel01
5348eebe19 - Riscritto News
- Finzioni peliculas -> movies, episodios -> episodes
 - Aggiornato sqlitedict
 - fix minori
2021-09-30 19:41:46 +02:00
Alhaziel01
52c74d3852 Fix Altadefinizione Click 2021-09-29 16:34:36 +02:00
Alhaziel01
6639b5aaca Fix AnimeSaturn e serverWindow 2021-09-29 12:00:59 +02:00
Alhaziel01
fee7a27758 - Fix Videoteca
- Aggiunti server VOE e HighLoad
 - dbg spostato in logger
 - altre migliorie
2021-09-29 10:35:21 +02:00
Alhaziel01
4046014220 Piccola modifica 2021-09-25 17:21:48 +02:00
Alhaziel01
3838a22089 aggiornamento ricerca alternativa 2021-09-25 11:12:31 +02:00
mac12m99
32d88dc77c Update updater.py 2021-09-23 19:13:12 +02:00
Alhaziel01
69a6a98a56 Fix e migliorie Paginazione 2021-09-18 12:32:37 +02:00
Alhaziel01
7196425322 - Migliorie InfoPlus
- Fix Ricerca Globale
- Inizio riscrittura Ricerca Alternativa
2021-09-17 19:11:20 +02:00
Alhaziel01
b80e6295ff Fix e Migliorie a:
- Ricerca Globale
 - InfoPlus
2021-09-16 20:03:51 +02:00
Alhaziel01
938b8e6355 Fix vari 2021-09-14 08:27:59 +02:00
Alhaziel01
10ee3d0425 Fix Played Time 2021-09-09 20:20:03 +02:00
Alhaziel01
dd309c307e Fix Ricerca Globale 2021-09-09 20:10:04 +02:00
Alhaziel01
b84f682461 Scrape come Classe 2021-09-08 18:57:42 +02:00
Alhaziel01
2a5a83c767 Modifiche e Fix a segna come già visto 2021-09-04 20:08:30 +02:00
Alhaziel01
905e1ad6ee - Vai a pagina come lista se presente numero massimo di pagine
- Fix vai a primo episodio non visto in videoteca
 - Migliorata grafica Ricerca Globale
 - Altri piccoli cambiamenti
2021-09-03 20:22:51 +02:00
Alhaziel01
dc93170fd5 - Vai a primo episodio non visto in videoteca
- piccoli aggiustamenti
2021-08-28 19:45:22 +02:00
Alhaziel01
60ec158008 Risposta server come Dict e modifiche varie 2021-08-28 18:10:47 +02:00
Alhaziel01
8975f950c5 Merge branch 'master' into alpha 2021-08-28 16:43:20 +02:00
Alhaziel01
27562cad4d alcuni fix 2021-08-24 19:27:41 +02:00
Alhaziel01
dfeec60fe3 Modifiche ad Alpha 2021-08-24 17:38:44 +02:00
Alhaziel01
2764c48805 Fix e migliorie Videoteca
- aggiunti in settings:
   - Converti Videoteca
   - Ripristina Videoteca da DB
2021-07-14 19:19:32 +02:00
Alhaziel01
b3eff4bb07 Fix trakt 2021-07-13 12:15:07 +02:00
Alhaziel01
ed6c7caa91 Icone Automatiche (continua) 2021-07-08 20:06:54 +02:00
Alhaziel01
132301b06d Alcuni Fix e cambiamenti 2021-07-08 19:26:35 +02:00
Alhaziel01
841c68fb86 Fix Videoteca per Py2 2021-07-08 18:37:35 +02:00
Alhaziel01
17edb2d69f icone Automatiche (continua) 2021-07-08 17:58:10 +02:00
Alhaziel01
f9223c7a48 Gestione icone automatico (Inizio) 2021-07-08 17:28:24 +02:00
Alhaziel01
bbc79ec2bb alcuni Fix 2021-07-07 16:39:21 +02:00
Alhaziel01
66def5c3a1 Fix streamZ 2021-07-06 17:26:09 +02:00
Alhaziel01
9041d4c1b7 Fix Nuovo Tema 2021-07-06 17:25:50 +02:00
Alhaziel01
4db8d3a388 Altadefinizione Click e aggiungi alla videoteca per contentTpe non definiti 2021-07-06 10:04:54 +02:00
Alhaziel01
3103864308 Fix 2021-07-05 19:51:47 +02:00
Alhaziel01
2662277a71 Fix aggiunta alla videoteca tramite Ricerca Globale 2021-07-05 17:00:38 +02:00
Alhaziel01
f9a4d0dbbb Fix Configurazione Videoteca 2021-07-02 18:15:35 +02:00
Alhaziel01
c86cdab9da Fix Episodio Successivo 2021-07-01 19:48:26 +02:00
Alhaziel01
1e2f88c47a Fix Sincorinizzazione Videoteca 2021-07-01 17:10:02 +02:00
Alhaziel01
fc0822f93a Fix Sincronizzazione Libreria 2021-07-01 12:59:55 +02:00
Alhaziel01
fc1ca5435f Bozza Sincronizzazione serie TV con libreria 2021-06-30 19:20:57 +02:00
Alhaziel01
60bf2d670a Fix Ordinamento Server 2021-06-21 10:57:37 +02:00
Alhaziel01
acaed1c036 Pulizia settings e immagini registi in videoteca 2021-06-18 20:04:44 +02:00
Alhaziel01
7965daf524 fix Videoteca 2021-06-18 19:44:36 +02:00
Alhaziel01
8b1e6acc6e Fix Videolibrarytools 2021-06-18 19:34:32 +02:00
Alhaziel01
0367ea31a7 Fix Render Items 2021-06-18 14:51:00 +02:00
Alhaziel01
658666bd6b Fix Render Items e ordinamento 2021-06-18 12:19:42 +02:00
Alhaziel01
b32b500b07 Ordinamento Server 2021-06-18 10:32:54 +02:00
Alhaziel01
ea5f4de258 Fix support.servers 2021-06-18 10:32:25 +02:00
Alhaziel01
002d4bd32a Fix Render Items 2021-06-18 10:31:46 +02:00
Alhaziel01
e6c09ab8bb - Nuovo InfoPlus
- Piccole Migliorie
2021-06-16 18:42:31 +02:00
Alhaziel01
3d61f5dc54 Fix Impostazioni server 2021-06-16 09:33:30 +02:00
Alhaziel01
0cceffea0c Nuova Videoteca Gestione episodi locali (Inizio) 2021-06-10 19:07:53 +02:00
Alhaziel01
3fd09dbb11 - Fix aggiunta episodi presenti in Libreria
- fix Nomi episodi in ricerca globale
2021-06-10 16:57:12 +02:00
Alhaziel01
4b1cb8f9a8 Piccoli Fix 2021-06-10 16:01:58 +02:00
Alhaziel01
a04aa7cb73 Merge branch 'master' into alpha 2021-06-10 16:01:03 +02:00
Alhaziel01
3c05a3cd0c Piccoli Fix render items 2021-06-09 20:09:34 +02:00
Alhaziel01
eb0aa3cafe Piccoli Fix 2021-06-08 20:11:56 +02:00
mac12m99
34c438d01b ops 2021-06-08 19:55:53 +02:00
mac12m99
b845810d7e Conversione videoteca: cambio scraper e progresso 2021-06-08 19:54:51 +02:00
mac12m99
89c8de9522 Merge remote-tracking branch 'origin/alpha' into alpha 2021-06-08 19:49:31 +02:00
mac12m99
46b8eb945a Merge branch 'alpha' of /home/marco/.kodi/addons/plugin.video.kod with conflicts. 2021-06-08 19:49:30 +02:00
Alhaziel01
ec850dc045 Fix Conversione Videoteca 2021-06-08 19:46:08 +02:00
Alhaziel01
5f16ff4121 - Fix Render Items
- Fix Autorenumber
 - Fix Conversione Videoteca
2021-06-08 18:07:40 +02:00
mac12m99
dbc2ecd57e Bozza conversione videoteca 2021-06-05 20:41:17 +02:00
Alhaziel01
1868420425 Formattazione Titoli in render_items + correzione di alcuni canali 2021-06-05 15:51:46 +02:00
Alhaziel01
ab8136e326 Piccolo fix 2021-06-04 15:39:45 +02:00
Alhaziel01
608b6e6a15 ops 2021-06-04 11:18:30 +02:00
Alhaziel01
e6b28189dd - Fix e Migliorie Videoteca
- Server in finestra come default (per canali e videoteca)
2021-06-04 10:57:45 +02:00
Alhaziel01
ef8f78ea07 Fix aggiornamento Videoteca 2021-05-29 19:04:59 +02:00
Alhaziel01
f7fd28e9d1 Fix CB01 2021-05-29 18:35:00 +02:00
Alhaziel01
01059eb373 - Migliorie Videoteca
- Finestra selezione server
 - Fix Autorenumber (sincronizzazione fra videoteca a canali)
 - Fix Autoplay
2021-05-29 18:17:40 +02:00
Alhaziel01
dc2140f2ca Fix e migliorie Videoteca 2021-05-27 20:35:42 +02:00
Alhaziel01
753f915e5a Migliorie e correzioni alla videoteca 2021-05-25 20:00:11 +02:00
mac12m99
228c7bbd79 pulizia 2021-05-22 17:43:43 +02:00
Alhaziel01
ba98922a9c Fix e migliorie Videoteca + Inizio filtraggio risultati 2021-05-22 16:49:04 +02:00
mac12m99
a4e2278122 Merge branch 'master' into alpha
# Conflicts:
#	service.py
2021-05-21 20:34:14 +02:00
Alhaziel01
529e24e4c1 Correzioni videoteca 2021-05-21 17:35:03 +02:00
Alhaziel01
6b8305f7ae Merge branch 'alpha' of https://github.com/kodiondemand/addon into alpha 2021-05-20 20:26:09 +02:00
Alhaziel01
b0d3dd2fa7 Alcune migliorie alla videoteca 2021-05-20 20:23:21 +02:00
mac12m99
f1d8873fa4 Rimosse alcune opzioni dal menu contestuale 2021-05-19 21:30:58 +02:00
mac12m99
b773164dad Httptools: popolo url e headers anche se la richiesta fallisce 2021-05-16 10:23:09 +02:00
mac12m99
b6dcb8f716 Ottimizzazione remove_host e contenuto dell'item al primo posto nella schermata InfoWindow 2021-05-15 20:37:00 +02:00
Alhaziel01
8eb5881559 dbconverter, piccole correzioni 2021-05-15 19:45:49 +02:00
Alhaziel01
057f94027a dbconverter reload Skin 2021-05-15 19:15:20 +02:00
Alhaziel01
5403e65895 piccole correzioni dbconverter 2021-05-15 18:02:07 +02:00
mac12m99
ae06db005b Ottimizzazioni dbconverter 2021-05-15 16:52:27 +02:00
mac12m99
57814f6e7c Merge remote-tracking branch 'origin/alpha' into alpha
# Conflicts:
#	platformcode/dbconverter.py
2021-05-15 16:30:26 +02:00
mac12m99
f52ce7f9d3 Ottimizzazioni dbconverter 2021-05-15 16:25:33 +02:00
Alhaziel01
551e89e0f5 alcune migliorie a dbconverter 2021-05-15 16:19:50 +02:00
mac12m99
273fff7c48 Riutilizzo connessione al db di kodi 2021-05-15 14:10:53 +02:00
Alhaziel01
b37cf50261 Test sincronizzazione libreria kodi 2021-05-15 12:18:59 +02:00
Alhaziel01
d925f26c8d Alcuni fix 2021-05-15 12:18:34 +02:00
Alhaziel01
5e3fd956b9 migliorie tmdb 2021-05-13 12:24:06 +02:00
Alhaziel01
4e980e426c Più informazioni da TMDB 2021-05-11 20:35:36 +02:00
Alhaziel01
c942f9b4ec Videoteca DB 2021-05-11 18:56:11 +02:00
434 changed files with 16945 additions and 17282 deletions

View File

@@ -67,7 +67,7 @@ Controlla sia presente qualcosa, tra le " " di thumbnail e banner, e che le imma
Riepilogo voci:
movie, tvshow, anime, documentary, vos, adult
movie, tvshow, anime, documentary, sub, adult
(se il sito contiene film e serie, devono esserci sia movie che tvshow, se contiene solo film, solo movie)

View File

@@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="plugin.video.kod" name="Kodi on Demand BETA" version="1.7" provider-name="KoD Team">
<addon id="plugin.video.kod" name="Kodi on Demand ALPHA" version="2.0" provider-name="KoD Team">
<requires>
<!-- <import addon="script.module.libtorrent" optional="true"/> -->
<import addon="metadata.themoviedb.org"/>
<import addon="metadata.tvshows.themoviedb.org"/>
<!-- <import addon="metadata.tvdb.com"/> -->
<import addon="script.module.web-pdb" />
</requires>
<extension point="xbmc.python.pluginsource" library="default.py">
@@ -23,7 +19,7 @@
<summary lang="it">Kodi on Demand è un addon di Kodi per cercare e guardare contenuti sul web.</summary>
<assets>
<icon>resources/media/logo.png</icon>
<fanart>resources/media/fanart.jpg</fanart>
<fanart>resources/media/dark_background.jpg</fanart>
<screenshot>resources/media/screenshot-1.png</screenshot>
<screenshot>resources/media/screenshot-2.png</screenshot>
<screenshot>resources/media/screenshot-3.png</screenshot>

View File

@@ -6,28 +6,28 @@
"animeforce": "https://www.animeforce.it",
"animeleggendari": "https://animezeus.com",
"animesaturn": "https://www.animesaturn.it",
"animeunity": "https://www.animeunity.it",
"animeunity": "https://www.animeunity.tv",
"animeuniverse": "https://www.animeuniverse.it",
"animeworld": "https://www.animeworld.tv",
"aniplay": "https://aniplay.it",
"casacinema": "https://www.casacinema.page",
"cb01anime": "https://www.cineblog01.red",
"cineblog01": "https://cb01.uno",
"cinemalibero": "https://cinemalibero.bar",
"cinemalibero": "https://cinemalibero.surf",
"cinetecadibologna": "http://cinestore.cinetecadibologna.it",
"discoveryplus": "https://www.discoveryplus.com",
"dreamsub": "https://dreamsub.stream",
"dsda": "https://www.dsda.press",
"eurostreaming": "https://eurostreaming.bar",
"eurostreaming": "https://eurostreaming.world",
"filmigratis": "https://filmigratis.org",
"guardaseriecam": "https://guardaserie.cam",
"guardaserieclick": "https://www.guardaserie.builders",
"guardaserieicu": "https://guardaserie.cfd",
"guardaserieicu": "https://guardaserie.center",
"hd4me": "https://hd4me.net",
"ilcorsaronero": "https://ilcorsaronero.link",
"ilgeniodellostreaming": "https://ilgeniodellostreaming.wtf",
"ilgeniodellostreaming": "https://ilgeniodellostreaming.bet",
"ilgeniodellostreaming_cam": "https://ilgeniodellostreaming.city",
"italiaserie": "https://italiaserie.date",
"italiaserie": "https://italiaserie.men",
"mediasetplay": "https://www.mediasetplay.mediaset.it",
"mondoserietv": "https://mondoserietv.club",
"paramount": "https://www.paramountnetwork.it",
@@ -38,17 +38,16 @@
"serietvonline": "https://serietvonline.art",
"serietvsubita": "http://serietvsubita.xyz",
"serietvu": "https://www.serietvu.live",
"streamingcommunity": "https://streamingcommunity.vip",
"streamtime": "https://t.me/s/StreamTime",
"tantifilm": "https://www.tantifilm.stream",
"tantifilm": "https://www.tantifilm.cfd",
"tapmovie": "https://it.tapmovie.net",
"toonitalia": "https://toonitalia.co",
"vvvvid": "https://www.vvvvid.it"
},
"findhost": {
"altadefinizioneclick": "https://altadefinizione-nuovo.click",
"altadefinizionecommunity": "https://altaregistrazione.com",
"altadefinizionecommunity": "https://altaregistrazione.net",
"animealtadefinizione": "https://www.animealtadefinizione.it",
"filmpertutti": "https://filmpertuttiii.nuovo.live"
"filmpertutti": "https://filmpertuttiii.nuovo.live",
"streamingcommunity": "https://t.me/s/StreamingCommunity_nuovo_link"
}
}

View File

@@ -23,7 +23,7 @@ se vanno cancellati tutti deve rimanere la voce:
"active": false,
"thumbnail": "",
"banner": "",
"categories": ["movie", "tvshow", "anime", "vos", "documentary"],
"categories": ["movie", "tvshow", "anime", "sub, "documentary"],
"not_active": ["include_in_newest"],
"settings": [
{
@@ -35,7 +35,7 @@ se vanno cancellati tutti deve rimanere la voce:
"visible": false
},
{
"id": "include_in_newest_peliculas",
"id": "include_in_newest_movie",
"type": "bool",
"label": "@70727",
"default": false,

View File

@@ -75,20 +75,19 @@ headers = [['Referer', host]]
@support.menu
def mainlist(item):
support.info(item)
# Ordine delle voci
# Voce FILM, puoi solo impostare l'url
film = ['', # url per la voce FILM, se possibile la pagina principale con le ultime novità
#Voce Menu,['url','action','args',contentType]
('Al Cinema', ['', 'peliculas', '']),
('Al Cinema', ['', 'movies', '']),
('Generi', ['', 'genres', 'genres']),
('Per Lettera', ['', 'genres', 'letters']),
('Anni', ['', 'genres', 'years']),
('Qualità', ['', 'genres', 'quality']),
('Mi sento fortunato', ['', 'genres', 'lucky']),
('Popolari', ['', 'peliculas', '']),
('Sub-ITA', ['', 'peliculas', ''])
('Popolari', ['', 'movies', '']),
('Sub-ITA', ['', 'movies', ''])
]
# Voce SERIE, puoi solo impostare l'url
@@ -145,31 +144,29 @@ def mainlist(item):
# lang = lingua del video. Es: ITA, Sub-ITA, Sub, SUB ITA.
# AVVERTENZE: Se il titolo è trovato nella ricerca TMDB/TVDB/Altro allora le locandine e altre info non saranno quelle recuperate nel sito.!!!!
@support.scrape
def peliculas(item):
support.info(item)
#support.dbg() # decommentare per attivare web_pdb
def movies(item):
#logger.dbg() # decommentare per attivare web_pdb
action = ''
blacklist = ['']
patron = r''
patronBlock = r''
patronNext = ''
pagination = ''
pagination = True
#debug = True # True per testare le regex sul sito
return locals()
@support.scrape
def episodios(item):
support.info(item)
#support.dbg()
def episodes(item):
#logger.dbg()
action = ''
blacklist = ['']
patron = r''
patronBlock = r''
patronNext = ''
pagination = ''
pagination = True
#debug = True
return locals()
@@ -178,15 +175,14 @@ def episodios(item):
# per genere, per anno, per lettera, per qualità ecc ecc
@support.scrape
def genres(item):
support.info(item)
#support.dbg()
#logger.dbg()
action = ''
blacklist = ['']
patron = r''
patronBlock = r''
patronNext = ''
pagination = ''
pagination = True
#debug = True
return locals()
@@ -196,18 +192,18 @@ def genres(item):
# per quei casi dove il sito non differenzia film e/o serie e/o anime
# e la ricerca porta i titoli mischiati senza poterli distinguere tra loro
# andranno modificate anche le def peliculas e episodios ove occorre
# andranno modificate anche le def movies e episodes ove occorre
def select(item):
support.info('select --->', item)
#support.dbg()
logger.debug()
#logger.dbg()
data = httptools.downloadpage(item.url, headers=headers).data
# pulizia di data, in caso commentare le prossime 2 righe
data = re.sub('\n|\t', ' ', data)
data = re.sub(r'>\s+<', '> <', data)
block = scrapertools.find_single_match(data, r'')
if re.findall('', data, re.IGNORECASE):
support.info('select = ### è una serie ###')
return episodios(Item(channel=item.channel,
logger.debug('select = ### è una serie ###')
return episodes(Item(channel=item.channel,
title=item.title,
fulltitle=item.fulltitle,
url=item.url,
@@ -219,7 +215,7 @@ def select(item):
############## Fondo Pagina
# da adattare al canale
def search(item, text):
support.info('search', item)
logger.debug(text)
itemlist = []
text = text.replace(' ', '+')
item.url = host + '/index.php?do=search&story=%s&subaction=search' % (text)
@@ -227,35 +223,35 @@ def search(item, text):
# se il canale è solo film, si può omettere, altrimenti bisgona aggiungerlo e discriminare.
item.contentType = item.contentType
try:
return peliculas(item)
return movies(item)
# Se captura la excepcion, para no interrumpir al buscador global si un canal falla
except:
import sys
for line in sys.exc_info():
info('search log:', line)
logger.error('search log:', line)
return []
# da adattare al canale
# inserire newest solo se il sito ha la pagina con le ultime novità/aggiunte
# altrimenti NON inserirlo
def newest(categoria):
support.info('newest ->', categoria)
def newest(category):
logger.debug(category)
itemlist = []
item = Item()
try:
if categoria == 'peliculas':
if category == 'movie':
item.url = host
item.action = 'peliculas'
itemlist = peliculas(item)
item.action = 'movies'
itemlist = movies(item)
if itemlist[-1].action == 'peliculas':
if itemlist[-1].action == 'movies':
itemlist.pop()
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.info('newest log: ', {0}.format(line))
logger.debug('newest log: ', {0}.format(line))
return []
return itemlist
@@ -265,5 +261,5 @@ def newest(categoria):
# sia per i siti con hdpass
#support.server(item, data='', itemlist=[], headers='', AutoPlay=True, CheckLinks=True)
def findvideos(item):
support.info('findvideos ->', item)
logger.debug()
return support.server(item, headers=headers)

View File

@@ -3,6 +3,7 @@
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:
@@ -10,3 +11,4 @@ try:
import core
except:
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")))

View File

@@ -4,7 +4,7 @@
# ------------------------------------------------------------
import random
from core import httptools, support
from core import httptools, support, config
from platformcode import logger
host = 'https://www.accuradio.com'
@@ -12,29 +12,27 @@ api_url = host + '/c/m/json/{}/'
headers = [['Referer', host]]
def mainlist(item):
itemlist = []
item.action = 'peliculas'
js = httptools.downloadpage(api_url.format('brands')).json
for it in js.get('features',[]):
itemlist = []
item.action = 'movies'
js = httptools.downloadpage(api_url.format('brands')).json
for it in js.get('features',[]) + js.get('brands',[]):
itemlist.append(
item.clone(url= '{}/{}'.format(host,it.get('canonical_url','')),
title=support.typo(it['name'],'italic') + support.typo(it.get('channels',''),'_ [] color kod')
))
for it in js.get('brands',[]):
itemlist.append(
item.clone(url= '{}/{}'.format(host,it.get('canonical_url','')),
title=support.typo(it['name'],'bullet bold') + support.typo(it.get('channels',''),'_ [] color kod')
extraInfo = it.get('channels',''),
title=it['name'],
thumbnail = support.thumb('music')
))
itemlist.append(item.clone(title=support.typo('Cerca...', 'bold color kod'), action='search', thumbnail=support.thumb('search')))
itemlist.append(item.clone(title=support.typo(config.getLocalizedString(70741) % 'Musica… ', 'bold'), action='search', thumbnail=support.thumb('music_search')))
support.channel_config(item, itemlist)
return itemlist
@support.scrape
def peliculas(item):
def movies(item):
tmdbEnabled = False
action = 'playradio'
patron = r'data-id="(?P<id>[^"]+)"\s*data-oldid="(?P<oldid>[^"]+)".*?data-name="(?P<title>[^"]+)(?:[^>]+>){5}<img class="[^"]+"\s*src="(?P<thumb>[^"]+)(?:[^>]+>){6}\s*(?P<plot>[^<]+)'
return locals()
@@ -68,7 +66,7 @@ def playradio(item):
def search(item, text):
support.info(text)
logger.debug(text)
item.url = host + '/search/' + text
itemlist = []
try:
@@ -76,9 +74,9 @@ def search(item, text):
artists = support.match(data, patronBlock=r'artistResults(.*?)</ul', patron=r'href="(?P<url>[^"]+)"\s*>(?P<title>[^<]+)').matches
if artists:
for url, artist in artists:
itemlist.append(item.clone(title=support.typo(artist,'bullet bold'), thumbnail=support.thumb('music'), url=host+url, action='peliculas'))
itemlist.append(item.clone(title=support.typo(artist,'bullet bold'), thumbnail=support.thumb('music'), url=host+url, action='movies'))
item.data = data
itemlist += peliculas(item)
itemlist += movies(item)
# Continua la ricerca in caso di errore
except:
import sys

View File

@@ -5,6 +5,6 @@
"active": true,
"thumbnail": "altadefinizione01.png",
"banner": "altadefinizione01.png",
"categories": ["movie", "vos"],
"categories": ["movie", "sub"],
"settings": []
}

View File

@@ -2,22 +2,11 @@
# ------------------------------------------------------------
# Canale per altadefinizione01
# ------------------------------------------------------------
"""
Eccezioni note che non superano il test del canale:
Avvisi:
- L'url si prende da questo file.
- è presente nelle novità-> Film.
Ulteriori info:
"""
from core import scrapertools, httptools, support
from core.item import Item
from platformcode import config, logger
# def findhost(url):
# data = httptools.downloadpage(url).data
# host = scrapertools.find_single_match(data, '<div class="elementor-button-wrapper"> <a href="([^"]+)"')
@@ -32,86 +21,81 @@ headers = [['Referer', host]]
def mainlist(item):
film = [
('Al Cinema', ['/cinema/', 'peliculas', 'pellicola']),
('Ultimi Aggiornati-Aggiunti', ['','peliculas', 'update']),
('Al Cinema', ['/cinema/', 'movies', 'pellicola']),
('Ultimi Aggiornati-Aggiunti', ['','movies', 'update']),
('Generi', ['', 'genres', 'genres']),
('Lettera', ['/catalog/a/', 'genres', 'orderalf']),
('Lettera', ['/catalog/a/', 'genres', 'az']),
('Anni', ['', 'genres', 'years']),
('Sub-ITA', ['/sub-ita/', 'peliculas', 'pellicola'])
('Sub-ITA', ['/sub-ita/', 'movies', 'pellicola'])
]
return locals()
@support.scrape
def peliculas(item):
support.info('peliculas', item)
def movies(item):
## deflang = 'ITA'
action="findvideos"
patron = r'<div class="cover boxcaption"> +<h2>\s*<a href="(?P<url>[^"]+)">(?P<title>[^<]+).*?src="(?P<thumb>[^"]+).*?<div class="trdublaj">(?P<quality>[^<]+).*?<span class="ml-label">(?P<year>[0-9]+).*?<span class="ml-label">(?P<duration>[^<]+).*?<p>(?P<plot>[^<]+)'
if item.args == "search":
patronBlock = r'</script> <div class="boxgrid caption">(?P<block>.*)<div id="right_bar">'
elif item.args == 'update':
patronBlock = r'<div class="widget-title">Ultimi Film Aggiunti/Aggiornati</div>(?P<block>.*?)<div id="alt_menu">'
patron = r'style="background-image:url\((?P<thumb>[^\)]+).+?<p class="h4">(?P<title>.*?)</p>[^>]+> [^>]+> [^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+> [^>]+> [^>]+>[^>]+>(?P<year>\d{4})[^>]+>[^>]+> [^>]+>[^>]+>(?P<duration>\d+|N/A).+?>.*?(?:>Film (?P<lang>Sub ITA)</a></p> )?<p>(?P<plot>[^<]+)<.*?href="(?P<url>[^"]+)'
elif item.args == 'orderalf':
elif item.args == 'az':
patron = r'<td class="mlnh-thumb"><a href="(?P<url>[^"]+)".*?src="(?P<thumb>[^"]+)"' \
'.+?[^>]+>[^>]+ [^>]+[^>]+ [^>]+>(?P<title>[^<]+).*?[^>]+>(?P<year>\d{4})<' \
'[^>]+>[^>]+>(?P<quality>[A-Z]+)[^>]+> <td class="mlnh-5">(?P<lang>.*?)</td>'
else:
patronBlock = r'<div class="cover_kapsul ml-mask">(?P<block>.*)<div class="page_nav">'
patronNext = '<span>\d</span> <a href="([^"]+)">'
# debug = True
patronNext = r'<a href="([^"]+)">&raquo;'
patronTotalPages = r'>(\d+)(?:[^>]+>){3}&raquo;'
return locals()
@support.scrape
def genres(item):
support.info('genres',item)
action = "peliculas"
action = "movies"
blacklist = ['Altadefinizione01']
if item.args == 'genres':
patronBlock = r'<ul class="kategori_list">(?P<block>.*?)<div class="tab-pane fade" id="wtab2">'
patronMenu = '<li><a href="(?P<url>[^"]+)">(?P<title>.*?)</a>'
patronGenreMenu = '<li><a href="(?P<url>[^"]+)">(?P<title>.*?)</a>'
elif item.args == 'years':
patronBlock = r'<ul class="anno_list">(?P<block>.*?)</li> </ul> </div>'
patronMenu = '<li><a href="(?P<url>[^"]+)">(?P<title>.*?)</a>'
elif item.args == 'orderalf':
elif item.args == 'az':
patronBlock = r'<div class="movies-letter">(?P<block>.*?)<div class="clearfix">'
patronMenu = '<a title=.*?href="(?P<url>[^"]+)"><span>(?P<title>.*?)</span>'
#debug = True
return locals()
@support.scrape
def orderalf(item):
support.info('orderalf',item)
def az(item):
action = 'findvideos'
patron = r'<td class="mlnh-thumb"><a href="(?P<url>[^"]+)".*?src="(?P<thumb>[^"]+)"'\
'.+?[^>]+>[^>]+ [^>]+[^>]+ [^>]+>(?P<title>[^<]+).*?[^>]+>(?P<year>\d{4})<'\
'[^>]+>[^>]+>(?P<quality>[A-Z]+)[^>]+> <td class="mlnh-5">(?P<lang>.*?)</td>'
patronNext = r'<span>[^<]+</span>[^<]+<a href="(.*?)">'
return locals()
def search(item, text):
support.info(item, text)
logger.debug(text)
itemlist = []
text = text.replace(" ", "+")
item.url = host + "/index.php?do=search&story=%s&subaction=search" % (text)
item.args = "search"
try:
return peliculas(item)
return movies(item)
# Cattura la eccezione così non interrompe la ricerca globle se il canale si rompe!
except:
import sys
@@ -119,18 +103,18 @@ def search(item, text):
logger.error("search except: %s" % line)
return []
def newest(categoria):
support.info(categoria)
def newest(category):
logger.debug(category)
itemlist = []
item = Item()
try:
if categoria == "peliculas":
if category == "movie":
item.url = host
item.action = "peliculas"
item.action = "movies"
item.contentType = 'movie'
itemlist = peliculas(item)
if itemlist[-1].action == "peliculas":
itemlist = movies(item)
if itemlist[-1].action == "movies":
itemlist.pop()
# Continua la ricerca in caso di errore
except:
@@ -142,7 +126,7 @@ def newest(categoria):
return itemlist
def findvideos(item):
support.info('findvideos', item)
logger.debug()
data = httptools.downloadpage(item.url).data
iframe = support.match(data, patron='player-container[^>]+>\s*<iframe[^>]+src="([^"]+)').match
if iframe:

View File

@@ -5,6 +5,6 @@
"language": ["ita","sub-ita"],
"thumbnail": "altadefinizione01_L.png",
"banner": "altadefinizione01_L.png",
"categories": ["movie","vos"],
"categories": ["movie","sub"],
"settings" :[]
}

View File

@@ -15,37 +15,30 @@ headers = [['Referer', host]]
# =========== home menu ===================
@support.menu
def mainlist(item):
support.info('mainlist',item)
film = [
('Al Cinema', ['/film-del-cinema', 'peliculas', '']),
('Al Cinema', ['/film-del-cinema', 'movies', '']),
('Generi', ['', 'genres', 'genres']),
('Anni', ['', 'genres', 'years']),
('Qualità', ['/piu-visti.html', 'genres', 'quality']),
('Mi sento fortunato', ['/piu-visti.html', 'genres', 'lucky']),
('Popolari', ['/piu-visti.html', 'peliculas', '']),
('Sub-ITA', ['/film-sub-ita/', 'peliculas', ''])
('Popolari', ['/piu-visti.html', 'movies', '']),
('Sub-ITA', ['/film-sub-ita/', 'movies', ''])
]
return locals()
# ======== def in ordine di action dal menu ===========================
@support.scrape
def peliculas(item):
# debug = True
support.info('peliculas',item)
def movies(item):
patron = r'<a href="(?P<url>[^"]+)">(?P<title>[^<]+)(?:[^>]+>){5}\s*<div class="[^"]+" style="background-image:url\((?P<thumb>[^\)]+)(?:[^>]+>){6}\s*(?P<year>\d{4})[^>]+>[^>]+>(?:\s*(?P<duration>\d+))?(?:[^>]+>){0,2}\s+(?P<quality>[a-zA-Z]+)\s+(?:[^>]+>){2}\s*(?P<lang>[^>]+)\s+[^>]+>'
patronNext = r'<span>\d</span> <a href="([^"]+)">'
# debug = True
return locals()
# =========== def pagina categorie ======================================
@support.scrape
def genres(item):
support.info('genres',item)
action = 'peliculas'
action = 'movies'
if item.args == 'genres':
patronBlock = r'<ul class="listSubCat" id="Film">(?P<block>.*)<ul class="listSubCat" id="Anno">'
elif item.args == 'years':
@@ -56,19 +49,17 @@ def genres(item):
patronBlock = r'FILM RANDOM.*?class="listSubCat">(?P<block>.*)</ul>'
action = 'findvideos'
patronMenu = r'<li><a href="(?P<url>[^"]+)">(?P<title>[^<]+)<'
#debug = True
return locals()
# =========== def per cercare film/serietv =============
#host+/index.php?do=search&story=avatar&subaction=search
def search(item, text):
support.info('search', item)
logger.debug(text)
itemlist = []
text = text.replace(" ", "+")
item.url = host+"/index.php?do=search&story=%s&subaction=search" % (text)
try:
return peliculas(item)
return movies(item)
# Se captura la excepcion, para no interrumpir al buscador global si un canal falla
except:
import sys
@@ -78,18 +69,18 @@ def search(item, text):
# =========== def per le novità nel menu principale =============
def newest(categoria):
support.info('newest', categoria)
def newest(category):
logger.debug(category)
itemlist = []
item = Item()
try:
if categoria == "peliculas":
if category == "movie":
item.url = host
item.action = "peliculas"
item.action = "movies"
item.contentType='movie'
itemlist = peliculas(item)
itemlist = movies(item)
if itemlist[-1].action == "peliculas":
if itemlist[-1].action == "movies":
itemlist.pop()
# Continua la ricerca in caso di errore
except:
@@ -101,5 +92,5 @@ def newest(categoria):
return itemlist
def findvideos(item):
support.info('findvideos', item)
logger.debug('findvideos', item)
return support.server(item, support.match(item, patron='<ul class="playernav">.*?</ul>', headers=headers).match)

View File

@@ -5,7 +5,7 @@
"language": ["ita","sub-ita"],
"thumbnail": "altadefinizioneclick.png",
"bannermenu": "altadefinizioneciclk.png",
"categories": ["tvshow","movie","vos"],
"not_active":["include_in_newest_series"],
"categories": ["tvshow","movie","sub"],
"not_active":["include_in_newest_tvshow"],
"settings": []
}

View File

@@ -2,22 +2,7 @@
# ------------------------------------------------------------
# Canale per altadefinizioneclick
# ----------------------------------------------------------
"""
Eccezioni che non superano il test del canale:
- indicare le eccezioni
Novità. Indicare in quale/i sezione/i è presente il canale:
- film
Avvisi:
- Eventuali avvisi per i tester
Ulteriori info:
"""
from platformcode.logger import debug
from platformcode import logger
from core import support
from core.item import Item
from platformcode import config
@@ -34,14 +19,14 @@ headers = [['Referer', host]]
@support.menu
def mainlist(item):
film = ['',
('Novità', ['/nuove-uscite/', 'peliculas', 'news']),
('Al Cinema', ['/al-cinema/', 'peliculas', 'cinema']),
('Novità', ['/nuove-uscite/', 'movies', 'news']),
('Al Cinema', ['/al-cinema/', 'movies', 'cinema']),
('A-Z',['/lista-film/', 'genres', 'az']),
('Generi', ['', 'genres', 'genres']),
('Anni', ['', 'genres', 'years']),
('Qualità', ['', 'genres', 'quality']),
('Mi sento Fortunato',[ '', 'genres', 'lucky']),
('Sub-ITA', ['/sub-ita/', 'peliculas', 'sub'])
('Sub-ITA', ['/sub-ita/', 'movies', 'sub'])
]
tvshow = ['/serie-tv/']
@@ -50,7 +35,7 @@ def mainlist(item):
return locals()
@support.scrape
def peliculas(item):
def movies(item):
action = 'check'
patron = r'<div class="wrapperImage">\s*(?:<span class="year">(?P<year>[^<]+)[^>]+>)?(?:<span class="hd">(?P<quality>[^<>]+))?.+?href="(?P<url>[^"]+)".+?src="(?P<thumb>[^"]+)".+?<h2 class="titleFilm">[^>]+>(?P<title>.+?)[ ]?(?:|\[(?P<lang>[^\]]+)\])?</a>.*?(?:IMDB\:</strong>[ ](?P<rating>.+?)<|</div>)'
@@ -67,16 +52,16 @@ def peliculas(item):
if not item.args:
# patronBlock = r'(?:ULTIMI INSERITI|Serie TV)(?P<block>.*?)</section'
patronBlock = r'({})(?P<block>.*?)</section'.format('ULTIMI INSERITI' if item.contentType == 'movie' else 'Serie TV')
# nella pagina "CERCA", la voce "SUCCESSIVO" apre la maschera di inserimento dati
# debugBlock = True
patronNext = r'<a class="next page-numbers" href="([^"]+)">'
patronTotalPages = r'>(\d+)(?:[^>]+>){3}<a class="next'
return locals()
@support.scrape
def genres(item):
action = 'peliculas'
patronMenu = r'<li><a href="(?P<url>[^"]+)">(?P<title>[^<]+)<'
action = 'movies'
patronGenreMenu = r'<li><a href="(?P<url>[^"]+)">(?P<title>[^<]+)<'
if item.args == 'genres':
patronBlock = r'<ul class="listSubCat" id="Film">(?P<block>.*)<ul class="listSubCat" id="Anno">'
@@ -97,33 +82,33 @@ def genres(item):
return locals()
def search(item, texto):
support.info("search ", texto)
def search(item, text):
logger.debug(text)
item.args = 'search'
item.url = host + "?s=" + texto
item.url = host + "?s=" + text
try:
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.logger.error("%s" % line)
logger.error("%s" % line)
return []
def newest(categoria):
support.info(categoria)
def newest(category):
logger.debug(category)
itemlist = []
item = Item()
try:
if categoria == "peliculas":
if category == "movie":
item.args = 'news'
item.contentType = 'movie'
item.url = host + "/nuove-uscite/"
item.action = "peliculas"
itemlist = peliculas(item)
item.action = "movies"
itemlist = movies(item)
if itemlist[-1].action == "peliculas":
if itemlist[-1].action == "movies":
itemlist.pop()
# Continua la ricerca in caso di errore
@@ -143,8 +128,6 @@ def check(item):
data = ''
episodes = support.match(pageData if pageData else seas_url, patronBlock=patron_episode, patron=patron_option).matches
for episode_url, episode in episodes:
# episode_url = support.urlparse.urljoin(item.url, episode_url)
# if '-' in episode: episode = episode.split('-')[0].zfill(2) + 'x' + episode.split('-')[1].zfill(2)
title = season + "x" + episode.zfill(2) + ' - ' + item.fulltitle
data += title + '|' + episode_url + '\n'
return data
@@ -153,10 +136,11 @@ def check(item):
patron_episode = '<div class="[^"]+" id="episodesModal"[^>]+>(.*?)</ul>'
patron_option = r'<a href="([^"]+?)".*?>(?:Stagione |Episodio )([^<]+?)</a>'
url = support.match(item, patron=r'<iframe id="iframeVid" width="[^"]+" height="[^"]+" src="([^"]+)" allowfullscreen').match
seasons = support.match(url, patronBlock=patron_season, patron=patron_option)
url = support.match(item, patron=r'<iframe id="iframeVid" width="[^"]+" height="[^"]+" src="([^"]+)" allowfullscreen')
seasons = support.match(url.match, patronBlock=patron_season, patron=patron_option)
if not seasons.match:
item.contentType = 'movie'
item.contentType = 'tvshow'
item.data = url.data
return findvideos(item)
data = ''
@@ -172,10 +156,10 @@ def check(item):
if res.result():
data += res.result()
item.data = data
return episodios(item)
return episodes(item)
@support.scrape
def episodios(item):
def episodes(item):
data = item.data
patron = r'(?P<season>\d+)x(?P<episode>\d+)\s*-\s*(?P<title>[^\|]+)\|(?P<url>[^ ]+)'
@@ -188,10 +172,7 @@ def episodios(item):
return locals()
def findvideos(item):
support.info('findvideos', item)
return support.hdpass_get_servers(item)
logger.debug()
return support.hdpass_get_servers(item, item.data)
# def play(item):
# if 'hdpass' in item.url:
# return support.hdpass_get_url(item)
# return [item]

View File

@@ -5,7 +5,7 @@
"active": true,
"thumbnail": "altadefinizionecommunity.png",
"banner": "",
"categories": ["movie", "tvshow", "vos"],
"categories": ["movie", "tvshow", "sub"],
"not_active": ["include_in_newest"],
"settings": [
{

View File

@@ -13,163 +13,44 @@ def findhost(url):
host = config.get_channel_url(findhost)
register_url = 'https://altaregistrazione.com'
headers = {'Referer': host, 'x-requested-with': 'XMLHttpRequest'}
register_url = 'https://altaregistrazione.net'
if 'altadefinizionecommunity' not in host:
config.get_channel_url(findhost, forceFindhost=True)
if host.endswith('/'):
host = host[:-1]
headers = {'Referer': host}
order = ['', 'i_piu_visti', 'i_piu_votati', 'i_piu_votati_dellultimo_mese', 'titolo_az', 'voto_imdb_piu_alto'][config.getSetting('order', 'altadefinizionecommunity')]
@support.menu
def mainlist(item):
logger.debug(item)
film = ['/load-more-film?anno=&order=&support_webp=1&type=movie&page=1',
# Voce Menu,['url','action','args',contentType]
('Generi Film', ['', 'genres', 'genres']),
]
film = ['/type/movie',
('Generi', ['/type/movie', 'genres', 'genres']),
('Anni', ['/type/movie', 'genres', 'year']),]
tvshow = ['/load-more-film?type=tvshow&anno=&order=&support_webp=1&page=1',
# Voce Menu,['url','action','args',contentType]
('Generi Serie TV', ['', 'genres', 'genres']),
]
altri = [
# ('A-Z', ['/lista-film', 'genres', 'letters']),
('Qualità', ['', 'genres', 'quality']),
('Anni', ['/anno', 'genres', 'years'])
]
search = ''
tvshow = ['/serie-tv/tvshow',
('Generi', ['/serie-tv/tvshow', 'genres', 'genres']),
('Anni', ['/serie-tv/tvshow', 'genres', 'year'])]
return locals()
def login():
r = support.httptools.downloadpage(host, cloudscraper=True)
Token = support.match(r.data, patron=r'name=\s*"_token"\s*value=\s*"([^"]+)', cloudscraper=True).match
if 'id="logged"' in r.text:
logger.info('Già loggato')
else:
logger.info('Login in corso')
post = {'_token': '',
'form_action':'login',
'email': config.get_setting('username', channel='altadefinizionecommunity'),
'password':config.get_setting('password', channel='altadefinizionecommunity')}
r = support.httptools.downloadpage(host + '/login', post=post, headers={'referer': host}, cloudscraper=True)
if not r.status_code in [200, 302] or 'Email o Password non validi' in r.text:
platformtools.dialog_ok('AltadefinizioneCommunity', 'Username/password non validi')
return False
return 'id="logged"' in r.text
def registerOrLogin():
if config.get_setting('username', channel='altadefinizionecommunity') and config.get_setting('password', channel='altadefinizionecommunity'):
if login():
return True
action = platformtools.dialog_yesno('AltadefinizioneCommunity',
'Questo server necessita di un account, ne hai già uno oppure vuoi tentare una registrazione automatica?',
yeslabel='Accedi', nolabel='Tenta registrazione', customlabel='Annulla')
if action == 1: # accedi
from specials import setting
from core.item import Item
user_pre = config.get_setting('username', channel='altadefinizionecommunity')
password_pre = config.get_setting('password', channel='altadefinizionecommunity')
setting.channel_config(Item(config='altadefinizionecommunity'))
user_post = config.get_setting('username', channel='altadefinizionecommunity')
password_post = config.get_setting('password', channel='altadefinizionecommunity')
if user_pre != user_post or password_pre != password_post:
return registerOrLogin()
else:
return []
elif action == 0: # tenta registrazione
import random
import string
logger.debug('Registrazione automatica in corso')
mailbox = Gmailnator()
randPsw = ''.join(random.choice(string.ascii_letters + string.digits) for i in range(10))
logger.debug('email: ' + mailbox.address)
logger.debug('pass: ' + randPsw)
reg = platformtools.dialog_register(register_url, email=True, password=True, email_default=mailbox.address, password_default=randPsw)
if not reg:
return False
regPost = httptools.downloadpage(register_url, post={'email': reg['email'], 'password': reg['password']}, cloudscraper=True)
if regPost.url == register_url:
error = scrapertools.htmlclean(scrapertools.find_single_match(regPost.data, 'Impossibile proseguire.*?</div>'))
error = scrapertools.unescape(scrapertools.re.sub('\n\s+', ' ', error))
platformtools.dialog_ok('AltadefinizioneCommunity', error)
return False
if reg['email'] == mailbox.address:
if "L'indirizzo email risulta già registrato" in regPost.data:
# httptools.downloadpage(baseUrl + '/forgotPassword', post={'email': reg['email']})
platformtools.dialog_ok('AltadefinizioneCommunity', 'Indirizzo mail già utilizzato')
return False
mail = mailbox.waitForMail()
if mail:
checkUrl = scrapertools.find_single_match(mail.body, '<a href="([^"]+)[^>]+>Verifica').replace(r'\/', '/')
logger.debug('CheckURL: ' + checkUrl)
httptools.downloadpage(checkUrl, cloudscraper=True)
config.set_setting('username', mailbox.address, channel='altadefinizionecommunity')
config.set_setting('password', randPsw, channel='altadefinizionecommunity')
platformtools.dialog_ok('AltadefinizioneCommunity',
'Registrato automaticamente con queste credenziali:\nemail:' + mailbox.address + '\npass: ' + randPsw)
else:
platformtools.dialog_ok('AltadefinizioneCommunity', 'Impossibile registrarsi automaticamente')
return False
else:
platformtools.dialog_ok('AltadefinizioneCommunity', 'Hai modificato la mail quindi KoD non sarà in grado di effettuare la verifica in autonomia, apri la casella ' + reg['email']
+ ' e clicca sul link. Premi ok quando fatto')
logger.debug('Registrazione completata')
else:
return False
return True
@support.scrape
def peliculas(item):
json = {}
if item.contentType == 'undefined':
disabletmdb = True
action = 'check'
elif item.contentType == 'movie':
action = 'findvideos'
else:
action = 'episodios'
if '/load-more-film' not in item.url and '/search' not in item.url: # generi o altri menu, converto
import ast
ajax = support.match(item.url, patron='ajax_data\s*=\s*"?\s*([^;]+)', cloudscraper=True).match
item.url = host + '/load-more-film?' + support.urlencode(ast.literal_eval(ajax)) + '&page=1'
if not '/search' in item.url:
json = support.httptools.downloadpage(item.url, headers=headers, cloudscraper=True).json
data = "\n".join(json['data'])
else:
json = support.httptools.downloadpage(item.url, headers=headers, cloudscraper=True).json
data = "\n".join(json['data'])
patron = r'wrapFilm">\s*<a href="(?P<url>[^"]+)">\s*<span class="year">(?P<year>[0-9]{4})</span>\s*<span[^>]+>[^<]+</span>\s*<span class="qual">(?P<quality>[^<]+).*?<img src="(?P<thumbnail>[^"]+)[^>]+>\s*<h3>(?P<title>[^<[]+)(?:\[(?P<lang>[sSuUbBiItTaA-]+))?'
# paginazione
if json.get('have_next'):
def fullItemlistHook(itemlist):
spl = item.url.split('=')
url = '='.join(spl[:-1])
page = str(int(spl[-1])+1)
support.nextPage(itemlist, item, next_page='='.join((url, page)), function_or_level='peliculas')
return itemlist
return locals()
def search(item, texto):
logger.debug("search ", texto)
def search(item, text):
logger.debug("search ", text)
# per evitare fastidi da ricerca globale
if not item.globalsearch:
registerOrLogin()
item.args = 'search'
item.url = host + "/search?s={}&page=1".format(texto)
item.url = host + "/search?s={}&f={}".format(text.replace(' ', '+'), item.contentType)
try:
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
@@ -180,27 +61,89 @@ def search(item, texto):
@support.scrape
def genres(item):
registerOrLogin()
logger.debug(item)
data = support.httptools.downloadpage(item.url, cloudscraper=True).data
data = support.httptools.downloadpage(item.url).data
blacklist= ['Film', 'Serie TV']
patronMenu = r'<a href="(?P<url>[^"]+)">(?P<title>[^<]+)'
if item.args == 'quality':
item.contentType = 'undefined'
if item.args == 'genres':
categories ={}
res = support.match(host + '/cerca', patron=r'for="cat-(\d+)[^>]+>([^<]+)').matches
for _id, name in res:
categories[name] = _id
patronBlock = r'{}<span></span>(?P<block>.*?)</ul>\s*</li'.format('Film' if item.contentType == 'movie' else 'Serie TV')
patronMenu = r'<a href="[^"]+">(?P<title>[^<]+)'
def itemHook(it):
it.cat_id = categories[it.fulltitle]
return it
if item.args == 'year':
patronMenu = r'value="(?P<year_id>[^"]+)"[^>]*>(?P<title>\d+)'
patronBlock = r'Anno</option>(?P<block>.*?</select>)'
elif item.args == 'quality':
patronMenu = r'quality/(?P<quality_id>[^"]+)">(?P<title>[^<]+)'
patronBlock = r'Risoluzione(?P<block>.*?)</ul>'
elif item.args == 'years':
item.contentType = 'undefined'
patronBlock = r'ANNO(?P<block>.*?</section>)'
else:
patronBlock = ('Film' if item.contentType == 'movie' else 'Serie TV') + r'<span></span></a>\s+<ul class="dropdown-menu(?P<block>.*?)active-parent-menu'
action = 'peliculas'
action = 'movies'
return locals()
@support.scrape
def episodios(item):
def movies(item):
item.quality = 'HD'
json = {}
if not item.page: item.page = 1
params ={'type':item.contentType, 'anno':item.year_id, 'quality':item.quality_id, 'cat':item.cat_id, 'order':order, 'page':item.page}
# debug = True
action = 'findvideos' if item.contentType == 'movie' else 'episodes'
try:
# support.dbg()
if item.args in ['search']:
page = support.httptools.downloadpage(item.url, headers=headers)
if page.json:
data = "\n".join(page.json['data'])
else:
data = page.data
else:
params['page'] = item.page
url = '{}/load-more-film?{}'.format(host, support.urlencode(params))
json = support.httptools.downloadpage(url, headers=headers).json
data = "\n".join(json['data'])
except:
data = ' '
patron = r'wrapFilm"[^>]*>\s*<a href="(?P<url>[^"]+)">[^>]+>(?P<year>\d+)(?:[^>]+>){2}(?P<rating>[^<]+)(?:[^>]+>){4}\s*<img src="(?P<thumb>[^"]+)(?:[^>]+>){2,6}\s+<h3>(?P<title>[^<[]+)(?:\[(?P<lang>[sSuUbBiItTaA -]+))?'
# patron = r'wrapFilm">\s*<a href="(?P<url>[^"]+)">[^>]+>(?P<year>\d+)(?:[^>]+>){2}(?P<rating>[^<]+)(?:[^>]+>){4}\s*<img src="(?P<thumb>[^"]+)(?:[^>]+>){3}(?P<title>[^<[]+)(?:\[(?P<lang>[sSuUbBiItTaA-]+))?'
def itemHook(item):
item.quality = item.quality.replace('2K', 'HD').replace('4K', 'HD')
item.title = item.title.replace('2K', 'HD').replace('4K', 'HD')
return item
# paginazione
if json.get('have_next') or support.match(data, patron=r'have_next_film\s*=\s*true').match:
def fullItemlistHook(itemlist):
cat_id = support.match(data, patron=r''''cat':"(\d+)"''').match
if cat_id: item.cat_id = cat_id
item.page += 1
support.nextPage(itemlist, item, function_or_level='movies')
return itemlist
return locals()
@support.scrape
def episodes(item):
logger.debug(item)
# debug = True
data = item.data
patron = r'class="playtvshow " data-href="(?P<url>[^"]+)'
patron = r'class="playtvshow "\s+data-href="(?P<url>[^"]+)'
def itemHook(it):
spl = it.url.split('/')[-2:]
@@ -213,16 +156,6 @@ def episodios(item):
return locals()
def check(item):
resolve_url(item)
if '/tvshow' in item.url:
item.contentType = 'tvshow'
return episodios(item)
else:
item.contentType = 'movie'
return findvideos(item)
def findvideos(item):
itemlist = []
resolve_url(item)
@@ -234,19 +167,106 @@ def findvideos(item):
def play(item):
if host in item.url: # intercetto il server proprietario
if registerOrLogin():
return support.get_jwplayer_mediaurl(support.httptools.downloadpage(item.url, cloudscraper=True).data, 'Diretto')
else:
platformtools.play_canceled = True
return []
# if registerOrLogin():
return support.get_jwplayer_mediaUrl(support.httptools.downloadpage(item.url, cloudscraper=True).data, 'Diretto')
# else:
# platformtools.playCanceled = True
# return []
else:
return [item]
def resolve_url(item):
registerOrLogin()
if '/watch-unsubscribed' not in item.url and '/watch-external' not in item.url:
playWindow = support.match(support.httptools.downloadpage(item.url, cloudscraper=True).data, patron='playWindow" href="([^"]+)')
video_url = playWindow.match
videoUrl = playWindow.match
item.data = playWindow.data
item.url = video_url.replace('/watch-unsubscribed', '/watch-external')
return item
item.url = videoUrl.replace('/watch-unsubscribed', '/watch-external')
return item
def login():
r = support.httptools.downloadpage(host, cloudscraper=True)
Token = support.match(r.data, patron=r'name=\s*"_token"\s*value=\s*"([^"]+)', cloudscraper=True).match
if 'id="logged"' in r.data:
logger.info('Già loggato')
else:
logger.info('Login in corso')
post = {'_token': '',
'form_action':'login',
'email': config.getSetting('username', channel='altadefinizionecommunity'),
'password':config.getSetting('password', channel='altadefinizionecommunity')}
r = support.httptools.downloadpage(host + '/login', post=post, headers={'referer': host}, cloudscraper=True)
if r.code not in [200, 302] or 'Email o Password non validi' in r.data:
platformtools.dialogOk('AltadefinizioneCommunity', 'Username/password non validi')
return False
return 'id="logged"' in r.data
def registerOrLogin():
if config.getSetting('username', channel='altadefinizionecommunity') and config.getSetting('password', channel='altadefinizionecommunity'):
if login():
return True
action = platformtools.dialogYesNo('AltadefinizioneCommunity',
'Questo server necessita di un account, ne hai già uno oppure vuoi tentare una registrazione automatica?',
yeslabel='Accedi', nolabel='Tenta registrazione', customlabel='Annulla')
if action == 1: # accedi
from specials import setting
from core.item import Item
user_pre = config.getSetting('username', channel='altadefinizionecommunity')
password_pre = config.getSetting('password', channel='altadefinizionecommunity')
setting.channel_config(Item(config='altadefinizionecommunity'))
user_post = config.getSetting('username', channel='altadefinizionecommunity')
password_post = config.getSetting('password', channel='altadefinizionecommunity')
if user_pre != user_post or password_pre != password_post:
return registerOrLogin()
else:
return []
elif action == 0: # tenta registrazione
import random
import string
logger.debug('Registrazione automatica in corso')
mailbox = Gmailnator()
randPsw = ''.join(random.choice(string.ascii_letters + string.digits) for i in range(10))
logger.debug('email: ' + mailbox.address)
logger.debug('pass: ' + randPsw)
reg = platformtools.dialogRegister(register_url, email=True, password=True, email_default=mailbox.address, password_default=randPsw)
if not reg:
return False
regPost = httptools.downloadpage(register_url, post={'email': reg['email'], 'password': reg['password']}, cloudscraper=True)
if regPost.url == register_url:
error = scrapertools.htmlclean(scrapertools.find_single_match(regPost.data, 'Impossibile proseguire.*?</div>'))
error = scrapertools.unescape(scrapertools.re.sub('\n\s+', ' ', error))
platformtools.dialogOk('AltadefinizioneCommunity', error)
return False
if reg['email'] == mailbox.address:
if "L'indirizzo email risulta già registrato" in regPost.data:
# httptools.downloadpage(baseUrl + '/forgotPassword', post={'email': reg['email']})
platformtools.dialogOk('AltadefinizioneCommunity', 'Indirizzo mail già utilizzato')
return False
mail = mailbox.waitForMail()
if mail:
checkUrl = scrapertools.find_single_match(mail.body, '<a href="([^"]+)[^>]+>Verifica').replace(r'\/', '/')
logger.debug('CheckURL: ' + checkUrl)
httptools.downloadpage(checkUrl, cloudscraper=True)
config.setSetting('username', mailbox.address, channel='altadefinizionecommunity')
config.setSetting('password', randPsw, channel='altadefinizionecommunity')
platformtools.dialogOk('AltadefinizioneCommunity',
'Registrato automaticamente con queste credenziali:\nemail:' + mailbox.address + '\npass: ' + randPsw)
else:
platformtools.dialogOk('AltadefinizioneCommunity', 'Impossibile registrarsi automaticamente')
return False
else:
platformtools.dialogOk('AltadefinizioneCommunity', 'Hai modificato la mail quindi KoD non sarà in grado di effettuare la verifica in autonomia, apri la casella ' + reg['email']
+ ' e clicca sul link. Premi ok quando fatto')
logger.debug('Registrazione completata')
else:
return False
return True

View File

@@ -1,11 +1,11 @@
{
"id": "animealtadefinizione",
"name": "AnimealtAdefinizione",
"name": "AnimealtaDefinizione",
"active": true,
"language": ["ita", "sub-ita"],
"thumbnail": "animealtadefinizione.png",
"banner": "animealtadefinizione.png",
"categories": ["anime", "sub-ita"],
"categories": ["anime", "sub"],
"default_off": ["include_in_newest"],
"settings": [
{

View File

@@ -3,13 +3,15 @@
# Canale per animealtadefinizione
# ----------------------------------------------------------
from platformcode import platformtools
from core import support
from platformcode import logger
host = support.config.get_channel_url()
headers = [['Referer', host]]
perpage_list = ['20','30','40','50','60','70','80','90','100']
perpage = perpage_list[support.config.get_setting('perpage' , 'animealtadefinizione')]
perpage = perpage_list[support.config.getSetting('perpage' , 'animealtadefinizione')]
epPatron = r'<td>\s*(?P<title>[^<]+)[^>]+>[^>]+>\s*<a href="(?P<url>[^"]+)"'
@@ -19,49 +21,51 @@ def mainlist(item):
('Tipo',['', 'menu', 'Anime']),
('Anno',['', 'menu', 'Anno']),
('Genere', ['', 'menu','Genere']),
('Ultimi Episodi',['', 'peliculas', 'last'])]
('Ultimi Episodi',['', 'movies', 'last'])]
return locals()
@support.scrape
def menu(item):
action = 'peliculas'
action = 'movies'
patronBlock= r'<a href="' + host + r'/category/' + item.args.lower() + r'/">' + item.args + r'</a>\s*<ul class="sub-menu">(?P<block>.*?)</ul>'
patronMenu = r'<a href="(?P<url>[^"]+)">(?P<title>[^<]+)<'
if 'genere' in item.args.lower():
patronGenreMenu = patronMenu
return locals()
def search(item, texto):
support.info(texto)
item.search = texto
def search(item, text):
logger.debug(text)
item.search = text
try:
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.logger.error("%s" % line)
logger.error("%s" % line)
return []
def newest(categoria):
support.info(categoria)
def newest(category):
logger.debug(category)
item = support.Item()
try:
if categoria == "anime":
if category == "anime":
item.url = host
item.args = "last"
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.logger.error("{0}".format(line))
logger.error("{0}".format(line))
return []
@support.scrape
def peliculas(item):
def movies(item):
if '/movie/' in item.url:
item.contentType = 'movie'
action='findvideos'
@@ -70,17 +74,22 @@ def peliculas(item):
action='findvideos'
else:
item.contentType = 'tvshow'
action='episodios'
action='episodes'
if item.search:
query = 's'
searchtext = item.search
else:
query='category_name'
searchtext = item.url.split('/')[-2]
if not item.pag: item.pag = 1
# debug = True
anime = True
data = support.match(host + '/wp-admin/admin-ajax.php', post='action=itajax-sort&loop=main+loop&location=&thumbnail=1&rating=1sorter=recent&columns=4&numarticles='+perpage+'&paginated='+str(item.pag)+'&currentquery%5B'+query+'%5D='+searchtext).data.replace('\\','')
page = 1 if not item.page else item.page
numerationEnabled = True
post = 'action=itajax-sort&loop=main+loop&location=&thumbnail=1&rating=1sorter=recent&columns=4&numarticles={}&paginated={}&currentquery%5B{}%5D={}'.format(perpage, page, query, searchtext)
res = support.match(host + '/wp-admin/admin-ajax.php', post=post, patron=r'"pages":(\d+)')
data= res.data.replace('\\','')
# item.total_pages = int(res.match)
patron = r'<a href="(?P<url>[^"]+)"><img width="[^"]+" height="[^"]+" src="(?P<thumb>[^"]+)" class="[^"]+" alt="" title="(?P<title>[^"]+?)\s+(?P<type>Movie)?\s*(?P<lang>Sub Ita|Ita)?\s*[sS]treaming'
typeContentDict = {'movie':['movie']}
typeActionDict = {'findvideos':['movie']}
@@ -89,16 +98,15 @@ def peliculas(item):
if item.search:
itemlist = [ it for it in itemlist if ' Episodio ' not in it.title ]
if len(itemlist) == int(perpage):
item.pag += 1
itemlist.append(item.clone(title=support.typo(support.config.get_localized_string(30992), 'color kod bold'), action='peliculas'))
support.nextPage(itemlist, item, 'movies', page=page + 1, total_pages=int(res.match))
return itemlist
return locals()
@support.scrape
def episodios(item):
anime = True
pagination = int(perpage)
def episodes(item):
numerationEnabled = True
pagination = True
patron = epPatron
return locals()
@@ -108,10 +116,9 @@ def findvideos(item):
if item.contentType == 'movie':
matches = support.match(item, patron=epPatron).matches
for title, url in matches:
# support.dbg()
get_video_list(item, url, title, itemlist)
else:
get_video_list(item, item.url, support.config.get_localized_string(30137), itemlist)
get_video_list(item, item.url, support.config.getLocalizedString(30137), itemlist)
return support.server(item, itemlist=itemlist)

View File

@@ -3,7 +3,8 @@
# Canale per AnimeForce
# ------------------------------------------------------------
from core import support
from core import scrapertools, support
from platformcode import logger
host = support.config.get_channel_url()
headers = [['Referer', host]]
@@ -12,74 +13,76 @@ headers = [['Referer', host]]
@support.menu
def mainlist(item):
anime = ['/lista-anime/',
('In Corso',['/anime/anime-status/in-corso/', 'peliculas', 'status']),
('Completi',['/anime/anime-status/completo/', 'peliculas', 'status']),
('In Corso',['/anime/anime-status/in-corso/', 'movies', 'status']),
('Completi',['/anime/anime-status/completo/', 'movies', 'status']),
('Genere',['/anime', 'submenu', 'genre']),
('Anno',['/anime', 'submenu', 'anime-year']),
('Tipologia',['/anime', 'submenu', 'anime-type']),
('Stagione',['/anime', 'submenu', 'anime-season']),
('Ultime Serie',['/category/anime/articoli-principali/','peliculas','last'])
('Ultime Serie',['/category/anime/articoli-principali/','movies','last'])
]
return locals()
@support.scrape
def submenu(item):
action = 'peliculas'
action = 'movies'
patronBlock = r'data-taxonomy="' + item.args + r'"(?P<block>.*?)</select'
patronMenu = r'<option class="level-\d+ (?P<u>[^"]+)"[^>]+>(?P<t>[^(]+)[^\(]+\((?P<num>\d+)'
patronMenu = r'<option class="level-\d+ (?P<u>[^"]+)"[^>]+>(?P<title>[^(]+)[^\(]+\((?P<num>\d+)'
if 'genre' in item.args:
patronGenreMenu = patronMenu
def itemHook(item):
item.url += host + '/anime/' + item.args + '/' + item.u
item.title = support.typo(item.t, 'bold')
# item.title = support.typo(item.t, 'bold')
return item
return locals()
def newest(categoria):
support.info(categoria)
def newest(category):
logger.debug(category)
itemlist = []
item = support.Item()
try:
if categoria == "anime":
if category == "anime":
item.contentType = 'tvshow'
item.url = host
item.args = 'newest'
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.logger.error("{0}".format(line))
logger.error("{0}".format(line))
return []
return itemlist
def search(item, text):
support.info('search',text)
logger.debug(text)
item.search = text
item.url = host + '/lista-anime/'
item.contentType = 'tvshow'
try:
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.logger.error("%s" % line)
logger.error("%s" % line)
return []
@support.scrape
def peliculas(item):
def movies(item):
search = item.search
anime = True
numerationEnabled = True
if 'movie' in item.url:
action = 'findvideos'
else:
action = 'check'
if not item.args:
pagination = ''
pagination = True
patron = r'<a\s*href="(?P<url>[^"]+)"\s*title="(?P<title>[^"]+)">'
else:
patron = r'<a href="(?P<url>[^"]+)"[^>]+>\s*<img src="(?P<thumb>[^"]+)" alt="(?P<title>.*?)(?: Sub| sub| SUB|")'
@@ -88,7 +91,6 @@ def peliculas(item):
def itemHook(item):
if 'sub-ita' in item.url:
if item.args != 'newest': item.title = item.title + support.typo('Sub-ITA','_ [] color kod')
item.contentLanguage = 'Sub-ITA'
return item
@@ -102,29 +104,45 @@ def check(item):
item.contentType = 'movie'
return findvideos(item)
else:
return episodios(item)
return episodes(item)
def episodes(item):
@support.scrape
def _episodes(item):
actLike = 'episodes'
disableAll = True
data = item.data
if '<h6>Streaming</h6>' in data:
patron = r'<td style[^>]+>\s*.*?(?:<span[^>]+)?<strong>(?P<episode>[^<]+)<\/strong>.*?<td style[^>]+>\s*<a href="(?P<url>[^"]+)"[^>]+>'
else:
patron = r'<a\s*href="(?P<url>[^"]+)"[^>]+>(?P<episode>\d+)[<-](?P<episode2>\d+)?'
def itemHook(item):
if item.url.startswith('//'): item.url= 'https:' + item.url
elif item.url.startswith('/'): item.url= 'https:/' + item.url
return item
action = 'findvideos'
return locals()
itemlist = support.itemlistdb() if item.itemlist else []
groups = support.match(item.data, patron=[r'"tabpanel">.*?</div', r'Special-tab">.*?</div']).matches
for group in groups:
item.data = group
if 'Special' in group:
item.contentSeason = 0
itemlist.extend(_episodes(item))
from platformcode.autorenumber import start
start(itemlist, item)
itemlist = support.season_pagination(itemlist, item, function_level='episodes')
return itemlist
@support.scrape
def episodios(item):
anime = True
data = item.data
if '<h6>Streaming</h6>' in data:
patron = r'<td style[^>]+>\s*.*?(?:<span[^>]+)?<strong>(?P<title>[^<]+)<\/strong>.*?<td style[^>]+>\s*<a href="(?P<url>[^"]+)"[^>]+>'
else:
patron = r'<a\s*href="(?P<url>[^"]+)"\s*title="(?P<title>[^"]+)"\s*class="btn btn-dark mb-1">'
def itemHook(item):
support.info(item)
if item.url.startswith('//'): item.url= 'https:' + item.url
elif item.url.startswith('/'): item.url= 'https:/' + item.url
return item
action = 'findvideos'
return locals()
def findvideos(item):
support.info(item)
logger.debug()
itemlist = []
if 'adf.ly' in item.url:
@@ -150,6 +168,6 @@ def findvideos(item):
if url.startswith('//'): url = 'https:' + url
elif url.startswith('/'): url = 'https:/' + url
if 'vvvvid' in url: itemlist.append(item.clone(action="play", title='VVVVID', url=url, server='vvvvid'))
else: itemlist.append(item.clone(action="play", title=support.config.get_localized_string(30137), url=url, server='directo'))
else: itemlist.append(item.clone(action="play", title=support.config.getLocalizedString(30137), url=url, server='directo'))
return support.server(item, itemlist=itemlist)

View File

@@ -5,7 +5,7 @@
"language": ["ita", "sub-ita"],
"thumbnail": "animepertutti.png",
"bannermenu": "animepertutti.png",
"categories": ["anime", "vos"],
"not_active":["include_in_newest_peliculas", "include_in_newest_series", "include_in_newest_anime"],
"categories": ["anime", "sub"],
"not_active":["include_in_newest_movie", "include_in_newest_tvshow", "include_in_newest_anime"],
"settings": []
}

View File

@@ -4,6 +4,7 @@
# ------------------------------------------------------------
from core import support
from platformcode import logger
from lib.js2py.host import jsfunctions
host = support.config.get_channel_url()
@@ -19,29 +20,29 @@ headers = [['User-Agent', 'Mozilla/50.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/
def mainlist(item):
anime = [
# ('Leggendari', ['/category/anime-leggendari/', 'peliculas']),
('ITA', ['/category/anime-ita/', 'peliculas']),
('SUB-ITA', ['/category/anime-sub-ita/', 'peliculas']),
('Conclusi', ['/category/serie-anime-concluse/', 'peliculas']),
('in Corso', ['/category/serie-anime-in-corso/', 'peliculas']),
# ('Leggendari', ['/category/anime-leggendari/', 'movies']),
('ITA', ['/category/anime-ita/', 'movies']),
('SUB-ITA', ['/category/anime-sub-ita/', 'movies']),
('Conclusi', ['/category/serie-anime-concluse/', 'movies']),
('in Corso', ['/category/serie-anime-in-corso/', 'movies']),
('Genere', ['', 'genres'])
]
return locals()
def search(item, texto):
support.info(texto)
def search(item, text):
logger.debug(text)
item.url = host + "/?s=" + texto
item.url = host + "/?s=" + text
try:
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.logger.error("%s" % line)
logger.error("%s" % line)
return []
@@ -50,20 +51,20 @@ def genres(item):
blacklist = ['Contattaci','Privacy Policy', 'DMCA']
patronMenu = r'<a href="(?P<url>[^"]+)">(?P<title>[^<]+)<'
patronBlock = r'Generi</a>\s*<ul[^>]+>(?P<block>.*?)<\/ul>'
action = 'peliculas'
action = 'movies'
return locals()
@support.scrape
def peliculas(item):
anime = True
def movies(item):
numerationEnabled = True
blacklist = ['top 10 anime da vedere']
if item.url != host: patronBlock = r'<div id="main-content(?P<block>.*?)<aside'
patron = r'<figure class="(?:mh-carousel-thumb|mh-posts-grid-thumb)">\s*<a (?:class="[^"]+" )?href="(?P<url>[^"]+)" title="(?P<title>.*?)(?: \((?P<year>\d+)\))? (?:(?P<lang>SUB ITA|ITA))(?: (?P<title2>[Mm][Oo][Vv][Ii][Ee]))?[^"]*"><img (?:class="[^"]+"|width="[^"]+" height="[^"]+") src="(?P<thumb>[^"]+)"[^>]+'
def itemHook(item):
if 'movie' in item.title.lower():
item.title = support.re.sub(' - [Mm][Oo][Vv][Ii][Ee]|[Mm][Oo][Vv][Ii][Ee]','',item.title)
item.title += support.typo('Movie','_ () bold')
# item.title += support.typo('Movie','_ () bold')
item.contentType = 'movie'
item.action = 'findvideos'
return item
@@ -75,15 +76,15 @@ def peliculas(item):
return itlist
patronNext = r'<a class="next page-numbers" href="([^"]+)">'
action = 'episodios'
action = 'episodes'
return locals()
@support.scrape
def episodios(item):
def episodes(item):
data = support.match(item, headers=headers, patronBlock=r'entry-content clearfix">(.*?)class="mh-widget mh-posts-2 widget_text').block
if not 'pagination clearfix' in data:
support.info('NOT IN DATA')
logger.debug('NOT IN DATA')
patron = r'<iframe.*?src="(?P<url>[^"]+)"'
title = item.title
def fullItemlistHook(itemlist):
@@ -100,17 +101,17 @@ def episodios(item):
return itemlist
else:
url = item.url
anime = True
numerationEnabled = True
patronBlock = r'(?:<p style="text-align: left;">|<div class="pagination clearfix">\s*)(?P<block>.*?)</span></a></div>'
patron = r'(?:<a href="(?P<url>[^"]+)"[^>]+>)?<span class="pagelink">(?P<episode>\d+)'
def itemHook(item):
if not item.url:
item.url = url
if 'Movie Parte' in data:
item.title = support.typo(item.fulltitle + ' - Part ','bold') + item.title
item.title = item.fulltitle + ' - Part ' + item.title
item.contentType = 'movie'
else:
item.title = support.typo('Episodio ', 'bold') + item.title
item.title = 'Episodio ' + item.title
return item
return locals()
@@ -124,7 +125,7 @@ def check(item):
return data
def findvideos(item):
support.info()
logger.debug()
if item.data:
data = item.data
else:

View File

@@ -3,26 +3,23 @@
# Canale per AnimeSaturn
# ----------------------------------------------------------
from lib import js2py
from core import support
from platformcode import config
from platformcode import logger
host = support.config.get_channel_url()
__channel__ = 'animesaturn'
cookie = support.config.get_setting('cookie', __channel__)
cookie = support.config.getSetting('cookie', __channel__)
headers = {'X-Requested-With': 'XMLHttpRequest', 'Cookie': cookie}
def get_cookie(data):
global cookie, headers
cookie = support.match(data, patron=r'document.cookie="([^\s]+)').match
support.config.set_setting('cookie', cookie, __channel__)
support.config.setSetting('cookie', cookie, __channel__)
headers = [['Cookie', cookie]]
def get_data(item):
# support.dbg()
# url = support.match(item.url, headers=headers, follow_redirects=True, only_headers=True).url
data = support.match(item.url, headers=headers, follow_redirects=True).data
if 'ASCookie' in data:
get_cookie(data)
@@ -37,40 +34,40 @@ def mainlist(item):
('ITA',['', 'submenu', '/filter?language%5B0%5D=1']),
('SUB-ITA',['', 'submenu', '/filter?language%5B0%5D=0']),
('Più Votati',['/toplist','menu', 'top']),
('In Corso',['/animeincorso','peliculas','incorso']),
('Ultimi Episodi',['/fetch_pages.php?request=episodes&d=1','peliculas','updated'])]
('In Corso',['/animeincorso','movies','incorso']),
('Ultimi Episodi',['/fetch_pages.php?request=episodes&d=1','movies','updated'])]
return locals()
def search(item, texto):
support.info(texto)
item.url = host + '/animelist?search=' + texto
def search(item, text):
logger.debug(text)
item.url = host + '/animelist?search=' + text
item.contentType = 'tvshow'
try:
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.logger.error("%s" % line)
logger.error("%s" % line)
return []
def newest(categoria):
support.info()
def newest(category):
logger.debug(category)
itemlist = []
item = support.Item()
try:
if categoria == "anime":
if category == "anime":
item.url = host + '/fetch_pages.php?request=episodes&d=1'
item.args = "updated"
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.logger.error("{0}".format(line))
logger.error("{0}".format(line))
return []
return itemlist
@@ -82,7 +79,7 @@ def submenu(item):
action = 'filter'
patronMenu = r'<h5 class="[^"]+">(?P<title>[^<]+)[^>]+>[^>]+>\s*<select id="(?P<parameter>[^"]+)"[^>]+>(?P<data>.*?)</select>'
def itemlistHook(itemlist):
itemlist.insert(0, item.clone(title=support.typo('Tutti','bold'), url=item.url + item.args, action='peliculas'))
itemlist.insert(0, item.clone(title=support.typo('Tutti','bold'), url=item.url + item.args, action='movies'))
return itemlist[:-1]
return locals()
@@ -91,15 +88,15 @@ def filter(item):
itemlist = []
matches = support.match(item.data if item.data else item.url, patron=r'<option value="(?P<value>[^"]+)"[^>]*>(?P<title>[^<]+)').matches
for value, title in matches:
itemlist.append(item.clone(title= support.typo(title,'bold'), url='{}{}&{}%5B0%5D={}'.format(host, item.args, item.parameter, value), action='peliculas', args='filter'))
support.thumb(itemlist, genre=True)
itemlist.append(item.clone(title= support.typo(title,'bold'), url='{}{}&{}%5B0%5D={}'.format(host, item.args, item.parameter, value), action='movies', args='filter'))
support.thumb(itemlist, mode='genre')
return itemlist
@support.scrape
def menu(item):
patronMenu = r'<div class="col-md-13 bg-dark-as-box-shadow p-2 text-white text-center">(?P<title>[^"<]+)<(?P<other>.*?)(?:"lista-top"|"clearfix")'
action = 'peliculas'
action = 'movies'
item.args = 'top'
def itemHook(item2):
item2.url = item.url
@@ -109,8 +106,8 @@ def menu(item):
@support.scrape
def peliculas(item):
anime = True
def movies(item):
numerationEnabled = True
deflang= 'Sub-ITA'
action = 'check'
@@ -132,7 +129,7 @@ def peliculas(item):
action = 'findvideos'
def itemlistHook(itemlist):
if page:
itemlist.append(item.clone(title=support.typo(support.config.get_localized_string(30992), 'color kod bold'),page= page, thumbnail=support.thumb()))
itemlist.append(item.clone(title=support.typo(support.config.getLocalizedString(30992), 'color kod bold'),page= page, thumbnail=support.thumb()))
return itemlist
elif 'filter' in item.args:
page = support.match(data, patron=r'totalPages:\s*(\d+)').match
@@ -141,11 +138,11 @@ def peliculas(item):
if item.nextpage: item.nextpage += 1
else: item.nextpage = 2
if page and item.nextpage < int(page):
itemlist.append(item.clone(title=support.typo(support.config.get_localized_string(30992), 'color kod bold'), url= '{}&page={}'.format(item.url, item.nextpage), infoLabels={}, thumbnail=support.thumb()))
itemlist.append(item.clone(title=support.typo(support.config.getLocalizedString(30992), 'color kod bold'), url= '{}&page={}'.format(item.url, item.nextpage), infoLabels={}, thumbnail=support.thumb()))
return itemlist
else:
pagination = ''
pagination = True
if item.args == 'incorso':
patron = r'<a href="(?P<url>[^"]+)"[^>]+>(?P<title>[^<(]+)(?:\s*\((?P<year>\d+)\))?(?:\s*\((?P<lang>[A-za-z-]+)\))?</a>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>\s*<img width="[^"]+" height="[^"]+" src="(?P<thumb>[^"]+)"[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>(?P<plot>[^<]+)<'
else:
@@ -158,72 +155,41 @@ def peliculas(item):
def check(item):
movie = support.match(item, patron=r'Episodi:</b> (\d*) Movie')
if movie.match:
episodes = episodios(item)
episodes = episodes(item)
if len(episodes) > 0:
it = episodes[0].clone(contentType = 'movie', contentTitle=item.fulltitle, contentSerieName='')
return findvideos(it)
else:
item.contentType = 'tvshow'
return episodios(item)
return episodes(item)
@support.scrape
def episodios(item):
if item.contentType != 'movie': anime = True
def episodes(item):
if item.contentType != 'movie': numerationEnabled = True
patron = r'episodi-link-button">\s*<a href="(?P<url>[^"]+)"[^>]+>\s*(?P<title>[^<]+)</a>'
return locals()
def findvideos(item):
support.info()
logger.debug()
itemlist = []
links = []
# page_data = ''
# titles =['Primario', 'Secondario', 'Alternativo Primario', 'Alternativo Secondario']
# pre_data = support.match(item, headers=headers).data
# url = support.match(pre_data , patron=r'<a href="([^"]+)">[^>]+>[^>]+>G').match
# urls = [url, url+'&extra=1', url+'&s=alt', url+'&s=alt&extra=1']
# links = []
# support.dbg()
# for i, url in enumerate(urls):
# data = support.match(url, headers=headers).data
# if not '&s' in url:
# link = support.match(data, patron=r'(?:<source type="[^"]+"\s*src=|file:\s*)"([^"]+)"', headers=headers).match
# else:
# link = support.match(data, headers=headers, patron=r'file:\s*"([^"]+)"').match
# if not link:
# page_data += data
# if link and link not in links:
# links.append(link)
# # link += '|Referer=' + item.url
# itemlist.append(item.clone(action="play", title=titles[i], url=link, server='directo'))
# return support.server(item, data=data, itemlist=itemlist)
main_url = support.match(item, patron=r'<a href="([^"]+)">[^>]+>[^>]+>G').match
# internal = support.match(data, patron=r'<a href="([^"]+)">[^>]+>[^>]+>G').match
urls = support.match(support.match(main_url, headers=headers).data, patron=r'<a class="dropdown-item"\s*href="([^"]+)', headers=headers).matches
itemlist.append(item.clone(action="play", title='Primario', url=main_url, server='directo'))
itemlist.append(item.clone(action="play", title='Secondario', url=main_url + '&s=alt', server='directo'))
# support.dbg()
# for i, url in enumerate(internal_urls):
# internal_data = support.match(url, headers=headers).data
# if not '&s' in url:
# link = support.match(internal_data, patron=r'(?:<source type="[^"]+"\s*src=|file:\s*)"([^"]+)"', headers=headers).match
# else:
# link = support.match(internal_data, headers=headers, patron=r'file:\s*"([^"]+)"').match
# if not link:
# links.append(internal_data)
# if link and link not in links:
# links.append(link)
# itemlist.append(item.clone(action="play", title=internal_titles[i], url=link, server='directo'))
# link = support.match(external[0], patron=r'href="([^"]+)', headers=headers, debug=True).match
# support.dbg()
for url in urls:
link = support.match(url, patron=r'<a href="([^"]+)"[^>]+><button', headers=headers).match
if link:
links.append(link)
return support.server(item, data=links, itemlist=itemlist)
def play(item):
if item.server == 'directo':
item.url = support.match(item.url, patron=r'(?:source type="[^"]+"\s*src=|file:[^"]+)"([^"]+)').match
return[item]

View File

@@ -1,286 +1,244 @@
# -*- coding: utf-8 -*-
# ------------------------------------------------------------
# Canale per AnimeUnity
# ------------------------------------------------------------
import cloudscraper, json, copy, inspect
from core import jsontools, support, httptools, filetools
from platformcode import autorenumber, logger
import re
import xbmc
session = cloudscraper.create_scraper()
host = support.config.get_channel_url()
response = session.get(host + '/archivio')
csrf_token = support.match(response.text, patron='name="csrf-token" content="([^"]+)"').match
headers = {'content-type': 'application/json;charset=UTF-8',
'x-csrf-token': csrf_token,
'Cookie' : '; '.join([x.name + '=' + x.value for x in response.cookies])}
@support.menu
def mainlist(item):
top = [('Ultimi Episodi', ['', 'news'])]
menu = [('Anime {bullet bold}',['', 'menu', {}, 'tvshow']),
('Film {submenu}',['', 'menu', {'type': 'Movie'}]),
('TV {submenu}',['', 'menu', {'type': 'TV'}, 'tvshow']),
('OVA {submenu} {tv}',['', 'menu', {'type': 'OVA'}, 'tvshow']),
('ONA {submenu} {tv}',['', 'menu', {'type': 'ONA'}, 'tvshow']),
('Special {submenu} {tv}',['', 'menu', {'type': 'Special'}, 'tvshow'])]
search =''
return locals()
def menu(item):
item.action = 'peliculas'
ITA = copy.copy(item.args)
ITA['title'] = '(ita)'
InCorso = copy.copy(item.args)
InCorso['status'] = 'In Corso'
Terminato = copy.copy(item.args)
Terminato['status'] = 'Terminato'
itemlist = [item.clone(title=support.typo('Tutti','bold')),
item.clone(title=support.typo('ITA','bold'), args=ITA),
item.clone(title=support.typo('Genere','bold'), action='genres'),
item.clone(title=support.typo('Anno','bold'), action='years')]
if item.contentType == 'tvshow':
itemlist += [item.clone(title=support.typo('In Corso','bold'), args=InCorso),
item.clone(title=support.typo('Terminato','bold'), args=Terminato)]
itemlist +=[item.clone(title=support.typo('Cerca...','bold'), action='search', thumbnail=support.thumb('search'))]
return itemlist
def genres(item):
support.info()
# support.dbg()
itemlist = []
genres = json.loads(support.match(response.text, patron='genres="([^"]+)').match.replace('&quot;','"'))
for genre in genres:
item.args['genres'] = [genre]
itemlist.append(item.clone(title=support.typo(genre['name'],'bold'), action='peliculas'))
return support.thumb(itemlist)
def years(item):
support.info()
itemlist = []
from datetime import datetime
current_year = datetime.today().year
oldest_year = int(support.match(response.text, patron='anime_oldest_date="([^"]+)').match)
for year in list(reversed(range(oldest_year, current_year + 1))):
item.args['year']=year
itemlist.append(item.clone(title=support.typo(year,'bold'), action='peliculas'))
return itemlist
def search(item, text):
support.info('search', item)
if not item.args:
item.args = {'title':text}
else:
item.args['title'] = text
item.search = text
try:
return peliculas(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.info('search log:', line)
return []
def newest(categoria):
support.info(categoria)
itemlist = []
item = support.Item()
item.url = host
try:
itemlist = news(item)
if itemlist[-1].action == 'news':
itemlist.pop()
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.info(line)
return []
return itemlist
def news(item):
support.info()
item.contentType = 'episode'
itemlist = []
import cloudscraper
session = cloudscraper.create_scraper()
fullJs = json.loads(support.match(session.get(item.url).text, headers=headers, patron=r'items-json="([^"]+)"').match.replace('&quot;','"'))
js = fullJs['data']
for it in js:
itemlist.append(
item.clone(title= support.typo(it['anime']['title'] + ' - EP. ' + it['number'], 'bold'),
fulltitle=it['anime']['title'],
thumbnail=it['anime']['imageurl'],
forcethumb = True,
video_url=it['scws_id'],
plot=it['anime']['plot'],
action='findvideos')
)
if 'next_page_url' in fullJs:
itemlist.append(item.clone(title=support.typo(support.config.get_localized_string(30992), 'color kod bold'),thumbnail=support.thumb(), url=fullJs['next_page_url']))
return itemlist
def peliculas(item):
support.info()
itemlist = []
page = item.page if item.page else 0
item.args['offset'] = page * 30
order = support.config.get_setting('order', item.channel)
if order:
order_list = [ "Standard", "Lista A-Z", "Lista Z-A", "Popolarità", "Valutazione" ]
item.args['order'] = order_list[order]
payload = json.dumps(item.args)
records = session.post(host + '/archivio/get-animes', headers=headers, data=payload).json()['records']
for it in records:
logger.debug(jsontools.dump(it))
lang = support.match(it['title'], patron=r'\(([It][Tt][Aa])\)').match
title = support.re.sub(r'\s*\([^\)]+\)', '', it['title'])
if 'ita' in lang.lower(): language = 'ITA'
else: language = 'Sub-ITA'
itm = item.clone(title=support.typo(title,'bold') + support.typo(language,'_ [] color kod') + (support.typo(it['title_eng'],'_ ()') if it['title_eng'] else ''))
itm.contentLanguage = language
itm.type = it['type']
itm.thumbnail = it['imageurl']
itm.plot = it['plot']
itm.url = item.url
if it['episodes_count'] == 1:
itm.contentType = 'movie'
itm.fulltitle = itm.show = itm.contentTitle = title
itm.contentSerieName = ''
itm.action = 'findvideos'
itm.video_url = it['episodes'][0]['scws_id']
else:
itm.contentType = 'tvshow'
itm.contentTitle = ''
itm.fulltitle = itm.show = itm.contentSerieName = title
itm.action = 'episodios'
itm.episodes = it['episodes'] if 'episodes' in it else it['scws_id']
itm.video_url = item.url
itemlist.append(itm)
autorenumber.start(itemlist)
if len(itemlist) >= 30:
itemlist.append(item.clone(title=support.typo(support.config.get_localized_string(30992), 'color kod bold'), thumbnail=support.thumb(), page=page + 1))
return itemlist
def episodios(item):
support.info()
itemlist = []
title = 'Parte ' if item.type.lower() == 'movie' else 'Episodio '
for it in item.episodes:
itemlist.append(
item.clone(title=support.typo(title + it['number'], 'bold'),
episode = it['number'],
fulltitle=item.title,
show=item.title,
contentTitle='',
contentSerieName=item.contentSerieName,
thumbnail=item.thumbnail,
plot=item.plot,
action='findvideos',
contentType='episode',
video_url=it['scws_id']))
if inspect.stack()[1][3] not in ['find_episodes']:
autorenumber.start(itemlist, item)
support.videolibrary(itemlist, item)
support.download(itemlist, item)
return itemlist
def findvideos(item):
# def calculateToken():
# from time import time
# from base64 import b64encode as b64
# import hashlib
# o = 48
# n = support.match('https://au-1.scws-content.net/get-ip').data
# i = 'Yc8U6r8KjAKAepEA'
# t = int(time() + (3600 * o))
# l = '{}{} {}'.format(t, n, i)
# md5 = hashlib.md5(l.encode())
# s = '?token={}&expires={}'.format(b64(md5.digest()).decode().replace('=', '').replace('+', "-").replace('\\', "_"), t)
# return s
# token = calculateToken()
# url = 'https://streamingcommunityws.com/master/{}{}'.format(item.video_url, token)
# # support.dbg()
# m3u8_original = httptools.downloadpage(url, CF=False).data
# m_video = re.search(r'\.\/video\/(\d+p)\/playlist.m3u8', m3u8_original)
# video_res = m_video.group(1)
# m_audio = re.search(r'\.\/audio\/(\d+k)\/playlist.m3u8', m3u8_original)
# audio_res = m_audio.group(1)
# # https://streamingcommunityws.com/master/5957?type=video&rendition=480p&token=wQLowWskEnbLfOfXXWWPGA&expires=1623437317
# video_url = 'https://streamingcommunityws.com/master/{}{}&type=video&rendition={}'.format(item.video_url, token, video_res)
# audio_url = 'https://streamingcommunityws.com/master/{}{}&type=audio&rendition={}'.format(item.video_url, token, audio_res)
# m3u8_original = m3u8_original.replace( m_video.group(0), video_url )
# m3u8_original = m3u8_original.replace( m_audio.group(0), audio_url )
# file_path = 'special://temp/animeunity.m3u8'
# filetools.write(xbmc.translatePath(file_path), m3u8_original, 'w')
# return support.server(item, itemlist=[item.clone(title=support.config.get_localized_string(30137), url=file_path, manifest = 'hls', server='directo', action='play')])
# item.url=item.video_url
directLink = False
if item.video_url == None:
if item.extra == "tvshow":
epnum = item.episode
logger.info('it is a episode', epnum)
episode = None
for ep in item.episodes:
if ep["number"] == epnum:
episode = ep
break
if episode == None:
logger.warn('cannot found episode')
else:
item.url = episode["link"]
directLink = True
if directLink:
logger.info('try direct link')
return support.server(item, itemlist=[item.clone(title=support.config.get_localized_string(30137), url=item.url, server='directo', action='play')])
else:
return support.server(item, itemlist=[item.clone(title="StreamingCommunityWS", url=str(item.video_url), manifest = 'hls', server='streamingcommunityws', action='play')])
# -*- coding: utf-8 -*-
# ------------------------------------------------------------
# Canale per AnimeUnity
# ------------------------------------------------------------
import cloudscraper, json, copy, inspect
from core import jsontools, support, config
from core.httptools import downloadpage
from platformcode import autorenumber, logger
session = cloudscraper.create_scraper()
host = support.config.get_channel_url()
response = session.get(host + '/archivio')
csrf_token = support.match(response.text, patron='name="csrf-token" content="([^"]+)"').match
headers = {'content-type': 'application/json;charset=UTF-8',
'Referer': host,
'x-csrf-token': csrf_token,
'Cookie' : '; '.join([x.name + '=' + x.value for x in response.cookies])}
@support.menu
def mainlist(item):
top = [('Ultimi Episodi', ['', 'news'])]
menu = [('Anime {bullet bold}',['', 'menu', {}, 'tvshow']),
('Film {submenu}',['', 'menu', {'type': 'Movie'}]),
('TV {submenu}',['', 'menu', {'type': 'TV'}, 'tvshow']),
('OVA {submenu} {tv}',['', 'menu', {'type': 'OVA'}, 'tvshow']),
('ONA {submenu} {tv}',['', 'menu', {'type': 'ONA'}, 'tvshow']),
('Special {submenu} {tv}',['', 'menu', {'type': 'Special'}, 'tvshow'])]
search =''
return locals()
def menu(item):
item.action = 'movies'
ITA = copy.copy(item.args)
ITA['title'] = '(ita)'
InCorso = copy.copy(item.args)
InCorso['status'] = 'In Corso'
Terminato = copy.copy(item.args)
Terminato['status'] = 'Terminato'
itemlist = [item.clone(title=support.typo('Tutti','bold')),
item.clone(title='ITA', args=ITA),
item.clone(title='Genere', action='genres'),
item.clone(title='Anno', action='years')]
if item.contentType == 'tvshow':
itemlist += [item.clone(title='In Corso', args=InCorso),
item.clone(title='Terminato', args=Terminato)]
itemlist +=[item.clone(title=support.typo(config.getLocalizedString(70741).replace(' %s', ''),'bold'), action='search', thumbnail=support.thumb('search'))]
return itemlist
def genres(item):
logger.debug()
itemlist = []
genres = json.loads(support.match(response.text, patron='genres="([^"]+)').match.replace('&quot;','"'))
for genre in genres:
item.args['genres'] = [genre]
itemlist.append(item.clone(title=genre['name'], action='movies'))
return support.thumb(itemlist)
def years(item):
logger.debug()
itemlist = []
from datetime import datetime
current_year = datetime.today().year
oldest_year = int(support.match(response.text, patron='anime_oldest_date="([^"]+)').match)
for year in list(reversed(range(oldest_year, current_year + 1))):
item.args['year']=year
itemlist.append(item.clone(title=year, action='movies'))
return itemlist
def search(item, text):
logger.debug(text)
if not item.args:
item.args = {'title':text}
else:
item.args['title'] = text
item.search = text
try:
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.debug('search log:', line)
return []
def newest(category):
logger.debug(category)
itemlist = []
item = support.Item()
item.url = host
try:
itemlist = news(item)
if itemlist[-1].action == 'news':
itemlist.pop()
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.debug(line)
return []
return itemlist
def news(item):
logger.debug()
item.contentType = 'episode'
itemlist = []
import cloudscraper
session = cloudscraper.create_scraper()
fullJs = json.loads(support.match(session.get(item.url).text, headers=headers, patron=r'items-json="([^"]+)"').match.replace('&quot;','"'))
# logger.debug(jsontools.dump(fullJs))
js = fullJs['data']
for it in js:
itemlist.append(
item.clone(title=it['anime']['title'],
contentTitle = it['anime']['title'],
contentEpisodeNumber = int(it['number']),
fulltitle=it['anime']['title'],
thumbnail=it['anime']['imageurl'],
forcethumb = True,
videoUrl=it['scws_id'],
plot=it['anime']['plot'],
action='findvideos')
)
if fullJs.get('next_page_url'):
support.nextPage(itemlist, item, 'news', next_page=fullJs['next_page_url'], total_pages=int(fullJs['last_page_url'].split('=')[-1]))
return itemlist
def movies(item):
logger.debug()
itemlist = []
page = item.page if item.page else 0
item.args['offset'] = page * 30
order = support.config.getSetting('order', item.channel)
if order:
order_list = [ "Standard", "Lista A-Z", "Lista Z-A", "Popolarità", "Valutazione" ]
item.args['order'] = order_list[order]
payload = json.dumps(item.args)
js = session.post(host + '/archivio/get-animes', headers=headers, data=payload).json()
records = js['records']
total_pages = int(js['tot'] / 30)
for it in records:
logger.debug(jsontools.dump(it))
lang = support.match(it['title'], patron=r'\(([It][Tt][Aa])\)').match
title = support.re.sub(r'\s*\([^\)]+\)', '', it['title'])
if 'ita' in lang.lower(): language = 'ITA'
else: language = 'Sub-ITA'
itm = item.clone(title=title,
contentLanguage = language,
type = it['type'],
thumbnail = it['imageurl'],
plot = it['plot'],
url = '{}/{}-{}'.format(item.url, it['id'], it['slug'])
)
# itm.contentLanguage = language
# itm.type = it['type']
# itm.thumbnail = it['imageurl']
# itm.plot = it['plot']
# itm.url = item.url
if it['episodes_count'] == 1:
itm.contentType = 'movie'
itm.fulltitle = itm.show = itm.contentTitle = title
itm.contentSerieName = ''
itm.action = 'play'
item.forcethumb=True
itm.videoUrl = it['episodes'][0]['scws_id']
else:
itm.contentType = 'tvshow'
itm.contentTitle = ''
itm.fulltitle = itm.show = itm.contentSerieName = title
itm.action = 'episodes'
itm.episodes = it['episodes'] if 'episodes' in it else it['scws_id']
# itm.videoUrl = item.url
itemlist.append(itm)
autorenumber.start(itemlist)
if len(itemlist) == 30:
support.nextPage(itemlist, item, 'movies', page=page + 1, total_pages=total_pages)
return itemlist
def episodes(item):
logger.debug()
itemlist = []
# title = 'Parte ' if item.type.lower() == 'movie' else 'Episodio '
for it in item.episodes:
episode2 = it['number'].split('.')[-1]
episode = it['number'].split('.')[0]
itemlist.append(
item.clone(episodes = [],
contentEpisodeNumber=int(float(it['number'])),
episodeExtra = '.' + it['number'].split('.')[-1] if '.' in it['number'] else '',
action='play',
contentType='episode',
forcethumb=True,
videoUrl=it['scws_id']))
if inspect.stack()[1][3] not in ['find_episodes']:
autorenumber.start(itemlist, item)
support.videolibrary(itemlist, item)
support.download(itemlist, item)
return itemlist
def play(item):
from time import time
from base64 import b64encode
from hashlib import md5
# Calculate Token
client_ip = support.httptools.downloadpage('https://scws.xyz/videos/{}'.format(item.videoUrl), headers=headers).json.get('client_ip')
expires = int(time() + 172800)
token = b64encode(md5('{}{} Yc8U6r8KjAKAepEA'.format(expires, client_ip).encode('utf-8')).digest()).decode('utf-8').replace('=', '').replace('+', '-').replace('/', '_')
url = 'https://scws.xyz/master/{}?token={}&expires={}&n=1'.format(item.videoUrl, token, expires)
return [item.clone(server='directo', url=url, manifest='hls')]

View File

@@ -5,7 +5,7 @@
"language": ["ita", "sub-ita"],
"thumbnail": "animeuniverse.png",
"banner": "animeuniverse.png",
"categories": ["anime", "sub-ita"],
"categories": ["anime", "sub"],
"default_off": ["include_in_newest"],
"settings": [
{

View File

@@ -4,13 +4,14 @@
# ----------------------------------------------------------
from core import support
from platformcode import logger
host = support.config.get_channel_url()
headers = {}
perpage_list = ['20','30','40','50','60','70','80','90','100']
perpage = perpage_list[support.config.get_setting('perpage' , 'animeuniverse')]
epPatron = r'<td>\s*(?P<title>[^<]+)[^>]+>[^>]+>\s*<a href="(?P<url>[^"]+)"'
perpage = perpage_list[support.config.getSetting('perpage' , 'animeuniverse')]
epPatron = r'<td>\s*(?P<title>[^ <]+)\s*(?P<episode>\d+)?[^>]+>[^>]+>\s*<a href="(?P<url>[^"]+)"'
@support.menu
@@ -19,50 +20,52 @@ def mainlist(item):
('Tipo',['', 'menu', 'Anime']),
('Anno',['', 'menu', 'Anno']),
('Genere', ['', 'menu','Genere']),
('Ultimi Episodi',['/2/', 'peliculas', 'last']),
('Hentai', ['/hentai/', 'peliculas'])]
('Ultimi Episodi',['/2/', 'movies', 'last']),
('Hentai', ['/hentai/', 'movies'])]
return locals()
@support.scrape
def menu(item):
action = 'peliculas'
action = 'movies'
patronBlock = item.args + r'</a>\s*<ul class="sub-menu">(?P<block>.*?)</ul>'
patronMenu = r'<a href="(?P<url>[^"]+)">(?P<title>[^<]+)<'
if 'genere' in item.args.lower():
patronGenreMenu = patronMenu
return locals()
def search(item, texto):
support.info(texto)
item.search = texto
def search(item, text):
logger.debug(text)
item.search = text
try:
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.logger.error("%s" % line)
logger.error("%s" % line)
return []
def newest(categoria):
support.info(categoria)
def newest(category):
logger.debug(category)
item = support.Item()
try:
if categoria == "anime":
if category == "anime":
item.url = host
item.args = "last"
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.logger.error("{0}".format(line))
logger.error("{0}".format(line))
return []
@support.scrape
def peliculas(item):
def movies(item):
query = ''
if '/mos/' in item.url:
item.contentType = 'movie'
@@ -74,7 +77,7 @@ def peliculas(item):
action='findvideos'
else:
item.contentType = 'tvshow'
action='episodios'
action='episodes'
if item.search:
query = 's'
searchtext = item.search
@@ -83,7 +86,7 @@ def peliculas(item):
searchtext = item.url.split('/')[-2] if item.url != host else ''
if not item.pag: item.pag = 1
anime=True
numerationEnabled = False
# blacklist=['Altri Hentai']
data = support.match(host + '/wp-content/themes/animeuniverse/functions/ajax.php', post='sorter=recent&location=&loop=main+loop&action=sort&numarticles='+perpage+'&paginated='+str(item.pag)+'&currentquery%5B'+query+'%5D='+searchtext+'&thumbnail=1').data.replace('\\','')
patron=r'<a href="(?P<url>[^"]+)"><img width="[^"]+" height="[^"]+" src="(?P<thumb>[^"]+)" class="[^"]+" alt="" title="(?P<title>.*?)\s*(?P<lang>Sub ITA|ITA)?(?:"| \[)'
@@ -91,7 +94,7 @@ def peliculas(item):
def itemlistHook(itemlist):
if len(itemlist) == int(perpage):
item.pag += 1
itemlist.append(item.clone(title=support.typo(support.config.get_localized_string(30992), 'color kod bold'), action='peliculas'))
itemlist.append(item.clone(title=support.typo(support.config.getLocalizedString(30992), 'color kod bold'), action='movies'))
return itemlist
return locals()
@@ -99,9 +102,9 @@ def peliculas(item):
@support.scrape
def episodios(item):
anime = True
pagination = int(perpage)
def episodes(item):
numerationEnabled = True
pagination = True
patron = epPatron
return locals()
@@ -113,7 +116,7 @@ def findvideos(item):
for title, url in matches:
get_video_list(url, title, itemlist)
else:
get_video_list(item.url, support.config.get_localized_string(30137), itemlist)
get_video_list(item.url, support.config.getLocalizedString(30137), itemlist)
return support.server(item, itemlist=itemlist)

View File

@@ -5,7 +5,7 @@
"language": ["ita", "sub-ita"],
"thumbnail": "animeworld.png",
"banner": "animeworld.png",
"categories": ["anime", "vos"],
"categories": ["anime", "sub"],
"settings": [
{
"id": "order",

View File

@@ -5,33 +5,35 @@
# ----------------------------------------------------------
from core import httptools, support, jsontools
from platformcode import logger
host = support.config.get_channel_url()
__channel__ = 'animeworld'
cookie = support.config.get_setting('cookie', __channel__)
cookie = support.config.getSetting('cookie', __channel__)
headers = [['Cookie', cookie]]
def get_cookie(data):
global cookie, headers
cookie = support.match(data, patron=r'document.cookie="([^\s]+)').match
support.config.set_setting('cookie', cookie, __channel__)
support.config.setSetting('cookie', cookie, __channel__)
headers = [['Cookie', cookie]]
def get_data(item):
# support.dbg()
url = httptools.downloadpage(item.url, headers=headers, follow_redirects=True, only_headers=True).url
data = support.match(url, headers=headers, follow_redirects=True).data
if 'AWCookieVerify' in data:
get_cookie(data)
data = get_data(item)
data = ''
if item.url:
url = httptools.downloadpage(item.url, headers=headers, follow_redirects=True, only_headers=True).url
data = support.match(url, headers=headers, follow_redirects=True).data
if 'AWCookieVerify' in data:
get_cookie(data)
data = get_data(item)
return data
def order():
# Seleziona l'ordinamento dei risultati
return str(support.config.get_setting("order", __channel__))
return str(support.config.getSetting("order", __channel__))
@support.menu
@@ -39,19 +41,19 @@ def mainlist(item):
anime=['/filter?sort=',
('ITA',['/filter?dub=1&sort=', 'menu', '1']),
('SUB-ITA',['/filter?dub=0&sort=', 'menu', '0']),
('In Corso', ['/ongoing', 'peliculas','noorder']),
('Ultimi Episodi', ['/updated', 'peliculas', 'updated']),
('Nuove Aggiunte',['/newest', 'peliculas','noorder' ]),
('In Corso', ['/ongoing', 'movies','noorder']),
('Ultimi Episodi', ['/updated', 'movies', 'updated']),
('Nuove Aggiunte',['/newest', 'movies','noorder' ]),
('Generi',['/?d=1','genres',])]
return locals()
@support.scrape
def genres(item):
action = 'peliculas'
action = 'movies'
data = get_data(item)
patronBlock = r'dropdown[^>]*>\s*Generi\s*<span.[^>]+>(?P<block>.*?)</ul>'
patronMenu = r'<input.*?name="(?P<name>[^"]+)" value="(?P<value>[^"]+)"\s*>[^>]+>(?P<title>[^<]+)</label>'
patronGenreMenu = r'<input.*?name="(?P<name>[^"]+)" value="(?P<value>[^"]+)"\s*>[^>]+>(?P<title>[^<]+)</label>'
def itemHook(item):
item.url = host + '/filter?' + item.name + '=' + item.value + '&sort='
@@ -63,17 +65,20 @@ def genres(item):
def menu(item):
action = 'submenu'
data = get_data(item)
patronMenu=r'<button[^>]+>\s*(?P<title>[A-Za-z0-9]+)\s*<span.[^>]+>(?P<other>.*?)</ul>'
patronMenu = r'<button[^>]+>\s*(?P<title>[A-Za-z0-9]+)\s*<span.[^>]+>(?P<other>.*?)</ul>'
genre = False
def itemlistHook(itemlist):
itemlist.insert(0, item.clone(title=support.typo('Tutti','bold'), action='peliculas'))
itemlist.append(item.clone(title=support.typo('Cerca...','bold'), action='search', search=True, thumbnail=support.thumb('search.png')))
for item in itemlist:
item.title += ' {anime}'
itemlist.insert(0, item.clone(title=support.typo('Tutti {anime}','bold'), action='movies'))
itemlist.append(item.clone(title=support.typo('Cerca... {anime}','bold'), action='search', search=True, thumbnail=support.thumb('search.png')))
return itemlist
return locals()
@support.scrape
def submenu(item):
action = 'peliculas'
action = 'movies'
data = item.other
patronMenu = r'<input.*?name="(?P<name>[^"]+)" value="(?P<value>[^"]+)"\s*>[^>]+>(?P<title>[^<]+)<\/label>'
def itemHook(item):
@@ -82,24 +87,24 @@ def submenu(item):
return locals()
def newest(categoria):
support.info(categoria)
def newest(category):
logger.debug(category)
item = support.Item()
try:
if categoria == "anime":
if category == "anime":
item.url = host + '/updated'
item.args = "updated"
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.logger.error("{0}".format(line))
logger.error("{0}".format(line))
return []
def search(item, texto):
support.info(texto)
logger.debug(texto)
if item.search:
item.url = host + '/filter?dub=' + item.args + '&keyword=' + texto + '&sort='
else:
@@ -107,64 +112,64 @@ def search(item, texto):
item.url = host + '/search?keyword=' + texto
item.contentType = 'tvshow'
try:
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.logger.error("%s" % line)
logger.error("%s" % line)
return []
@support.scrape
def peliculas(item):
anime = True
def movies(item):
numerationEnabled = True
# debug = True
if item.args not in ['noorder', 'updated'] and not item.url[-1].isdigit(): item.url += order() # usa l'ordinamento di configura canale
data = get_data(item)
if item.args == 'updated':
item.contentType='episode'
patron=r'<div class="inner">\s*<a href="(?P<url>[^"]+)" class[^>]+>\s*<img.*?src="(?P<thumb>[^"]+)" alt?="(?P<title>[^\("]+)(?:\((?P<lang>[^\)]+)\))?"[^>]+>[^>]+>\s*(?:<div class="[^"]+">(?P<type>[^<]+)</div>)?[^>]+>[^>]+>\s*<div class="ep">[^\d]+(?P<episode>\d+)[^<]*</div>'
patron=r'<div class="inner">\s*<a href="(?P<url>[^"]+)" class[^>]+>\s*<img.*?src="(?P<thumb>[^"]+)" alt?="(?P<title>[^\("]+)(?:\((?P<lang>[^\)]+)\))?"[^>]+>[^>]+>\s*(?:<div class="[^"]+">(?P<type>[^<]+)</div>)?(?:[^>]+>){2,4}\s*<div class="ep">[^\d]+(?P<episode>\d+)[^<]*</div>'
action='findvideos'
else:
patron= r'<div class="inner">\s*<a href="(?P<url>[^"]+)" class[^>]+>\s*<img.*?src="(?P<thumb>[^"]+)" alt?="(?P<title>[^\("]+)(?:\((?P<year>\d+)\) )?(?:\((?P<lang>[^\)]+)\))?(?P<title2>[^"]+)?[^>]+>[^>]+>(?:\s*<div class="(?P<l>[^"]+)">[^>]+>)?\s*(?:<div class="[^"]+">(?P<type>[^<]+)</div>)?'
action='episodios'
action='episodes'
# Controlla la lingua se assente
patronNext=r'<a href="([^"]+)" class="[^"]+" id="go-next'
patronTotalPages=r'<span class="total">(\d+)</span>'
typeContentDict={'movie':['movie', 'special']}
typeActionDict={'findvideos':['movie', 'special']}
def itemHook(item):
if not item.contentLanguage:
if 'dub=1' in item.url or item.l == 'dub':
item.contentLanguage = 'ITA'
item.title += support.typo(item.contentLanguage,'_ [] color kod')
# item.title += support.typo(item.contentLanguage,'_ [] color kod')
else:
item.contentLanguage = 'Sub-ITA'
item.title += support.typo(item.contentLanguage,'_ [] color kod')
# item.title += support.typo(item.contentLanguage,'_ [] color kod')
return item
return locals()
@support.scrape
def episodios(item):
def episodes(item):
data = get_data(item)
anime = True
pagination = 50
numerationEnabled = True
# pagination = True
patronBlock= r'<div class="server\s*active\s*"(?P<block>.*?)(?:<div class="server|<link)'
patron = r'<li[^>]*>\s*<a.*?href="(?P<url>[^"]+)"[^>]*>(?P<episode>[^-<]+)(?:-(?P<episode2>[^<]+))?'
def itemHook(item):
item.number = support.re.sub(r'\[[^\]]+\]', '', item.title)
item.title += support.typo(item.fulltitle,'-- bold')
return item
# def itemHook(item):
# item.title = item.fulltitle
# return item
action='findvideos'
return locals()
def findvideos(item):
import time
support.info(item)
logger.debug()
itemlist = []
urls = []
# resp = support.match(get_data(item), headers=headers, patron=r'data-name="(\d+)">([^<]+)<')
@@ -172,8 +177,9 @@ def findvideos(item):
data = resp.data
for ID, name in resp.matches:
if not item.number: item.number = support.match(item.title, patron=r'(\d+) -').match
match = support.match(data, patronBlock=r'data-name="' + ID + r'"[^>]+>(.*?)(?:<div class="(?:server|download)|link)', patron=r'data-id="([^"]+)" data-episode-num="' + (item.number if item.number else '1') + '"' + r'.*?href="([^"]+)"').match
# if not item.number: item.number = support.match(item.title, patron=r'(\d+) -').match
match = support.match(data, patronBlock=r'data-name="{}"[^>]+>(.*?)(?:<div class="(?:server|download)|link)'.format(ID), patron=r'data-id="([^"]+)" data-episode-num="{}".*?href="([^"]+)"'.format(item.contentEpisodeNumber if item.contentEpisodeNumber else 1)).match
if match:
epID, epurl = match
# if 'vvvvid' in name.lower():
@@ -183,8 +189,7 @@ def findvideos(item):
title = support.match(url, patron=r'http[s]?://(?:www.)?([^.]+)', string=True).match
itemlist.append(item.clone(action="play", title=title, url=url, server='directo'))
else:
dataJson = support.match(host + '/api/episode/info?id=' + epID + '&alt=0', headers=headers).data
json = jsontools.load(dataJson)
json = support.match(host + '/api/episode/info?id=' + epID + '&alt=0', headers=headers).response.json
title = support.match(json['grabber'], patron=r'server\d+.([^.]+)', string=True).match
if title: itemlist.append(item.clone(action="play", title=title, url=json['grabber'].split('=')[-1], server='directo'))
else: urls.append(json['grabber'])

View File

@@ -5,7 +5,7 @@
"language": ["ita", "sub-ita"],
"thumbnail": "aniplay.png",
"banner": "aniplay.png",
"categories": ["anime", "vos"],
"categories": ["anime", "sub"],
"settings": [
{
"id": "sort",

View File

@@ -1,5 +1,5 @@
from platformcode import config, logger, autorenumber
from core import httptools, scrapertools, support, tmdb
from core import httptools, jsontools, scrapertools, support, tmdb
from inspect import stack
import sys
@@ -9,9 +9,9 @@ else:
from concurrent_py2 import futures
host = config.get_channel_url()
sort = ['views', 'title', 'episodeNumber', 'startDate', 'endDate', 'createdDate'][config.get_setting('sort', 'aniplay')]
order = 'asc' if config.get_setting('order', 'aniplay') else 'desc'
perpage = [10, 20, 30 ,40, 50, 60, 70, 80, 90][config.get_setting('perpage', 'aniplay')]
sort = ['views', 'title', 'episodeNumber', 'startDate', 'endDate', 'createdDate'][config.getSetting('sort', 'aniplay')]
order = 'asc' if config.getSetting('order', 'aniplay') else 'desc'
perpage = [10, 20, 30 ,40, 50, 60, 70, 80, 90][config.getSetting('perpage', 'aniplay')]
@support.menu
@@ -27,9 +27,9 @@ def mainlist(item):
def submenu_az(item):
itemlist = []
for letter in ['0-9'] + list('ABCDEFGHIJKLMNOPQRSTUVWXYZ'):
itemlist.append(item.clone(title = support.typo(letter, 'bold'),
itemlist.append(item.clone(title = letter,
url= host + '/api/anime/find-by-char',
action= 'peliculas',
action= 'movies',
variable= '&character=' + letter,
thumbnail=support.thumb('az')))
return itemlist
@@ -40,7 +40,7 @@ def submenu_year(item):
current = date.today().year
first = int(httptools.downloadpage('{}/api/anime/advanced-search?page=0&size=1&sort=startDate,asc&sort=id'.format(host)).json[0]['startDate'].split('-')[0]) -1
for year in range(current, first, -1):
itemlist.append(item.clone(title = support.typo(year, 'bold'),
itemlist.append(item.clone(title = year,
action= 'submenu_season',
variable= year,
thumbnail=support.thumb('year')))
@@ -51,7 +51,7 @@ def submenu_top(item):
links = {'Top del giorno':'daily-top', 'Top della settimana':'weekly-top', 'Top del mese':'monthly-top'}
for label in links:
link = links[label]
itemlist.append(item.clone(title = support.typo(label, 'bold'),
itemlist.append(item.clone(title = label,
action= 'submenu_top_of',
variable= link))
return itemlist
@@ -67,7 +67,7 @@ def submenu_season(item):
itemlist.append(item.clone(title=title,
url = '{}/api/seasonal-view/{}-{}'.format(host, s, item.variable),
thumbnail = support.thumb(s),
action = 'peliculas',
action = 'movies',
variable=''))
return itemlist
@@ -80,61 +80,62 @@ def submenu_top_of(item):
title = fulltitle.split('(')[0].strip()
scrapedlang = scrapertools.find_single_match(fulltitle, r'\(([^\)]+)')
lang = scrapedlang.upper() if scrapedlang else 'Sub-ITA'
long_title = support.typo(title, 'bold') + support.typo(lang, '_ [] color kod')
# long_title = support.typo(title, 'bold') + support.typo(lang, '_ [] color kod')
itemlist.append(item.clone(title=long_title,
itemlist.append(item.clone(title=title,
id=anime['animeId'],
url = '{}/api/anime/{}'.format(host, anime['animeId']),
thumbnail = get_thumbnail(anime, 'animeHorizontalImages'),
action = 'episodios',
action = 'episodes',
variable=anime['animeId']))
return itemlist
def search(item, texto):
support.info(texto)
logger.debug(texto)
item.url = host + '/api/anime/advanced-search'
item.variable = '&query=' + texto
try:
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.logger.error("%s" % line)
logger.error("%s" % line)
return []
def newest(categoria):
support.info(categoria)
def newest(category):
logger.debug(category)
item = support.Item()
try:
if categoria == "anime":
if category == "anime":
return latest_added(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.logger.error("{0}".format(line))
logger.error("{0}".format(line))
return []
def latest_added(item):
itemlist = []
page = item.page if item.page else 0
url= '{}/api/home/latest-episodes?page={}'.format(host, page)
js = httptools.downloadpage(url).json
for episode in js:
title = episode['title']
logger.debug(jsontools.dump(episode))
title = episode['title'] if episode['title'] else episode['animeTitle']
animeTitle, lang = get_lang(episode['animeTitle'])
quality = 'Full HD' if episode['fullHd'] else 'HD'
long_title = support.typo('{}. {}{}'.format(int(float(episode['episodeNumber'])), title + ' - ' if title else '', animeTitle), 'bold') + support.typo(lang, '_ [] color kod') + support.typo(quality, '_ [] color kod')
image = get_thumbnail(episode, 'episodeImages')
itemlist.append(item.clone(title=long_title,
itemlist.append(item.clone(title=title,
fulltitle=title,
animeId = episode['animeId'],
id=episode['id'],
@@ -155,7 +156,7 @@ def latest_added(item):
return itemlist
def peliculas(item):
def movies(item):
logger.debug()
itemlist = []
@@ -165,16 +166,14 @@ def peliculas(item):
for it in js:
title, lang = get_lang(it['title'])
long_title = support.typo(title, 'bold') + support.typo(lang, '_ [] color kod')
itemlist.append(item.clone(title = long_title,
itemlist.append(item.clone(title = title,
fulltitle = title,
show = title,
contentLanguage = lang,
contentType = 'movie' if it['type'] == 'Movie' else 'tvshow',
contentTitle = title,
contentSerieName = title if it['type'] == 'Serie' else '',
action ='findvideos' if it['type'] == 'Movie' else 'episodios',# '' if not active else 'findvideos' if it['type'] == 'Movie' else 'episodios',
action ='findvideos' if it['type'] == 'Movie' else 'episodes',# '' if not active else 'findvideos' if it['type'] == 'Movie' else 'episodes',
plot = it['storyline'],
year = it['startDate'].split('-')[0],
url = '{}/api/anime/{}'.format(host, it['id']),
@@ -189,7 +188,7 @@ def peliculas(item):
return itemlist
def episodios(item):
def episodes(item):
logger.debug()
itemlist = []
@@ -208,6 +207,7 @@ def episodios(item):
title = it['name']
itemlist.append(item.clone(title = title,
contentTitle = title,
id= '{}/season/{}'.format(it['animeId'], it['id']),
contentType = 'season',
action = 'list_episodes',
@@ -259,10 +259,11 @@ def list_episodes(item, json=None):
else:
episode = '{:02d}'.format(int(it['episodeNumber'].split('.')[0]))
title = support.typo('{}. {}'.format(episode, it['title']), 'bold')
# title = support.typo('{}. {}'.format(episode, it['title']), 'bold')
image = get_thumbnail(it, 'episodeImages')
itemlist.append(item.clone(title = title,
itemlist.append(item.clone(title = it['title'],
contentTitle = it['title'],
id= it['id'],
url= 'api/episode/{}'.format(it['id']),
contentType = 'episode',
@@ -283,7 +284,7 @@ def list_episodes(item, json=None):
def findvideos(item):
logger.debug()
url = '{}/api/{}/{}'.format(host, 'episode' if item.contentType == 'episode' else 'anime', item.id)
url = '{}/api/{}/{}'.format(host, 'episode' if item.contentType != 'movie' else 'anime', item.id)
json = httptools.downloadpage(url, CF=False ).json
@@ -292,7 +293,7 @@ def findvideos(item):
videourl = json['episodeVideo']
itemlist = [item.clone(title=config.get_localized_string(30137),
itemlist = [item.clone(title=config.getLocalizedString(30137),
url=videourl,
server='directo')]

View File

@@ -5,7 +5,7 @@
"active": true,
"thumbnail": "casacinema.png",
"banner": "casacinema.png",
"categories": ["tvshow", "movie","vos"],
"categories": ["tvshow", "movie","sub"],
"settings": [
]
}

View File

@@ -5,6 +5,7 @@
from core import support
from platformcode import logger
host = support.config.get_channel_url()
headers = [['Referer', host]]
@@ -14,11 +15,11 @@ headers = [['Referer', host]]
def mainlist(item):
film = ['/category/film',
('Generi', ['', 'genres', 'genres']),
('Sub-ITA', ['/category/sub-ita/', 'peliculas', 'sub'])
('Sub-ITA', ['/category/sub-ita/', 'movies', 'sub'])
]
tvshow = ['/category/serie-tv',
('Novità', ['/aggiornamenti-serie-tv', 'peliculas', '']),
('Novità', ['/aggiornamenti-serie-tv', 'movies', '']),
]
search = ''
@@ -28,9 +29,9 @@ def mainlist(item):
@support.scrape
def genres(item):
action = 'peliculas'
action = 'movies'
blacklist = ['PRIME VISIONI', 'ULTIME SERIE TV', 'ULTIMI FILM']
patronMenu = r'<li><a href="(?P<url>[^"]+)">(?P<title>[^<>]+)</a></li>'
patronGenreMenu = r'<li><a href="(?P<url>[^"]+)">(?P<title>[^<>]+)</a></li>'
patronBlock = r'<div class="container home-cats">(?P<block>.*?)<div class="clear">'
return locals()
@@ -38,37 +39,37 @@ def genres(item):
def select(item):
item.data = support.match(item).data
if 'continua con il video' in item.data.lower():
support.info('select = ### è un film ###')
logger.debug('select = ### è un film ###')
item.contentType = 'movie'
return findvideos(item)
else:
support.info('select = ### è una serie ###')
logger.debug('select = ### è una serie ###')
item.contentType = 'tvshow'
return episodios(item)
return episodes(item)
def search(item, text):
support.info(text)
logger.debug(text)
text = text.replace(' ', '+')
item.url = host + '/?s=' + text
item.args = 'search'
try:
return peliculas(item)
return movies(item)
except:
import sys
for line in sys.exc_info():
support.info('search log:', line)
logger.error(line)
return []
def newest(categoria):
def newest(category):
itemlist = []
item = support.Item()
item.args = 'newest'
try:
if categoria == 'series':
if category == 'tvshow':
item.contentType = 'tvshow'
item.url = host+'/aggiornamenti-serie-tv'
@@ -76,30 +77,30 @@ def newest(categoria):
item.contentType = 'movie'
item.url = host+'/category/film'
item.action = 'peliculas'
itemlist = peliculas(item)
item.action = 'movies'
itemlist = movies(item)
if itemlist[-1].action == 'peliculas':
if itemlist[-1].action == 'movies':
itemlist.pop()
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.info("%s" % line)
logger.error(line)
return []
return itemlist
@support.scrape
def peliculas(item):
def movies(item):
# debug = True
if item.contentType == 'movie':
action = 'findvideos'
elif item.contentType == 'tvshow':
action = 'episodios'
pagination = ''
action = 'episodes'
pagination = True
else:
action = 'select'
@@ -110,17 +111,17 @@ def peliculas(item):
patron = r'<li><a href="(?P<url>[^"]+)"[^=]+="(?P<thumb>[^"]+)"><div>\s*?<div[^>]+>(?P<title>[^\(\[<]+)(?P<title2>\([\D*]+\))?(?:\[(?P<quality1>HD)\])?\s?(?:[\(\[])?(?P<lang>[sS]ub-[iI][tT][aA])?(?:[\)\]])?\s?(?:\[(?P<quality>.+?)\])?\s?(?:\((?P<year>\d+)\))?(?:\(\D{2}\s\d{4}\))?<'
patronNext = r'<a href="([^"]+)"\s*>Pagina'
# debug = True
patronTotalPages = r'>(\d+)(?:[^>]+>){4}Pagina'
def itemHook(item):
if item.quality1:
item.quality = item.quality1
item.title += support.typo(item.quality, '_ [] color kod')
# item.title += support.typo(item.quality, '_ [] color kod')
if item.lang2:
item.contentLanguage = item.lang2
item.title += support.typo(item.lang2, '_ [] color kod')
if item.args == 'novita':
item.title = item.title
# item.title += support.typo(item.lang2, '_ [] color kod')
# if item.args == 'novita':
# item.title = item.title
# if 'wp-content' in item.thumbnail and not item.infoLabels['year']:
# item.infoLabels['year'] = item.thumbnail.split('/')[5]
return item
@@ -128,7 +129,7 @@ def peliculas(item):
@support.scrape
def episodios(item):
def episodes(item):
if item.data:
data = item.data
action = 'findvideos'
@@ -148,7 +149,7 @@ def findvideos(item):
data = ''
from lib.unshortenit import unshorten_only
for link in links:
support.info('URL=',link)
logger.debug('URL=',link)
url, c = unshorten_only(link.replace('#', 'speedvideo.net'))
data += url + '\n'
return support.server(item, data)

View File

@@ -1,7 +1,7 @@
{
"id": "cb01anime",
"name": "Cb01anime",
"language": ["ita", "vos", "sub-ita"],
"language": ["ita", "sub, "sub-ita"],
"active": true,
"thumbnail": "cb01anime.png",
"banner": "cb01anime.png",

View File

@@ -5,6 +5,7 @@
# ------------------------------------------------------------
from core import support
from platformcode import logger
host = support.config.get_channel_url() + '/cb01-anime-cartoon'
@@ -18,7 +19,7 @@ def mainlist(item):
anime = [('Genere',['','menu', '2']),
('Per Lettera',['','menu', '1']),
('Per Anno',['','menu', '3']),
('Ultimi Anime Aggiornati',['','peliculas', 'newest'])]
('Ultimi Anime Aggiornati',['','movies', 'newest'])]
return locals()
@@ -27,7 +28,9 @@ def menu(item):
blacklist = ['Anime per Genere', 'Anime per Anno', 'Anime per Lettera']
patronBlock = r'<select name="select%s"(?P<block>.*?)</select>' % item.args
patronMenu = r'<option value="(?P<url>[^"]+)">(?P<title>[^<]+)</option>'
action = 'peliculas'
if '2' in item.args:
patronGenreMenu = patronMenu
action = 'movies'
def itemHook(item):
item.url = item.url.replace('cb01-anime/','cb01-anime-cartoon/')
return item
@@ -35,37 +38,37 @@ def menu(item):
def search(item, texto):
support.info(texto)
logger.debug(texto)
item.url = host + "/search/" + texto
try:
return peliculas(item)
return movies(item)
except:
import sys
for line in sys.exc_info():
support.info('search log:', line)
logger.error(line)
return []
def newest(categoria):
support.info(categoria)
def newest(category):
logger.debug(category)
itemlist = []
item = support.Item()
try:
if categoria == "anime":
if category == "anime":
item.url = host
item.args = 'newest'
itemlist = peliculas(item)
itemlist = movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.logger.error("{0}".format(line))
logger.error("{0}".format(line))
return []
return itemlist
@support.scrape
def peliculas(item):
def movies(item):
# debug=True
blacklist = Blacklist
item.contentType = 'tvshow'
@@ -78,20 +81,19 @@ def peliculas(item):
return locals()
def check(item):
# support.dbg()
item.url = support.match(item, patron=r'(?:<p>|/>)(.*?)(?:<br|</td>|</p>)', patronBlock=r'Streaming:(.*?)</tr>').matches
if 'Episodio' in str(item.url):
item.contentType = 'tvshow'
item.action ='episodios'
return episodios(item)
item.action ='episodes'
return episodes(item)
else:
item.contentType = 'movie'
item.action = 'findvideos'
return findvideos(item)
@support.scrape
def episodios(item):
support.info('EPISODIOS ', item.data)
def episodes(item):
logger.debug('EPISODIOS ', item.data)
data = ''
matches = item.data
season = 1

View File

@@ -5,6 +5,6 @@
"active": true,
"thumbnail": "cb01.png",
"banner": "cb01.png",
"categories": ["tvshow", "movie", "vos", "documentary"],
"categories": ["tvshow", "movie", "sub", "documentary"],
"settings": []
}

View File

@@ -2,7 +2,7 @@
# ------------------------------------------------------------
# Canale per cineblog01
# ------------------------------------------------------------
import datetime
import re
from core import scrapertools, httptools, servertools, support
@@ -27,17 +27,17 @@ def mainlist(item):
('Generi', ['', 'menu', 'Film per Genere']),
('Anni', ['', 'menu', 'Film per Anno']),
('Paese', ['', 'menu', 'Film per Paese']),
('Ultimi Aggiornati', ['/ultimi-100-film-aggiornati/', 'peliculas', 'newest']),
('Ultimi Aggiunti', ['/lista-film-ultimi-100-film-aggiunti/', 'peliculas', 'newest'])
('Ultimi Aggiornati', ['/ultimi-100-film-aggiornati/', 'movies', 'newest']),
('Ultimi Aggiunti', ['/lista-film-ultimi-100-film-aggiunti/', 'movies', 'newest'])
]
tvshow = ['/serietv/',
('Per Lettera', ['/serietv/', 'menu', 'Serie-Tv per Lettera']),
('Per Genere', ['/serietv/', 'menu', 'Serie-Tv per Genere']),
('Per anno', ['/serietv/', 'menu', 'Serie-Tv per Anno']),
('Ultime Aggiornate', ['/serietv/ultime-100-serie-tv-aggiornate/', 'peliculas', 'newest'])
('Ultime Aggiornate', ['/serietv/ultime-100-serie-tv-aggiornate/', 'movies', 'newest'])
]
docu = [('Documentari {bullet bold}', ['/category/documentario/', 'peliculas']),
('HD {submenu} {documentari}', ['/category/hd-alta-definizione/documentario-hd/', 'peliculas'])
docu = [('Documentari {bullet bold}', ['/category/documentario/', 'movies']),
('HD {submenu} {documentari}', ['/category/hd-alta-definizione/documentario-hd/', 'movies'])
]
return locals()
@@ -47,24 +47,26 @@ def mainlist(item):
def menu(item):
patronBlock = item.args + r'<span.*?><\/span>.*?<ul.*?>(?P<block>.*?)<\/ul>'
patronMenu = r'href="?(?P<url>[^">]+)"?>(?P<title>.*?)<\/a>'
action = 'peliculas'
if 'genere' in item.args.lower():
patronGenreMenu = patronMenu
action = 'movies'
return locals()
def newest(categoria):
support.info(categoria)
def newest(category):
logger.debug(category)
item = support.Item()
try:
if categoria == "series":
if category == 'tvshow':
item.contentType = 'tvshow'
item.url = host + '/serietv/' # aggiornamento-quotidiano-serie-tv/'
else:
item.contentType = 'movie'
item.url = host + '/lista-film-ultimi-100-film-aggiunti/'
item.args = "newest"
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
@@ -74,12 +76,13 @@ def newest(categoria):
def search(item, text):
logger.info("search", text)
logger.info("search", item, text)
if item.contentType == 'tvshow': item.url = host + '/serietv'
else: item.url = host
try:
item.url = item.url + "/search/" + text.replace(' ', '+')
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
@@ -90,7 +93,7 @@ def search(item, text):
@support.scrape
def peliculas(item):
def movies(item):
# debug = True
# esclusione degli articoli 'di servizio'
# curYear = datetime.date.today().year
@@ -101,14 +104,14 @@ def peliculas(item):
# 'Auguri di Buon Natale e Felice Anno Nuovo! &#8211; ' + str(curYear) + '!']
if 'newest' in item.args:
pagination = ''
pagination = True
patronBlock = r'sequex-page-left(?P<block>.*?)sequex-page-right'
if '/serietv/' not in item.url:
patron = r'src="?(?P<thumb>[^ "]+)"? alt="?(?P<title>.*?)(?:\[(?P<quality>[a-zA-Z/]+)\]\s*)?(?:\[(?P<lang>Sub-ITA|ITA)\]\s*)?(?:\[(?P<quality2>[a-zA-Z/]+)\]\s*)?\((?P<year>\d{4})[^\)]*\)[^>]*>.*?<a href=(?:")?(?P<url>[^" ]+)(?:")?.*?rpwe-summary[^>]*>(?P<genre>\w+) [^ ]+ DURATA (?P<duration>[0-9]+)[^ ]+ [^ ]+ [A-Z ]+ (?P<plot>[^<]+)<'
action = 'findvideos'
else:
patron = r'src=(?:")?(?P<thumb>[^ "]+)(?:")? alt=(?:")?(?P<title>.*?)(?: &#8211; \d+&#215;\d+)?(?:>|"| &#8211; )(?:(?P<lang>Sub-ITA|ITA))?[^>]*>.*?<a href=(?:")?(?P<url>[^" ]+)(?:")?.*?rpwe-summary[^>]*>(?P<genre>[^\(]*)\((?P<year>\d{4})[^\)]*\) (?P<plot>[^<]+)<'
action = 'episodios'
action = 'episodes'
elif '/serietv/' not in item.url:
patron = r'(?<!sticky )hentry.*?<div class="card-image">\s*<a[^>]+>\s*<img src="(?P<thumb>[^" ]+)" alt[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+><a href="?(?P<url>[^" >]+)(?:\/|"|\s+)>(?P<title>[^<[(]+)(?:\[(?P<quality>[a-zA-Z/]+)\]\s*)?(?:\[(?P<lang>Sub-ITA|ITA)\]\s*)?(?:\[(?P<quality2>[a-zA-Z/]+)\]\s*)? (?:\((?P<year>[0-9]{4})\))?[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>(?P<genre>[^<>&‖“]+)(?:[^ ]+\s*DURATA\s*(?P<duration>[0-9]+)[^>]+>[^>]+>[^>]+>(?P<plot>[^<>]+))?'
@@ -116,10 +119,11 @@ def peliculas(item):
else:
patron = r'(?<!sticky )hentry.*?card-image[^>]*>\s*<a href=(?:")?(?P<url>[^" >]+)(?:")?\s*>\s*<img src=(?:")?(?P<thumb>[^" ]+)(?:")? alt="(?P<title>.*?)(?: &#8211; \d+&#215;\d+)?(?:"| &#8211; )(?:(?P<lang>Sub-ITA|ITA))?[^>]*>[^>]+>[^>]+>[^>]*>[^>]+>[^>]+>[^>]*>[^>]+>[^>]+>[^>]*>[^>]+>[^>]+>[^>]*>(?P<genre>[^\(]+)\((?P<year>\d{4})[^>]*>[^>]+>[^>]+>[^>]+>(?:<p>)?(?P<plot>[^<]+)'
action = 'episodios'
action = 'episodes'
item.contentType = 'tvshow'
patronNext = '<a class="?page-link"? href="?([^>"]+)"?><i class="fa fa-angle-right">'
patronTotalPages = '(\d+[\.]?\d+)</option>\s*</sele'
def itemHook(item):
if item.quality2:
@@ -130,113 +134,117 @@ def peliculas(item):
return locals()
@support.scrape
def episodios(item):
def episodes(item):
@support.scrape
def folder(item, data):
"""
Quando c'è un link ad una cartella contenente più stagioni
"""
actLike = 'episodios'
addVideolibrary = False
downloadEnabled = False
def listed(item, data):
actLike = 'episodes'
disableAll = True
folderUrl = scrapertools.find_single_match(data, r'TUTTA L[EA] \w+\s+(?:&#8211;|-)\s+<a href="?([^" ]+)')
data = httptools.downloadpage(folderUrl, disable_directIP=True).data
patron = r'<td>(?P<title>[^<]+)<td><a [^>]+href="(?P<url>[^"]+)[^>]+>'
sceneTitle = True
# debug = True
patronBlock = r'(?P<block>sp-head[^>]+>\s*(?:STAGION[EI]\s*(?:(?:DA)?\s*[0-9]+\s*A)?\s*[0-9]+|MINISSERIE)(?::\s*PARTE\s*[0-9]+)? - (?P<lang>[^-<]+)(?:- (?P<quality>[^-<]+))?.*?<\/div>.*?)spdiv[^>]*>'
patron = r'(?:/>|<p>|<strong>)(?P<data>.*?(?P<episode>[0-9]+(?:&#215;|×)[0-9]+)\s*(?P<title2>.*?)?(?:\s*&#8211;|\s*-|\s*<).*?)(?:<\/p>|<br)'
def itemHook(item):
item.serieFolder = True
return item
return locals()
# debugBlock=True
@support.scrape
def folder(item, data):
# Quando c'è un link ad una cartella contenente più stagioni
actLike = 'episodes'
disableAll = True
sceneTitle = True
folderUrl = scrapertools.find_single_match(data, r'TUTT[EA] L[EA] \w+\s+(?:&#8211;|-)\s+<a href="?([^" ]+)')
data = httptools.downloadpage(folderUrl, disable_directIP=True).data
patron = r'<td>(?P<title>[^<]+)<td><a [^>]+href="(?P<folderdata>[^"]+)[^>]+>'
return locals()
data = support.match(item.url, headers=headers).data
folderItemlist = folder(item, data) if '<p>TUTTA L' in data else []
patronBlock = r'(?P<block>sp-head[^>]+>\s*(?:STAGION[EI]\s*(?:(?:DA)?\s*[0-9]+\s*A)?\s*[0-9]+|MINISSERIE)(?::\s*PARTE\s*[0-9]+)? - (?P<lang>[^-<]+)(?:- (?P<quality>[^-<]+))?.*?<\/div>.*?)spdiv[^>]*>'
patron = r'(?:/>|<p>|<strong>)(?P<other>.*?(?P<episode>[0-9]+(?:&#215;|×)[0-9]+)\s*(?P<title2>.*?)?(?:\s*&#8211;|\s*-|\s*<).*?)(?:<\/p>|<br)'
def itemlistHook(itemlist):
title_dict = {}
itlist = []
for i in itemlist:
i.url = item.url
i.title = re.sub(r'\.(\D)',' \\1', i.title)
match = support.match(i.title, patron=r'(\d+.\d+)').match.replace('x','')
i.order = match
if match not in title_dict:
title_dict[match] = i
elif match in title_dict and i.contentLanguage == title_dict[match].contentLanguage \
or i.contentLanguage == 'ITA' and not title_dict[match].contentLanguage \
or title_dict[match].contentLanguage == 'ITA' and not i.contentLanguage:
title_dict[match].url = i.url
else:
title_dict[match + '1'] = i
itemlist = listed(item, data)
itemlist.extend(folder(item, data) if 'TUTTE LE' in data or 'TUTTA LA' in data else [])
for key, value in title_dict.items():
itlist.append(value)
itemDict = {'ITA':{}, 'Sub-ITA':{}}
seasons = []
itlist = sorted(itlist, key=lambda it: (it.contentLanguage, int(it.order)))
itlist.extend(folderItemlist)
return itlist
return locals()
for it in itemlist:
it.contentType = 'episode'
if it.contentSeason and it.contentSeason not in seasons:
seasons.append(it.contentSeason)
itemDict['ITA'][it.contentSeason] = []
itemDict['Sub-ITA'][it.contentSeason] = []
if it.contentSeason:
if not it.contentLanguage: it.contentLanguage = 'ITA'
itemDict[it.contentLanguage][it.contentSeason].append(it)
def findvideos(item):
if item.serieFolder:
return support.server(item, data=item.url)
if item.contentType == "episode":
return findvid_serie(item)
itlist = []
for season in sorted(seasons):
itlist.extend(sorted(itemDict['ITA'].get(season, []), key=lambda it: (it.contentSeason, it.contentEpisodeNumber)))
itlist.extend(sorted(itemDict['Sub-ITA'].get(season, []), key=lambda it: (it.contentSeason, it.contentEpisodeNumber)))
itemlist = itlist
def load_links(itemlist, re_txt, desc_txt, quality=""):
streaming = scrapertools.find_single_match(data, re_txt).replace('"', '')
logger.debug('STREAMING', streaming)
logger.debug('STREAMING=', streaming)
matches = support.match(streaming, patron = r'<td><a.*?href=([^ ]+) [^>]+>([^<]+)<').matches
for scrapedurl, scrapedtitle in matches:
logger.debug("##### findvideos %s ## %s ## %s ##" % (desc_txt, scrapedurl, scrapedtitle))
itemlist.append(item.clone(action="play", title=scrapedtitle, url=scrapedurl, server=scrapedtitle, quality=quality))
logger.debug()
itemlist = []
# Carica la pagina
data = httptools.downloadpage(item.url).data
data = re.sub('\n|\t', '', data)
# Estrae i contenuti - Streaming
load_links(itemlist, '<strong>Streamin?g:</strong>(.*?)cbtable', "Streaming", "SD")
# Estrae i contenuti - Streaming HD
load_links(itemlist, '<strong>Streamin?g HD[^<]+</strong>(.*?)cbtable', "Streaming HD", "HD")
# Estrae i contenuti - Streaming 3D
load_links(itemlist, '<strong>Streamin?g 3D[^<]+</strong>(.*?)cbtable', "Streaming 3D")
itemlist = support.server(item, itemlist=itemlist)
# Extract the quality format
patronvideos = r'([\w.]+)</strong></div></td>'
support.addQualityTag(item, itemlist, data, patronvideos)
if not support.stackCheck(['add_tvshow', 'get_episodes', 'update', 'find_episodes']):
if len(seasons) > 1:
itemlist = support.season_pagination(itemlist, item, [], 'episodes')
else:
itemlist = support.pagination(itemlist, item, 'episodes')
if config.getSetting('episode_info'):
support.tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
support.videolibrary(itemlist, item)
support.download(itemlist, item)
return itemlist
# Estrae i contenuti - Download
# load_links(itemlist, '<strong>Download:</strong>(.*?)<tableclass=cbtable height=30>', "aqua", "Download")
# Estrae i contenuti - Download HD
# load_links(itemlist, '<strong>Download HD[^<]+</strong>(.*?)<tableclass=cbtable width=100% height=20>', "azure", "Download HD")
def findvid_serie(item):
def findvideos(item):
logger.debug()
data = re.sub(r'((?:<p>|<strong>)?[^\d]*\d*(?:&#215;|×)[0-9]+[^<]+)', '', item.other)
if item.folderdata:
return support.server(item, data=item.folderdata)
elif item.data:
return support.server(item, data=re.sub(r'((?:<p>|<strong>)?[^\d]*\d*(?:&#215;|×)[0-9]+[^<]+)', '', item.data))
else:
return support.server(item, data=data)
def load_links(itemlist, re_txt, desc_txt, quality=""):
streaming = scrapertools.find_single_match(data, re_txt).replace('"', '')
logger.debug('STREAMING', streaming)
logger.debug('STREAMING=', streaming)
matches = support.match(streaming, patron = r'<td><a.*?href=([^ ]+) [^>]+>([^<]+)<').matches
for scrapedurl, scrapedtitle in matches:
logger.debug("##### findvideos %s ## %s ## %s ##" % (desc_txt, scrapedurl, scrapedtitle))
itemlist.append(item.clone(action="play", title=scrapedtitle, url=scrapedurl, server=scrapedtitle, quality=quality))
logger.debug()
itemlist = []
# Carica la pagina
data = httptools.downloadpage(item.url).data
data = re.sub('\n|\t', '', data)
# Estrae i contenuti - Streaming
load_links(itemlist, '<strong>Streamin?g:</strong>(.*?)cbtable', "Streaming", "SD")
# Estrae i contenuti - Streaming HD
load_links(itemlist, '<strong>Streamin?g HD[^<]+</strong>(.*?)cbtable', "Streaming HD", "HD")
# Estrae i contenuti - Streaming 3D
load_links(itemlist, '<strong>Streamin?g 3D[^<]+</strong>(.*?)cbtable', "Streaming 3D")
itemlist = support.server(item, itemlist=itemlist)
# Extract the quality format
patronvideos = r'([\w.]+)</strong></div></td>'
support.addQualityTag(item, itemlist, data, patronvideos)
return itemlist
# Estrae i contenuti - Download
# load_links(itemlist, '<strong>Download:</strong>(.*?)<tableclass=cbtable height=30>', "aqua", "Download")
# Estrae i contenuti - Download HD
# load_links(itemlist, '<strong>Download HD[^<]+</strong>(.*?)<tableclass=cbtable width=100% height=20>', "azure", "Download HD")
def play(item):

View File

@@ -6,6 +6,6 @@
"thumbnail": "cinemalibero.png",
"banner": "cinemalibero.png",
"categories": ["movie","tvshow","anime"],
"not_active": ["include_in_newest_anime", "include_in_newest_peliculas"],
"not_active": ["include_in_newest_anime", "include_in_newest_movie"],
"settings": []
}

View File

@@ -7,7 +7,7 @@ import re
from core import httptools, support, scrapertools
from core.item import Item
from platformcode import config
from platformcode import config, logger
# rimanda a .today che contiene tutti link a .plus
@@ -29,15 +29,15 @@ headers = [['Referer', host]]
def mainlist(item):
film = ['/category/film/',
('Novità', ['', 'peliculas', 'update']),
('Novità', ['', 'movies', 'update']),
('Generi', ['', 'genres'])]
tvshow = ['/category/serie-tv/']
anime = ['/category/anime-giapponesi/']
## Sport = [(support.typo('Sport', 'bullet bold'), ['/category/sport/', 'peliculas', 'sport', 'tvshow'])]
news = [('Ultimi episodi Serie/Anime', ['/aggiornamenti-serie-tv/', 'peliculas', 'update', 'tvshow'])]
## Sport = [(support.typo('Sport', 'bullet bold'), ['/category/sport/', 'movies', 'sport', 'tvshow'])]
news = [('Ultimi episodi Serie/Anime', ['/aggiornamenti-serie-tv/', 'movies', 'update', 'tvshow'])]
search = ''
@@ -45,13 +45,13 @@ def mainlist(item):
@support.scrape
def peliculas(item):
def movies(item):
# debug = True
action = 'check'
patronBlock = r'<div class="container">.*?class="col-md-12[^"]*?">(?P<block>.*?)<div class=(?:"container"|"bg-dark ")>'
if item.args == 'newest':
patron = r'<div class="col-lg-3">[^>]+>[^>]+>\s<a href="(?P<url>[^"]+)".+?url\((?P<thumb>[^\)]+)\)">[^>]+>(?P<title>[^<]+)<[^>]+>[^>]+>(?:[^>]+>)?\s?(?P<rating>[\d\.]+)?[^>]+>.+?(?:[ ]\((?P<year>\d{4})\))?<[^>]+>[^>]+>(.?[\d\-x]+\s\(?(?P<lang>[sSuUbBiItTaA\-]+)?\)?\s?(?P<quality>[\w]+)?[|]?\s?(?:[fFiInNeE]+)?\s?\(?(?P<lang2>[sSuUbBiItTaA\-]+)?\)?)?'
pagination = 25
pagination = True
elif item.contentType == 'movie':
patron = r'<a href="(?P<url>[^"]+)" title="(?P<title>.+?)(?:[ ]\[(?P<lang>[sSuUbB\-iItTaA]+)\])?(?:[ ]\((?P<year>\d{4})\))?"\s*alt="[^"]+"\s*class="[^"]+"(?: style="background-image: url\((?P<thumb>.+?)\)">)?\s*<div class="voto">[^>]+>[^>]+>.(?P<rating>[\d\.a-zA-Z\/]+)?[^>]+>[^>]+>[^>]+>(?:<div class="genere">(?P<quality>[^<]+)</div>)?'
if item.args == 'update':
@@ -60,7 +60,7 @@ def peliculas(item):
elif item.contentType == 'tvshow':
if item.args == 'update':
patron = r'<a href="(?P<url>[^"]+)"[^<]+?url\((?P<thumb>.+?)\)">\s*?<div class="titolo">(?P<title>.+?)(?: &#8211; Serie TV)?(?:\([sSuUbBiItTaA\-]+\))?[ ]?(?P<year>\d{4})?</div>\s*?(?:<div class="genere">)?(?:[\w]+?\.?\s?[\s|S]?[\dx\-S]+?\s\(?(?P<lang>[iItTaA]+|[sSuUbBiItTaA\-]+)\)?\s?(?P<quality>[HD]+)?|.+?\(?(?P<lang2>[sSuUbBiItTaA\-]+)?\)?</div>)'
pagination = 25
pagination = True
else:
patron = r'<a href="(?P<url>[^"]+)"\s*title="(?P<title>[^"\(]+)(?:"|\()(?:(?P<year>\d+)[^"]+)?.*?url\((?P<thumb>[^\)]+)\)(?:.*?<div class="voto">[^>]+>[^>]+>\s*(?P<rating>[^<]+))?.*?<div class="titolo">[^>]+>(?:<div class="genere">[^ ]*(?:\s\d+)?\s*(?:\()?(?P<lang>[^\)< ]+))?'
else:
@@ -77,8 +77,8 @@ def peliculas(item):
item.title += support.typo(item.lang2, '_ [] color kod')
if item.args == 'update':
item.title = item.title.replace('-', ' ')
# if item.args == 'search':
# item.contentType = 'tvshow' if 'serie-' in item.url else 'movie'
if item.args == 'search':
item.contentType = 'undefined'
return item
@@ -86,20 +86,20 @@ def peliculas(item):
return locals()
@support.scrape
def episodios(item):
def episodes(item):
data=item.data
# debug=True
if item.args == 'anime':
support.info("Anime :", item)
logger.debug("Anime :", item)
# blacklist = ['Clipwatching', 'Verystream', 'Easybytez', 'Flix555', 'Cloudvideo']
patron = r'<a target=(?P<url>[^>]+>(?P<title>Episodio\s(?P<episode>\d+))(?::)?(?:(?P<title2>[^<]+))?.*?(?:<br|</p))'
patronBlock = r'(?:Stagione (?P<season>\d+))?(?:</span><br />|</span></p>|strong></p>)(?P<block>.*?)(?:<div style="margin-left|<span class="txt_dow">)'
item.contentType = 'tvshow'
# item.contentType = 'tvshow'
elif item.args == 'serie':
support.info("Serie :", item)
logger.debug("Serie :", item)
patron = r'(?:>| )(?P<episode>\d+(?:x|×|&#215;)\d+)[;]?[ ]?(?:(?P<title>[^<-]+)(?P<data>.*?)|(\2[ ])(?:<(\3.*?)))(?:</a><br /|</a></p|$)'
patronBlock = r'>(?:[^<]+[Ss]tagione\s|[Ss]tagione [Uu]nica)(?:(?P<lang>iTA|ITA|Sub-ITA|Sub-iTA))?.*?</strong>(?P<block>.+?)(?:<strong|<div class="at-below)'
item.contentType = 'tvshow'
# item.contentType = 'tvshow'
else:
patron = r'(?P<title>\s*[0-9]{2}/[0-9]{2}/[0-9]{4})(?P<data>.*?)(?:<br|</p)'
@@ -114,51 +114,52 @@ def episodios(item):
@support.scrape
def genres(item):
action='peliculas'
action='movies'
patron_block=r'<div id="bordobar" class="dropdown-menu(?P<block>.*?)</li>'
patronMenu=r'<a class="dropdown-item" href="(?P<url>[^"]+)" title="(?P<title>[A-z]+)"'
patronGenreMenu=r'<a class="dropdown-item" href="(?P<url>[^"]+)" title="(?P<title>[A-z]+)"'
return locals()
def search(item, texto):
support.info(item.url,texto)
logger.debug(item.url,texto)
item.contentType = 'undefined'
texto = texto.replace(' ', '+')
item.url = host + "/?s=" + texto
# item.contentType = 'tv'
item.args = 'search'
try:
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.info("%s" % line)
logger.error("%s" % line)
return []
def newest(categoria):
support.info('newest ->', categoria)
def newest(category):
logger.debug('newest ->', category)
itemlist = []
item = Item()
item.args = 'newest'
try:
if categoria == 'series' or categoria == 'anime':
if category == 'tvshow' or category == 'anime':
item.args = 'update'
item.url = host+'/aggiornamenti-serie-tv/'
item.contentType = 'tvshow'
item.action = 'peliculas'
itemlist = peliculas(item)
item.action = 'movies'
itemlist = movies(item)
except:
import sys
for line in sys.exc_info():
support.info('newest log: ', (line))
logger.error('newest log: ', (line))
return []
return itemlist
def check(item):
support.info()
logger.debug()
data = support.match(item.url, headers=headers).data
if data:
ck = support.match(data, patron=r'Supportaci condividendo quest[oa] ([^:]+)').match.lower()
@@ -167,13 +168,13 @@ def check(item):
item.contentType = 'tvshow'
item.args = 'serie'
item.data = data
return episodios(item)
return episodes(item)
elif ck == 'anime':
item.contentType = 'tvshow'
item.args = 'anime'
item.data = data
return episodios(item)
return episodes(item)
elif ck == 'film':
item.contentType = 'movie'
@@ -183,7 +184,7 @@ def check(item):
else:
item.contentType = 'tvshow'
item.data = data
itemlist = episodios(item)
itemlist = episodes(item)
if not itemlist:
item.contentType = 'movie'
item.data = data
@@ -192,6 +193,6 @@ def check(item):
def findvideos(item):
support.info()
logger.debug()
item.data = item.data.replace('http://rapidcrypt.net/verys/', '').replace('http://rapidcrypt.net/open/', '') #blocca la ricerca
return support.server(item, data=item.data)

View File

@@ -6,6 +6,6 @@
"thumbnail": "cinetecadibologna.png",
"banner": "cinetecadibologna.png",
"categories": ["documentary"],
"not_active":["include_in_newest_peliculas", "include_in_newest_series", "include_in_newest_anime"],
"not_active":["include_in_newest_movie", "include_in_newest_tvshow", "include_in_newest_anime"],
"settings": []
}

View File

@@ -2,9 +2,9 @@
# ------------------------------------------------------------
# Canale per cinetecadibologna
# ------------------------------------------------------------
from core.item import Item
from core import support
from platformcode import logger
host = support.config.get_channel_url()
@@ -22,7 +22,7 @@ def mainlist(item):
@support.scrape
def menu(item):
action = 'peliculas'
action = 'movies'
if 'epoche' in item.url:
patronMenu =r'<li>\s*<a href="(?P<url>[^"]+)">(?P<title>[^>]+)<'
elif 'percorsi' in item.url:
@@ -34,23 +34,23 @@ def menu(item):
def search(item, text):
support.info(text)
logger.debug(text)
item.args = 'noorder'
item.url = host + '/ricerca/type_ALL/ricerca_' + text
item.contentType = 'movie'
try:
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.logger.error("%s" % line)
logger.error("%s" % line)
return []
@support.scrape
def peliculas(item):
def movies(item):
if 'alfabetico' in item.url:
patron = r'<img src="(?P<thumb>[^"]+)"[^>]+>\s*[^>]+>\s*<div[^>]+>\s*<div[^>]+>[^>]+>\s*<a href="(?P<url>[^"]+)"[^>]+>(?:\[)?(?P<title>[^\]<]+)(?:\]|<)'
else:
@@ -62,13 +62,13 @@ def peliculas(item):
def findvideos(item):
support.info()
logger.debug()
itemlist = []
matches = support.match(item, patron=r'filename: "(.*?)"').matches
for url in matches:
itemlist.append(item.clone(action="play", title=support.config.get_localized_string(30137), server='directo', url=host + url))
itemlist.append(item.clone(action="play", title=support.config.getLocalizedString(30137), server='directo', url=host + url))
return support.server(item, itemlist=itemlist)

View File

@@ -4,9 +4,8 @@
# ------------------------------------------------------------
import requests
from core import support, jsontools
from platformcode import logger, config
typo = support.typo
from core import support
from platformcode import logger
session = requests.Session()
host = support.config.get_channel_url()
@@ -24,8 +23,8 @@ def Dict(item):
@support.menu
def mainlist(item):
top = [('Dirette {bold}', ['', 'live']),
('Programmi {bullet bold tv}', ['', 'peliculas', 'programmi']),
top = [('Dirette {bullet bold}', ['', 'live']),
('Programmi {bullet bold tv}', ['', 'movies', 'programmi']),
('Generi {bullet bold tv}', ['', 'genres'])]
search = ''
@@ -33,30 +32,16 @@ def mainlist(item):
return locals()
def liveDict():
livedict = {}
for key in session.get(api + '/cms/routes/canali?decorators=viewingHistory&include=default', headers=headers).json()['included']:
if key['type'] == 'channel' and key.get('attributes',{}).get('hasLiveStream', '') and 'Free' in key.get('attributes',{}).get('packages', []):
title = key['attributes']['name']
livedict[title] = {}
livedict[title]['plot'] = key['attributes']['description']
livedict[title]['url'] = '{}/canali/{}'.format(host, key['attributes']['alternateId'])
livedict[title]['id'] = key['id']
return livedict
def search(item, text):
itemlist = []
item.args = 'search'
item.text = text
try:
itemlist = peliculas(item)
itemlist = movies(item)
except:
import sys
for line in sys.exc_info():
support.logger.error("%s" % line)
logger.error("%s" % line)
return itemlist
@@ -64,13 +49,19 @@ def search(item, text):
def live(item):
logger.debug()
itemlist =[]
for name, values in liveDict().items():
itemlist.append(item.clone(title=typo(name,'bold'), fulltitle=name, plot=values['plot'], url=values['url'], id=values['id'], action='play', forcethumb=True, no_return=True))
return support.thumb(itemlist, live=True)
for key in session.get(api + '/cms/routes/canali?decorators=viewingHistory&include=default', headers=headers).json()['included']:
if key['type'] == 'channel' and key.get('attributes',{}).get('hasLiveStream', '') and 'Free' in key.get('attributes',{}).get('packages', []):
title = key['attributes']['name']
plot = key['attributes']['description']
url = '{}/canali/{}'.format(host, key['attributes']['alternateId'])
_id = key['id']
itemlist.append(item.clone(title=title, fulltitle=title, plot=plot, url=url, id=_id, action='findvideos', forcethumb=True))
return support.thumb(itemlist, mode='live')
def genres(item):
item.action = 'peliculas'
item.action = 'movies'
itemlist = [
item.clone(title='Attualità e inchiesta', args='genere/attualita-e-inchiesta'),
item.clone(title='Beauty and style', args='genere/beauty-and-style'),
@@ -96,7 +87,7 @@ def genres(item):
return itemlist
def peliculas(item):
def movies(item):
logger.debug()
itemlist =[]
if 'search' in item.args:
@@ -116,14 +107,14 @@ def peliculas(item):
fanarts = [image['attributes']['src'] for image in images if len(key['relationships']['images']['data']) > 1 and image['id'] == key['relationships']['images']['data'][1]['id']]
fanart = fanarts[0] if fanarts else item.fanart
itemlist.append(
item.clone(title=typo(title,'bold'),
item.clone(title=title,
fulltitle=title,
plot=plot,
url=url,
programid=key['attributes']['alternateId'],
id=key['id'],
seasons=seasons,
action='episodios',
action='episodes',
thumbnail=thumb,
fanart=fanart,
contentType='tvshow'))
@@ -131,7 +122,7 @@ def peliculas(item):
return itemlist
def episodios(item):
def episodes(item):
logger.debug()
itemlist =[]
pdict = session.get(api + '/cms/routes/programmi/{}?decorators=viewingHistory&include=default'.format(item.programid), headers=headers).json()['included']
@@ -163,11 +154,11 @@ def episodios(item):
title = '{}x{:02d} - {}'.format(option['id'], episode['attributes']['episodeNumber'], episode['attributes']['name'])
plot = episode['attributes']['description']
itemlist.append(
item.clone(title=typo(title,'bold'),
item.clone(title=title,
fulltitle=title,
plot=plot,
id=episode['id'],
action='play',
action='findvideos',
contentType='episode',
season=option['id'],
episode=episode['attributes']['episodeNumber'],
@@ -177,6 +168,9 @@ def episodios(item):
if itemlist: itemlist.sort(key=lambda it: (int(it.season), int(it.episode)))
return itemlist
def findvideos(item):
logger.debug()
return support.server(item, itemlist=[item.clone(server='directo', action='play')])
def play(item):
if item.livefilter:
@@ -184,7 +178,7 @@ def play(item):
item.fulltitle = item.livefilter
item.forcethumb = True
item.no_return = True
support.thumb(item, live=True)
support.thumb(item, mode='live')
if item.contentType == 'episode': data = session.get('{}/playback/v2/videoPlaybackInfo/{}?usePreAuth=true'.format(api, item.id), headers=headers).json().get('data',{}).get('attributes',{})
else: data = session.get('{}/playback/v2/channelPlaybackInfo/{}?usePreAuth=true'.format(api, item.id), headers=headers).json().get('data',{}).get('attributes',{})
if data.get('protection', {}).get('drm_enabled',True):

View File

@@ -5,6 +5,6 @@
"active": true,
"thumbnail": "dreamsub.png",
"banner": "dreamsub.png",
"categories": ["anime", "vos"],
"categories": ["anime", "sub"],
"settings": []
}

View File

@@ -4,22 +4,21 @@
# ------------------------------------------------------------
from core import support
from platformcode import logger
host = support.config.get_channel_url()
headers = [['Referer', host]]
@support.menu
def mainlist(item):
support.info(item)
anime = ['/search?typeY=tv',
('Movie', ['/search?typeY=movie', 'peliculas', '', 'movie']),
('OAV', ['/search?typeY=oav', 'peliculas', '', 'tvshow']),
('Spinoff', ['/search?typeY=spinoff', 'peliculas', '', 'tvshow']),
('Movie', ['/search?typeY=movie', 'movies', '', 'movie']),
('OAV', ['/search?typeY=oav', 'movies', '', 'tvshow']),
('Spinoff', ['/search?typeY=spinoff', 'movies', '', 'tvshow']),
('Generi', ['','menu','Generi']),
('Stato', ['','menu','Stato']),
('Ultimi Episodi', ['', 'peliculas', ['last', 'episodiRecenti']]),
('Ultimi Aggiornamenti', ['', 'peliculas', ['last', 'episodiNuovi']])
('Ultimi Episodi', ['', 'movies', ['last', 'episodiRecenti']]),
('Ultimi Aggiornamenti', ['', 'movies', ['last', 'episodiNuovi']])
]
return locals()
@@ -28,14 +27,15 @@ def mainlist(item):
@support.scrape
def menu(item):
item.contentType = ''
action = 'peliculas'
action = 'movies'
patronBlock = r'<div class="filter-header"><b>%s</b>(?P<block>.*?)<div class="filter-box">' % item.args
patronMenu = r'<a class="[^"]+" data-state="[^"]+" (?P<other>[^>]+)>[^>]+></i>[^>]+></i>[^>]+></i>(?P<title>[^>]+)</a>'
if 'generi' in item.args.lower():
patronGenreMenu = patronMenu
def itemHook(item):
support.info(item.type)
for Type, ID in support.match(item.other, patron=r'data-type="([^"]+)" data-id="([^"]+)"').matches:
item.url = host + '/search?' + Type + 'Y=' + ID
return item
@@ -43,48 +43,48 @@ def menu(item):
def search(item, text):
support.info(text)
logger.debug(text)
text = text.replace(' ', '+')
item.url = host + '/search/' + text
item.args = 'search'
try:
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.info('search log:', line)
logger.error('search log:', line)
return []
def newest(categoria):
support.info(categoria)
def newest(category):
logger.debug(category)
item = support.Item()
try:
if categoria == "anime":
if category == "anime":
item.url = host
item.args = ['last', 'episodiNuovi']
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.logger.error("{0}".format(line))
logger.error("{0}".format(line))
return []
@support.scrape
def peliculas(item):
def movies(item):
# debug = True
anime = True
numerationEnabled = True
if 'movie' in item.url:
item.contentType = 'movie'
action = 'findvideos'
else:
item.contentType = 'tvshow'
action = 'episodios'
action = 'episodes'
if len(item.args) > 1 and item.args[0] == 'last':
patronBlock = r'<div id="%s"[^>]+>(?P<block>.*?)<div class="vistaDettagliata"' % item.args[1]
@@ -102,9 +102,9 @@ def peliculas(item):
@support.scrape
def episodios(item):
anime = True
pagination = 100
def episodes(item):
numerationEnabled = True
pagination = True
if item.data:
data = item.data
@@ -116,20 +116,19 @@ def episodios(item):
def findvideos(item):
itemlist = []
support.info()
# support.dbg()
logger.debug()
matches = support.match(item, patron=r'href="([^"]+)"', patronBlock=r'<div style="white-space: (.*?)<div id="main-content"')
if not matches.matches and item.contentType != 'episode':
item.data = matches.data
item.contentType = 'tvshow'
return episodios(item)
return episodes(item)
if 'vvvvid' in matches.data:
itemlist.append(item.clone(action="play", title='VVVVID', url=support.match(matches.data, patron=r'(http://www.vvvvid[^"]+)').match, server='vvvvid'))
else:
support.info('VIDEO')
logger.debug('VIDEO')
for url in matches.matches:
lang = url.split('/')[-2]
if 'ita' in lang.lower():

View File

@@ -11,15 +11,15 @@ host = config.get_channel_url()
@support.menu
def mainlist(item):
docu = [('Documentari {bullet bold}',('/elenco-documentari','peliculas')),
('Categorie {submenu}',('','menu')),
('Cerca... {bullet bold}',('','search')),]
docu = [('Documentari {bullet bold}',('/elenco-documentari','movies')),
('Categorie {submenu documentary}',('','menu')),
('Cerca... {bullet bold documentary}',('','search')),]
return locals()
@support.scrape
def menu(item):
action = 'peliculas'
action = 'movies'
patronMenu = r'<li class="menu-item menu-item-type-taxonomy[^>]+>\s*<a href="(?P<url>[^"]+)"[^>]+>(?P<title>[^<]+)<'
def fullItemlistHook(itemlist):
item_list = []
@@ -32,28 +32,28 @@ def menu(item):
return itemlist
return locals()
def newest(categoria):
support.info()
def newest(category):
logger.debug()
item = Item()
try:
if categoria == "documentales":
if category == "documentales":
item.url = host + "/elenco-documentari"
item.action = "peliculas"
return peliculas(item)
item.action = "movies"
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.logger.error("{0}".format(line))
logger.error("{0}".format(line))
return []
def search(item, texto):
support.info(texto)
logger.debug(texto)
item.url = host + "/?s=" + texto
try:
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
@@ -63,7 +63,7 @@ def search(item, texto):
@support.scrape
def peliculas(item):
def movies(item):
blacklist = ['GUIDA PRINCIPIANTI Vedere film e documentari streaming gratis', 'Guida Dsda']
data = support.match(item).data
# debug =True
@@ -83,14 +83,14 @@ def peliculas(item):
title = support.re.sub(r'(?:[Ss]erie\s*|[Ss]treaming(?:\s*[Dd][Aa])?\s*|[Cc]ollezione\s*|[Rr]accolta\s*|[Dd]ocumentari(?:o)?\s*)?','',item.fulltitle).strip()
if 'serie' in item.fulltitle.lower():
item.contentType = 'tvshow'
item.action = 'episodios'
item.action = 'episodes'
item.contentSerieName = title
item.contentTitle = ''
elif 'collezion' in item.fulltitle.lower() or \
'raccolt' in item.fulltitle.lower() or \
'filmografia' in item.fulltitle.lower():
item.args = 'collection'
item.action = 'peliculas'
item.action = 'movies'
item.contentTitle = title
item.contentSerieName = ''
else:
@@ -113,7 +113,7 @@ def peliculas(item):
return locals()
@support.scrape
def episodios(item):
def episodes(item):
html = support.match(item, patron=r'class="title-episodio">(\d+x\d+)')
data = html.data
if html.match:
@@ -133,7 +133,7 @@ def episodios(item):
def findvideos(item):
support.info()
logger.debug()
if item.args == 'raccolta' or item.contentType == 'episode':
return support.server(item, item.url)
else:

View File

@@ -5,6 +5,6 @@
"language": ["ita","sub-ita"],
"thumbnail": "eurostreaming.png",
"banner": "eurostreaming.png",
"categories": ["tvshow","anime","vos"],
"categories": ["tvshow","anime","sub"],
"settings": []
}

View File

@@ -4,8 +4,9 @@
# by Greko
# ------------------------------------------------------------
from core import httptools, support
from core import support
from core.item import Item
from platformcode import logger
# def findhost(url):
# permUrl = httptools.downloadpage(url, follow_redirects=False, only_headers=True).headers
@@ -17,25 +18,24 @@ headers = [['Referer', host]]
@support.menu
def mainlist(item):
support.info()
tvshow = []
anime = ['/category/anime-cartoni-animati/']
mix = [('Aggiornamenti {bullet bold} {TV}', ['/aggiornamento-episodi/', 'peliculas', 'newest']),
('Archivio {bullet bold} {TV}', ['/category/serie-tv-archive/', 'peliculas'])]
mix = [('Aggiornamenti {bullet bold} {TV}', ['/aggiornamento-episodi/', 'movies', 'newest']),
('Archivio {bullet bold} {TV}', ['/category/serie-tv-archive/', 'movies'])]
search = ''
return locals()
@support.scrape
def peliculas(item):
def movies(item):
# debug = True
action = 'episodios'
action = 'episodes'
if item.args == 'newest':
item.contentType = 'episode'
patron = r'<span class="serieTitle" style="font-size:20px">(?P<title>[^<]+) \s*<a href="(?P<url>[^"]+)"[^>]*>\s+?(?P<episode>\d+[×x]\d+-\d+|\d+[×x]\d+) (?P<title2>[^<\(]+)\s?\(?(?P<lang>SUB ITA)?\)?</a>'
pagination = ''
pagination = True
else:
patron = r'<div class="post-thumb">.*?<img src="(?P<thumb>[^"]+)".*?><a href="(?P<url>[^"]+)"[^>]+>(?P<title>.+?)\s?(?: Serie Tv)?\s?\(?(?P<year>\d{4})?\)?<\/a><\/h2>'
patronNext=r'a class="next page-numbers" href="?([^>"]+)">Avanti &raquo;</a>'
@@ -43,13 +43,13 @@ def peliculas(item):
return locals()
@support.scrape
def episodios(item):
def episodes(item):
# debug = True
data = support.match(item, headers=headers).data
if 'clicca qui per aprire' in data.lower(): data = support.match(support.match(data, patron=r'"go_to":"([^"]+)"').match.replace('\\',''), headers=headers).data
elif 'clicca qui</span>' in data.lower(): data = support.match(support.match(data, patron=r'<h2 style="text-align: center;"><a href="([^"]+)">').match, headers=headers).data
patronBlock = r'</span>(?P<block>[a-zA-Z\s]+\d+(.+?)?(?:\()?(?P<lang>ITA|SUB ITA)(?:\))?.*?)</div></div>'
patron = r'(?P<season>\d+)&#\d+;(?P<episode>\d+(?:-\d+)?)\s*(?:</strong>|<em>)?\s*(?P<title>.*?)(?:–|-.+?-|–.+?–|–|em|.)?(?:/em.*?)?(?:<a (?P<other>.*?))?<br />'
patron = r'(?P<season>\d+)&#\d+;(?P<episode>\d+(?:-\d+)?)\s*(?:</strong>|<em>)?\s*(?P<title>.*?)(?:–|-.+?-|–.+?–|–|em|.)?(?:/em.*?)?(?:<a (?P<data>.*?))<br />'
def itemHook(i):
i.url = item.url
@@ -58,25 +58,25 @@ def episodios(item):
return locals()
def search(item, texto):
support.info()
def search(item, text):
logger.debug(text)
item.url = "%s/?s=%s" % (host, texto)
item.url = "%s/?s=%s" % (host, text)
item.contentType = 'tvshow'
try:
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.info(line)
logger.error(line)
return []
def newest(categoria):
support.info()
def newest(category):
logger.debug()
itemlist = []
item = Item()
@@ -84,18 +84,18 @@ def newest(categoria):
item.args = 'newest'
try:
item.url = "%s/aggiornamento-episodi/" % host
item.action = "peliculas"
itemlist = peliculas(item)
item.action = "movies"
itemlist = movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.info("{0}".format(line))
logger.error("{0}".format(line))
return []
return itemlist
def findvideos(item):
support.info()
return support.server(item, item.other)
logger.debug()
return support.server(item, item.data)

View File

@@ -5,7 +5,7 @@
"active": false,
"thumbnail": "fastsubita.png",
"banner": "fastsubita.png",
"categories": ["tvshow", "vos"],
"not_active": ["include_in_newest_peliculas", "include_in_newest_anime"],
"categories": ["tvshow", "sub"],
"not_active": ["include_in_newest_movie", "include_in_newest_anime"],
"settings": []
}

View File

@@ -4,7 +4,7 @@
# ------------------------------------------------------------
"""
Su questo canale, nella categoria 'Ricerca Globale'
Su questo canale, nella category 'Ricerca Globale'
non saranno presenti le voci 'Aggiungi alla Videoteca'
e 'Scarica Film'/'Scarica Serie', dunque,
la loro assenza, nel Test, NON dovrà essere segnalata come ERRORE.
@@ -16,10 +16,9 @@
- SOLO SUB-ITA
"""
from core import support, httptools, scrapertools
from core import support, httptools
from core.item import Item
from core.support import info
from platformcode import config
from platformcode import config, logger
host = config.get_channel_url()
headers = [['Referer', host]]
@@ -29,7 +28,7 @@ headers = [['Referer', host]]
def mainlist(item):
Tvshow = [
('Aggiornamenti', ['', 'peliculas', 'update']),
('Aggiornamenti', ['', 'movies', 'update']),
('Cerca... {bold}{TV}', ['', 'search'])
]
@@ -39,27 +38,25 @@ def mainlist(item):
@support.scrape
def peliculas(item):
support.info(item)
# support.dbg()
def movies(item):
deflang = 'Sub-ITA'
# è una singola pagina con tutti gli episodi
if item.grouped and not support.scrapertools.find_single_match(item.url, '-[0-9]+x[0-9]+-'):
item.grouped = False
return episodios_args(item)
return episodes_args(item)
# ogni puntata è un articolo a se
if item.fulltitle:
item.url = host + '?s=' + item.fulltitle
actLike = 'episodios'
actLike = 'episodes'
action = 'findvideos'
blacklist = ['']
if item.args == 'genres':
patronBlock = r'<h4 id="mctm1-.">'+item.fulltitle+'</h4>(?P<block>.+?)</div>'
patron = r'[^>]+>[^>]+>.+?href="(?P<url>[^"]+)[^>]>(?P<title>[^<]+)\s<'
action = 'episodios'
action = 'episodes'
elif item.args == 'search':
group = True
patronBlock = r'</header>(?P<block>.*?)</main>'
@@ -67,7 +64,7 @@ def peliculas(item):
else:
# è una singola pagina con tutti gli episodi
if item.args != 'update' and not support.scrapertools.find_single_match(item.url, '-[0-9]+x[0-9]+-'):
return episodios_args(item)
return episodes_args(item)
patron = r'<div class="featured-thumb"> +<a href="(?P<url>[^"]+)" title="(?P<title>[^[]+)\[(?P<episode>\d+&#215;\d+)?'
patronBlock = r'<main id="main"[^>]+>(?P<block>.*?)<div id="secondary'
@@ -81,9 +78,8 @@ def peliculas(item):
return locals()
def episodios_args(item):
actLike = 'episodios'
# support.dbg()
def episodes_args(item):
actLike = 'episodes'
deflang = 'Sub-ITA'
action = 'findvideos'
@@ -96,17 +92,15 @@ def episodios_args(item):
@support.scrape
def episodios(item):
support.info(item)
return episodios_args(item)
def episodes(item):
return episodes_args(item)
@support.scrape
def genres(item):
support.info()
#support.dbg()
logger.debug()
action = 'peliculas'
action = 'movies'
patronBlock = r'<div id="mcTagMapNav">(?P<block>.+?)</div>'
patron = r'<a href="(?P<url>[^"]+)">(?P<title>.+?)</a>'
@@ -120,47 +114,47 @@ def genres(item):
def search(item, text):
support.info('search', item)
logger.debug('search', text)
text = text.replace(' ', '+')
item.url = host + '?s=' + text
try:
item.args = 'search'
item.contentType = 'tvshow'
return peliculas(item)
return movies(item)
# Se captura la excepcion, para no interrumpir al buscador global si un canal falla
except:
import sys
for line in sys.exc_info():
info('search log:', line)
logger.error('search log:', line)
return []
def newest(categoria):
support.info('newest ->', categoria)
def newest(category):
logger.debug('newest ->', category)
itemlist = []
item = Item()
if categoria == 'series':
if category == 'tvshow':
try:
item.contentType = 'tvshow'
item.args = 'newest'
item.url = host
item.action = 'peliculas'
itemlist = peliculas(item)
item.action = 'movies'
itemlist = movies(item)
if itemlist[-1].action == 'peliculas':
if itemlist[-1].action == 'movies':
itemlist.pop()
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.info('newest log: ', line)
logger.error('newest log: ', line)
return []
return itemlist
def findvideos(item):
support.info('findvideos ->', item)
logger.debug('findvideos ->', item)
patron = r'<a href="([^"]+)">'
itemlist = []
@@ -176,14 +170,14 @@ def findvideos(item):
resp = httptools.downloadpage(scrapedurl, follow_redirects=False)
data += resp.headers.get("location", "") + '\n'
elif not support.scrapertools.find_single_match(item.url, '-[0-9]+x[0-9]+-'):
return episodios(item)
return episodes(item)
else:
patronBlock = '<div class="entry-content">(?P<block>.*)<footer class="entry-footer">'
html = support.match(item, patron=patron, patronBlock=patronBlock, headers=headers)
matches = html.matches
data= html.data
if item.args != 'episodios':
if item.args != 'episodes':
item.infoLabels['mediatype'] = 'episode'
for scrapedurl in matches:
if 'is.gd' in scrapedurl:
@@ -206,7 +200,7 @@ def findvideos(item):
# contentType='tvshow',
# contentSerieName=series,
# url=host+"/serietv/"+series,
# action='episodios',
# action='episodes',
# contentTitle=titles,
# plot = "Vai alla Serie " + titles + " con tutte le puntate",
# ))

View File

@@ -6,6 +6,6 @@
"thumbnail": "film4k.png",
"banner": "film4k.png",
"categories": ["tvshow", "movie", "anime"],
"not_active": ["include_in_newest_peliculas", "include_in_newest_anime", "include_in_newest_series"],
"not_active": ["include_in_newest_movie", "include_in_newest_anime", "include_in_newest_tvshow"],
"settings": []
}

View File

@@ -20,11 +20,11 @@ def mainlist(item):
('Qualità', ['', 'menu', 'quality']),
('Generi', ['movies', 'menu', 'genres']),
('Anno', ['movies', 'menu', 'releases']),
('Più popolari', ['trending/?get=movies', 'peliculas']),
('Più votati', ['ratings/?get=movies', 'peliculas'])]
('Più popolari', ['trending/?get=movies', 'movies']),
('Più votati', ['ratings/?get=movies', 'movies'])]
tvshow = ['/tvshows',
('Più popolari', ['trending/?get=tv', 'peliculas']),
('Più votati', ['ratings/?get=tv', 'peliculas'])]
('Più popolari', ['trending/?get=tv', 'movies']),
('Più votati', ['ratings/?get=tv', 'movies'])]
return locals()
@@ -41,14 +41,14 @@ def search(item, text):
def peliculas(item):
def movies(item):
if 'anime' in item.url:
return support.dooplay_peliculas(item, True)
return support.dooplay_movies(item, True)
else:
return support.dooplay_peliculas(item, False)
return support.dooplay_movies(item, False)
def episodios(item):
def episodes(item):
itemlist = support.dooplay_get_episodes(item)
return itemlist
@@ -72,7 +72,7 @@ def findvideos(item):
@support.scrape
def menu(item):
action = 'peliculas'
action = 'movies'
if item.args in ['genres','releases']:
patronBlock = r'<nav class="' + item.args + r'">(?P<block>.*?)</nav'
patronMenu= r'<a href="(?P<url>[^"]+)"[^>]*>(?P<title>[^<]+)<'

View File

@@ -8,7 +8,7 @@
"categories": ["movie","tvshow"],
"settings": [
{
"id": "include_in_newest_peliculas",
"id": "include_in_newest_movie",
"type": "bool",
"label": "@70727",
"default": false,
@@ -16,7 +16,7 @@
"visible": false
},
{
"id": "include_in_newest_series",
"id": "include_in_newest_tvshow",
"type": "bool",
"label": "@70727",
"default": false,

View File

@@ -15,7 +15,7 @@ import re
from core import httptools, support
from core.item import Item
from platformcode import config
from platformcode import config, logger
host = config.get_channel_url()
@@ -28,7 +28,7 @@ headers = [['Referer', host]]
@support.menu
def mainlist(item):
film = [
('Al Cinema ', ['', 'peliculas', 'cinema']),
('Al Cinema ', ['', 'movies', 'cinema']),
('Categorie', ['', 'genres', 'genres']),
]
@@ -40,8 +40,7 @@ def mainlist(item):
return locals()
@support.scrape
def peliculas(item):
support.info()
def movies(item):
if item.args == 'search':
action = ''
@@ -62,11 +61,11 @@ def peliculas(item):
data = re.sub('\n|\t', ' ', data)
patron = r'<div class="cnt">\s.*?src="([^"]+)".+?title="((?P<title>.+?)(?:[ ]\[(?P<lang>Sub-ITA|SUB-ITA)\])?(?:[ ]\[(?P<quality>.*?)\])?(?:[ ]\((?P<year>\d+)\))?)"\s*[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>\s+<a href="(?P<url>[^"]+)"'
patronBlock = r'<div class="container">(?P<block>.*?)</main>'
pagination = ''
pagination = True
patronNext = '<a class="page-link" href="([^"]+)">>>'
else:
action = 'episodios'
action = 'episodes'
patron = r'<div class="cnt">\s.*?src="([^"]+)".+?title="((?P<title>.+?)(?:[ ]\[(?P<lang>Sub-ITA|SUB-ITA)\])?(?:[ ]\[(?P<quality>.*?)\])?(?:[ ]\((?P<year>\d+)\))?)"\s*[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>\s+<a href="(?P<url>[^"]+)"'
## if item.args == 'search':
## patron = r'<div class="cnt">.*?src="([^"]+)".+?[^>]+>[^>]+>[^>]+>\s+((?P<title>.+?)(?:[ ]\[(?P<lang>Sub-ITA|SUB-ITA)\])?(?:[ ]\[(?P<quality>.*?)\])?(?:[ ]\((?P<year>\d+)\))?)\s+<[^>]+>[^>]+>[^>]+>[ ]<a href="(?P<url>[^"]+)"'
@@ -75,7 +74,7 @@ def peliculas(item):
def itemHook(item):
if item.args == 'search':
if 'series' in item.url:
item.action = 'episodios'
item.action = 'episodes'
item.contentType = 'tvshow'
else:
item.action = 'findvideos'
@@ -87,9 +86,7 @@ def peliculas(item):
@support.scrape
def episodios(item):
support.info()
def episodes(item):
action = 'findvideos'
patronBlock = r'<div class="row">(?P<block>.*?)<section class="main-content">'
patron = r'href="(?P<url>.*?)">(?:.+?)?\s+S(?P<season>\d+)\s\-\sEP\s(?P<episode>\d+)[^<]+<'
@@ -98,15 +95,13 @@ def episodios(item):
@support.scrape
def genres(item):
support.info()
if item.contentType == 'movie':
action = 'peliculas'
action = 'movies'
patron = r'<a href="(?P<url>.*?)">(?P<title>.*?)<'
patronBlock = r'CATEGORIES.*?<ul>(?P<block>.*?)</ul>'
else:
item.contentType = 'tvshow'
action = 'peliculas'
action = 'movies'
blacklist = ['Al-Cinema']
patron = r'<a href="(?P<url>.*?)">(?P<title>.*?)<'
patronBlock = r'class="material-button submenu-toggle"> SERIE TV.*?<ul>.*?</li>(?P<block>.*?)</ul>'
@@ -115,42 +110,42 @@ def genres(item):
def search(item, text):
support.info('search', item)
logger.debug('search', text)
text = text.replace(' ', '+')
item.url = host + '/search/?s=' + text
try:
item.args = 'search'
return peliculas(item)
return movies(item)
# Se captura la excepcion, para no interrumpir al buscador global si un canal falla
except:
import sys
for line in sys.exc_info():
support.info('search log:', line)
logger.error('search log:', line)
return []
def newest(categoria):
support.info('newest ->', categoria)
def newest(category):
logger.debug('newest ->', category)
itemlist = []
item = Item()
try:
if categoria == 'peliculas':
if category == 'movie':
item.url = host
item.contentType = 'movie'
item.action = 'peliculas'
itemlist = peliculas(item)
item.action = 'movies'
itemlist = movies(item)
if itemlist[-1].action == 'peliculas':
if itemlist[-1].action == 'movies':
itemlist.pop()
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.info({0}.format(line))
logger.error({0}.format(line))
return []
return itemlist
def findvideos(item):
support.info()
logger.debug()
return support.server(item)

View File

@@ -3,14 +3,12 @@
# Canale per filmpertutti.py
# ------------------------------------------------------------
from core import httptools, support
from core import support
from core.item import Item
from platformcode import config
from platformcode import config, logger
def findhost(url):
page = httptools.downloadpage(url).data
url = support.scrapertools.find_single_match(page, 'Il nuovo indirizzo di FILMPERTUTTI è ?<a href="([^"]+)')
return url
return support.match(url, patron=r'Il nuovo indirizzo di FILMPERTUTTI è ?<a href="([^"]+)').match
host = config.get_channel_url(findhost)
headers = [['Referer', host]]
@@ -24,7 +22,7 @@ def mainlist(item):
]
tvshow = ['/category/serie-tv/',
('Aggiornamenti', ['/aggiornamenti-serie-tv/', 'peliculas', 'newest']),
('Aggiornamenti', ['/aggiornamenti-serie-tv/', 'movies', 'newest']),
('Per Lettera', ['/category/serie-tv/', 'genres', 'lettersS'])
]
@@ -33,11 +31,7 @@ def mainlist(item):
@support.scrape
def peliculas(item):
support.info()
# debug = True
#debugBlock = True
# support.dbg()
def movies(item):
if item.args != 'newest':
patronBlock = r'<ul class="posts">(?P<block>.*)<\/ul>'
@@ -48,13 +42,13 @@ def peliculas(item):
patron = r'<li>\s?<a href="(?P<url>[^"]+)" data-thumbnail="(?P<thumb>[^"]+)">.*?<div class="title[^"]*">(?P<title>.+?)(?:\s\[(?P<quality>HD)\])?<\/div>\s*<div class="episode[^"]*"[^>]+>(?P<episode>[^<(]+)(?:\((?P<lang>[a-zA-Z\-]+)\))?'
if item.args == 'search':
action = 'select'
action = 'check'
elif item.contentType == 'tvshow':
action = 'episodios'
action = 'episodes'
elif item.contentType == 'movie':
action ='findvideos'
else:
action = 'select'
action = 'check'
def itemHook(item):
item.title = item.title.replace(' - La Serie', '')
@@ -63,12 +57,12 @@ def peliculas(item):
return locals()
@support.scrape
def episodios(item):
# debug = True
def episodes(item):
# debug=True
data = support.match(item.url, headers=headers).data
if 'accordion-item' in data:
patronBlock = r'<span class="season[^>]*>\d+[^>]+>[^>]+>[^>]+>[^>]+>\D*(?:STAGIONE|Stagione)[ -]+(?P<lang>[a-zA-Z\- ]+)[^<]*</span>(?P<block>.*?)<div id="(?:season|disqus)'
patron = r'<img src="(?P<thumb>[^"]+)">.*?<li class="season-no">(?P<season>\d+)(?:&#215;|×|x)(?P<episode>\d+)[^<0-9]*<\/li>(?P<data>.*?javascript:;">(?P<title>[^<]+).*?</tbody>)'
patron = r'data-src="(?P<thumb>[^"]+)"[^>]*>.*?<li class="season-no">(?P<season>\d+)(?:&#215;|×|x)(?P<episode>\d+)[^<0-9]*<\/li>(?P<data>.*?javascript:;">(?P<title>[^<]+).*?</tbody>)'
else:
patronBlock = r'(?:STAGIONE|Stagione)(?:<[^>]+>)?\s*(?:(?P<lang>[A-Za-z- ]+))?(?P<block>.*?)(?:&nbsp;|<strong>|<div class="addtoany)'
patron = r'(?:/>|p>)\s*(?P<season>\d+)(?:&#215;|×|x)(?P<episode>\d+)[^<]+(?P<data>.*?)(?:<br|</p)'
@@ -90,64 +84,64 @@ def genres(item):
else:
item.contentType = 'tvshow'
action = 'peliculas'
action = 'movies'
patronBlock = r'<select class="cats">(?P<block>.*?)<\/select>'
patronMenu = r'<option data-src="(?P<url>[^"]+)">(?P<title>[^<]+)<\/option>'
patronGenreMenu = r'<option data-src="(?P<url>[^"]+)">(?P<title>[^<]+)<\/option>'
return locals()
def select(item):
support.info()
def check(item):
logger.debug()
patron=r'class="taxonomy category"\s*><span property="name">([^>]+)</span></a><meta property="position" content="2">'
block = support.match(item.url, patron=patron,headers=headers).match
if block.lower() != 'film':
support.info('select = ### è una serie ###')
logger.debug('### è una Serie ###')
item.contentType='tvshow'
return episodios(item)
return episodes(item)
else:
support.info('select = ### è un movie ###')
logger.debug(' ### è un Film ###')
item.contentType='movie'
return findvideos(item)
def search(item, texto):
support.info()
logger.debug()
item.url = host + "/?s=" + texto
item.args = 'search'
try:
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.info("%s" % line)
logger.error("%s" % line)
return []
def newest(categoria):
support.info()
def newest(category):
logger.debug()
itemlist = []
item = Item()
try:
if categoria == "peliculas":
if category == "movie":
item.url = host + "/category/film/"
item.action = "peliculas"
item.action = "movies"
item.extra = "movie"
item.contentType = 'movie'
itemlist = peliculas(item)
itemlist = movies(item)
else:
item.url = host + "/aggiornamenti-serie-tv/"
item.action = "peliculas"
item.action = "movies"
item.args = "newest"
item.contentType = 'tvshow'
itemlist = peliculas(item)
itemlist = movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.info("{0}".format(line))
logger.error("{0}".format(line))
return []
return itemlist

View File

@@ -11,7 +11,6 @@
# possibilità di miglioramento: inserire menu per genere - lista serie tv e gestire le novità
from core import support
from core.support import info
from platformcode import logger, config
host = config.get_channel_url()
@@ -29,20 +28,20 @@ def mainlist(item):
@support.scrape
def list(item):
patronMenu = r'<a title="(?P<title>[^"]+)" href="(?P<url>[^"]+)'
action = 'peliculas'
action = 'movies'
return locals()
@support.scrape
def peliculas(item):
def movies(item):
patron = r'<div class="mlnh-thumb"><a href="(?P<url>[^"]+).*?title="(?P<title>[^"]+).*?src="(?P<thumb>[^"]+).*?hdn">(?P<year>[0-9]{4})'
patronNext = 'pagenavi.*?<span>.</span>.*?<a href="([^"]+)'
action = 'episodios'
action = 'episodes'
return locals()
@support.scrape
def episodios(item):
def episodes(item):
patronBlock = r'<div class="tab-pane fade" id="season-(?P<season>.)"(?P<block>.*?)</div>'
patron = r'<a href="#" allowfullscreen data-link="(?P<url>[^"]+).*?title="(?P<title>[^"]+)(?P<lang>[sS][uU][bB]-?[iI][tT][aA])?\s*">(?P<episode>[^<]+)'
action = 'findvideos'
@@ -51,17 +50,17 @@ def episodios(item):
def search(item, text):
support.info('search', text)
logger.debug('search', text)
item.contentType = 'tvshow'
itemlist = []
text = text.replace(' ', '+')
item.url = host + '/index.php?story=%s&do=search&subaction=search' % (text)
try:
return peliculas(item)
return movies(item)
except:
import sys
for line in sys.exc_info():
info('search log:', line)
logger.error('search log:', line)
return []

View File

@@ -2,14 +2,14 @@
"id": "guardaserieclick",
"name": "GuardaSerie.click",
"active": true,
"language": ["ita", "vos"],
"language": ["ita", "sub-ita"],
"thumbnail": "guardaserieclick.png",
"bannermenu": "guardaserieclick.png",
"categories": ["tvshow", "anime"],
"not_active": ["include_in_newest_peliculas", "include_in_newest_anime"],
"not_active": ["include_in_newest_movie", "include_in_newest_anime"],
"settings": [
{
"id": "include_in_newest_peliculas",
"id": "include_in_newest_movie",
"type": "bool",
"label": "@70727",
"default": false,

View File

@@ -16,8 +16,7 @@
from core import support
from core.item import Item
from platformcode import config
from core.support import info
from platformcode import config, logger
host = config.get_channel_url()
headers = [['Referer', host]]
@@ -26,28 +25,28 @@ headers = [['Referer', host]]
@support.menu
def mainlist(item):
tvshow = ['',
('Aggiornamenti', ['', 'peliculas', 'update']),
('Aggiornamenti', ['', 'movies', 'update']),
('Generi', ['', 'genres', 'genres']),
('News Sub-ITA', ['', 'peliculas', 'ined']),
('Anime/Cartoni', ["/category/animazione/", 'peliculas', 'genres'])
('News Sub-ITA', ['', 'movies', 'ined']),
('Anime/Cartoni', ["/category/animazione/", 'movies', 'genres'])
]
return locals()
##@support.scrape
##def peliculas(item):
##def movies(item):
#### import web_pdb; web_pdb.set_trace()
## info('peliculas ->\n', item)
## logger.debug('movies ->\n', item)
##
## action = 'episodios'
## action = 'episodes'
## block = r'(?P<block>.*?)<div\s+class="btn btn-lg btn-default btn-load-other-series">'
##
## if item.args == 'ined':
## deflang = 'SUB-ITA'
## patronBlock = r'<span\s+class="label label-default label-title-typology">'+block
## patron = r'<a href="(?P<url>[^"]+)".*?>\s<img\s.*?src="(?P<thumb>[^"]+)"\s/>[^>]+>[^>]+>\s[^>]+>\s(?P<year>\d{4})?\s.+?class="strongText">(?P<title>.+?)<'
## pagination = 25
## pagination = True
## elif item.args == 'update':
## patronBlock = r'<div\s+class="container-fluid greybg title-serie-lastep title-last-ep fixed-title-wrapper containerBottomBarTitle">'+block
## patron = r'<a(?: rel="[^"]+")? href="(?P<url>[^"]+)"(?: class="[^"]+")?>[ ]<img class="[^"]+"[ ]title="[^"]+"[ ]alt="[^"]+"[ ]src="(?P<thumb>[^"]+)"[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>(?P<episode>\d+.\d+)[ ]\((?P<lang>[a-zA-Z\-]+)[^<]+<[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>(?P<title>[^<]+)<'
@@ -59,25 +58,25 @@ def mainlist(item):
## elif item.args == 'nolost':
## patronBlock = r'<h2 class="title-typology styck-top" meta-class="title-serie-danonperd">'+block
## patron = r'<a href="(?P<url>[^"]+)".*?>\s<img\s.*?src="(?P<thumb>[^"]+)"\s/>[^>]+>[^>]+>\s[^>]+>\s(?P<year>\d{4})?\s.+?class="strongText">(?P<title>.+?)<'
## pagination = 25
## pagination = True
## elif item.args == 'classic':
## patronBlock = r'<h2 class="title-typology styck-top" meta-class="title-serie-classiche">'+block
## patron = r'<a href="(?P<url>[^"]+)".*?>\s<img\s.*?src="(?P<thumb>[^"]+)"\s/>[^>]+>[^>]+>\s[^>]+>\s(?P<year>\d{4})?\s.+?class="strongText">(?P<title>.+?)<'
## pagination = 25
## pagination = True
## else:
## patronBlock = r'<div\s+class="container container-title-serie-new container-scheda" meta-slug="new">'+block
## patron = r'<a href="(?P<url>[^"]+)".*?>\s<img\s.*?src="(?P<thumb>[^"]+)"\s/>[^>]+>[^>]+>\s[^>]+>\s(?P<year>\d{4})?\s.+?class="strongText">(?P<title>.+?)<'
## pagination = 25
## pagination = True
##
## debug = True
## return locals()
@support.scrape
def peliculas(item):
def movies(item):
## import web_pdb; web_pdb.set_trace()
info('peliculas ->\n', item)
logger.debug('movies ->\n', item)
action = 'episodios'
action = 'episodes'
blacklist = ['DMCA']
if item.args == 'genres' or item.args == 'search':
@@ -91,36 +90,36 @@ def peliculas(item):
else:
end_block = r'(?P<block>.*?)<div\s+class="btn btn-lg btn-default btn-load-other-series">'
patron = r'<a href="(?P<url>[^"]+)".*?>\s<img\s.*?src="(?P<thumb>[^"]+)"\s/>[^>]+>[^>]+>\s[^>]+>\s(?P<year>\d{4})?\s.+?class="strongText">(?P<title>.+?)<'
pagination = 25
pagination = True
if item.args == 'ined':
deflang = 'SUB-ITA'
patronBlock = r'<span\s+class="label label-default label-title-typology">' + end_block
## patron = r'<a href="(?P<url>[^"]+)".*?>\s<img\s.*?src="(?P<thumb>[^"]+)"\s/>[^>]+>[^>]+>\s[^>]+>\s(?P<year>\d{4})?\s.+?class="strongText">(?P<title>.+?)<'
## pagination = 25
## pagination = True
elif item.args == 'update':
patronBlock = r'<div\s+class="container-fluid greybg title-serie-lastep title-last-ep fixed-title-wrapper containerBottomBarTitle">' + end_block
patron = r'href="(?P<url>[^"]+)".*?>\s<img\s.*?src="(?P<thumb>[^"]+)"\s/>[^>]+>[^>]+>\s[^>]+>.+?class="strongText">(?P<title>.+?)<'
# elif item.args == 'nolost':
# patronBlock = r'<h2 class="title-typology styck-top" meta-class="title-serie-danonperd">' + end_block
# pagination = 25
# pagination = True
# elif item.args == 'classic':
# patronBlock = r'<h2 class="title-typology styck-top" meta-class="title-serie-classiche">' + end_block
## patron = r'<a href="(?P<url>[^"]+)".*?>\s<img\s.*?src="(?P<thumb>[^"]+)"\s/>[^>]+>[^>]+>\s[^>]+>\s(?P<year>\d{4})?\s.+?class="strongText">(?P<title>.+?)<'
## pagination = 25
## pagination = True
## elif item.args == 'anime':
##
else:
patronBlock = r'<div\s+class="container container-title-serie-new container-scheda" meta-slug="new">' + end_block
## patron = r'<a href="(?P<url>[^"]+)".*?>\s<img\s.*?src="(?P<thumb>[^"]+)"\s/>[^>]+>[^>]+>\s[^>]+>\s(?P<year>\d{4})?\s.+?class="strongText">(?P<title>.+?)<'
## pagination = 25
## pagination = True
# support.regexDbg(item, patronBlock, headers)
# debug = True
return locals()
@support.scrape
def episodios(item):
info()
def episodes(item):
logger.debug()
action = 'findvideos'
patron = r'<div class="number-episodes-on-img">\s?\d+.\d+\s?(?:\((?P<lang>[a-zA-Z\-]+)\))?</div>.+?(?:<span class="pull-left bottom-year">(?P<title2>[^<]+)<[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>(?P<plot>[^<]+)<[^>]+>[^>]+>[^>]+>\s?)?<span(?: meta-nextep="[^"]+")? class="[^"]+" meta-serie="(?P<title>[^"]+)" meta-stag="(?P<season>\d+)" meta-ep="(?P<episode>\d+)" meta-embed="(?P<url>[^>]+)">'
@@ -136,9 +135,9 @@ def episodios(item):
@support.scrape
def genres(item):
info()
logger.debug()
action = 'peliculas'
action = 'movies'
patronMenu = r'<li>\s<a\shref="(?P<url>[^"]+)"[^>]+>(?P<title>[^<]+)</a></li>'
patron_block = r'<ul\sclass="dropdown-menu category">(?P<block>.*?)</ul>'
# debug = True
@@ -146,42 +145,42 @@ def genres(item):
def search(item, text):
info(text)
item.url = host + "/?s=" + text
logger.debug(text)
item.url = host + "/search/" + text
item.contentType = 'tvshow'
item.args = 'search'
try:
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
info("%s" % line)
logger.error("%s" % line)
return []
def newest(categoria):
info()
def newest(category):
logger.debug()
itemlist = []
item = Item()
item.contentType = 'tvshow'
item.args = 'update'
try:
if categoria == "series":
if category == 'tvshow':
item.url = host
item.action = "peliculas"
itemlist = peliculas(item)
item.action = "movies"
itemlist = movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
info("{0}".format(line))
logger.error("{0}".format(line))
return []
return itemlist
def findvideos(item):
info('--->', item)
logger.debug('--->', item)
return support.server(item, item.url)

View File

@@ -10,9 +10,9 @@
# possibilità di miglioramento: gestire le novità (sezione Ultimi episodi sul sito)
from core.support import info
from core import support
from platformcode import config
from platformcode import config, logger
host = config.get_channel_url()
headers = [['Referer', host]]
@@ -26,34 +26,34 @@ def mainlist(item):
return locals()
@support.scrape
def peliculas(item):
def movies(item):
patronBlock = r'movies-list movies-list-full(?P<block>.*?)footer>'
patron = r'<div data-movie-id[^>]+>\s*<a href="(?P<url>[^"]+)"[^>]+>[^>]+>[^>]+><img src="(?P<thumbnail>[^"]+)[^>]+>[^>]+>[^>]+>[^>]+>(?P<title>[^<]+).*?jt-info[^>]+>[^:]+:\s*(?P<rating>[^<]+)[^>]+>[^>]+>[^>]+>(?P<year>\d*)[^>]+>[^>]+>[^>]+>(?P<duration>\d*)'
patronNext = '<li class=.active.>.*?href=.(.*?).>'
action = 'episodios'
action = 'episodes'
return locals()
@support.scrape
def episodios(item):
def episodes(item):
patronBlock = r'<strong>Stagione (?P<season>[0-9]+)(?P<block>.*?)</div></div>'
patron = r'<a href="(?P<url>[^"]+)">\s*Episodio\s*(?P<episode>[0-9]+)'
return locals()
def search(item, text):
info(text)
logger.debug(text)
item.contentType = 'tvshow'
item.url = host + "/?s=" + text
try:
item.args = 'search'
return peliculas(item)
return movies(item)
except:
import sys
for line in sys.exc_info():
info("%s" % line)
logger.error("%s" % line)
return []
def findvideos(item):
support.info('findvideos', item)
logger.debug('findvideos', item)
data = support.match(item, headers=headers, patron=r'div class="movieplay">([^>]+)').matches
return support.server(item, data=data )

View File

@@ -5,7 +5,7 @@
"active": true,
"thumbnail": "hd4me.png",
"banner": "hd4me.png",
"categories": ["movie", "vos"],
"categories": ["movie", "sub"],
"not_active": ["include_in_newest"],
"settings": []
}

View File

@@ -4,6 +4,7 @@
# ------------------------------------------------------------
from core import support
from platformcode import logger
host = support.config.get_channel_url()
@@ -19,10 +20,10 @@ def mainlist(item):
@support.scrape
def peliculas(item):
def movies(item):
# debug = True
if item.args == 'alternative':
pagination = ''
pagination = True
patron = r'<a title="(?P<title>[^\(]+)\(\s*(?P<year>\d+)\)\s\D+(?P<quality>\d+p).{3}(?P<lang>[^ ]+).*?[^"]+"\s*href="(?P<url>[^"]+)'
else:
patron = r'<a href="(?P<url>[^"]+)" (?:rel="?[0-9]+"?)? title="(?P<title>[^\(]+)(?!\()\s*\((?P<year>\d+)\)\s(?:[^\]]+\])?\D+(?P<quality>\d+p).{3}(?P<lang>[^ ]+).*?<img id="?cov"?.*?src="(?P<thumb>[^"]+)'
@@ -32,9 +33,9 @@ def peliculas(item):
@support.scrape
def genre(item):
action = 'peliculas'
action = 'movies'
blacklist =['prova ']
patronMenu = r'<a href="(?P<url>[^"]+)" class="menu-link\s*sub-menu-link">(?P<title>[^<]+)<'
patronGenreMenu = r'<a href="(?P<url>[^"]+)" class="menu-link\s*sub-menu-link">(?P<title>[^<]+)<'
def itemHook(item):
if item.fulltitle in ['Classici Disney', 'Studio Ghibli', 'Pixar']:
item.args = 'alternative'
@@ -43,15 +44,15 @@ def genre(item):
def search(item, text):
support.info(text)
logger.debug(text)
item.url = host + '/?s=' + text
try:
return peliculas(item)
return movies(item)
# Cattura la eccezione così non interrompe la ricerca globle se il canale si rompe!
except:
import sys
for line in sys.exc_info():
support.logger.error("search except: %s" % line)
logger.error("search except: %s" % line)
return []

View File

@@ -4,6 +4,7 @@
# ------------------------------------------------------------
from core import support
from platformcode import logger
# def findhost(url):
# data = support.httptools.downloadpage(url).data
@@ -11,7 +12,7 @@ from core import support
# return url[:-1] if url.endswith('/') else url
host = support.config.get_channel_url()
support.info('HOST',host)
logger.debug('HOST',host)
# host = 'https://ilcorsaronero.xyz'
headers = [['Referer', host]]
@@ -20,22 +21,22 @@ headers = [['Referer', host]]
def mainlist(item):
menu = [
('BDRiP {film}', ['/categoria.php?active=0&category=1&order=data&by=DESC&page=', 'peliculas', [0, 'movie', True], 'undefined']),
('BDRiP {film}', ['/categoria.php?active=0&category=1&order=data&by=DESC&page=', 'movies', [0, 'movie', True], 'undefined']),
('Cerca BDRiP... {submenu} {film}', ['/torrent-ita/1/', 'search', ['search', 'movie', True], 'movie']),
('DVD {film}', ['/categoria.php?active=0&category=20&order=data&by=DESC&page=', 'peliculas', [0, 'movie', True], 'undefined']),
('DVD {film}', ['/categoria.php?active=0&category=20&order=data&by=DESC&page=', 'movies', [0, 'movie', True], 'undefined']),
('Cerca DVD... {submenu} {film}', ['/torrent-ita/20/', 'search', ['search', 'movie', True], 'movie']),
('Screener {film}', ['/categoria.php?active=0&category=19&order=data&by=DESC&page=', 'peliculas', [0, 'movie', True], 'undefined']),
('Screener {film}', ['/categoria.php?active=0&category=19&order=data&by=DESC&page=', 'movies', [0, 'movie', True], 'undefined']),
('Cerca Screener.. {submenu} {film}', ['/torrent-ita/19/', 'search', ['search', 'movie', True], 'movie']),
('Serie TV', ['/categoria.php?active=0&category=15&order=data&by=DES&page=', 'peliculas', [0 , 'tvshow', True], 'tvshow']),
('Serie TV', ['/categoria.php?active=0&category=15&order=data&by=DES&page=', 'movies', [0 , 'tvshow', True], 'tvshow']),
('Cerca Serie TV.. {submenu}', ['/torrent-ita/15/', 'search', ['search', 'tvshow',True], 'tvshow']),
('Anime', ['/categoria.php?active=0&category=5&order=data&by=DESC&page=', 'peliculas', [0, 'anime', True], 'tvshow']),
('Anime', ['/categoria.php?active=0&category=5&order=data&by=DESC&page=', 'movies', [0, 'anime', True], 'tvshow']),
('Cerca Anime.. {submenu}', ['/torrent-ita/5/', 'search', ['search', 'anime', True], 'tvshow']),
('Musica', ['/categoria.php?active=0&category=2&order=data&by=DESC&page=', 'peliculas', [0, 'music', False], 'music']),
('Musica', ['/categoria.php?active=0&category=2&order=data&by=DESC&page=', 'movies', [0, 'music', False], 'music']),
('Cerca Musica.. {submenu}', ['/torrent-ita/2/', 'search', ['search', 'music', False], 'music']),
('Audiolibri {musica}', ['/categoria.php?active=0&category=18&order=data&by=DESC&page=', 'peliculas', [0, 'music', False], 'music']),
('Audiolibri {musica}', ['/categoria.php?active=0&category=18&order=data&by=DESC&page=', 'movies', [0, 'music', False], 'music']),
('Cerca Audiolibri.. {submenu}', ['/torrent-ita/18/', 'search', ['search', 'music', False], 'music']),
# mostrerebbe anche risultati non "multimediali" e allungherebbero inutilmente la ricerca globale
# ('Altro {film}', ['/categoria.php?active=0&category=4&order=data&by=DESC&page=', 'peliculas', [0, 'other', False]]),
# ('Altro {film}', ['/categoria.php?active=0&category=4&order=data&by=DESC&page=', 'movies', [0, 'other', False]]),
# ('Cerca altro.. {submenu}', ['/torrent-ita/4/', 'search', ['search', 'other', False]]),
# ('Cerca Tutto... {color kod bold}', ['/argh.php?search=', 'search', ['search', 'all', False]])
]
@@ -44,39 +45,38 @@ def mainlist(item):
@support.scrape
def peliculas(item):
def movies(item):
# debug = True
sceneTitle = item.args[2]
if item.args[1] in ['tvshow', 'anime', 'music', 'other']:
patron = r'>[^"<]+'
else:
patron = r'>(?P<quality>[^"<]+)'
patron += '</td> <TD[^>]+><A class="tab" HREF="(?P<url>[^"]+)"\s*>(?P<title>[^<]+)<[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>(?P<size>[^<]+)<[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>(?P<seed>[^<]+)'
patron += r'</td> <TD[^>]+><A class="tab" HREF="(?P<url>[^"]+)"\s*>(?P<title>[^<]+)<[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>(?P<size>[^<]+)<[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>(?P<seed>[^<]+)'
if 'search' not in item.args:
item.url += str(item.args[0])
def itemlistHook(itemlist):
args = item.args
args[0] += 1
support.nextPage(itemlist, item, next_page=item.url, function_or_level="peliculas")
# itemlist.append(item.clone(title=support.typo(support.config.get_localized_string(30992), 'color kod bold'), args=args, thumbnail=support.thumb()))
support.nextPage(itemlist, item, 'movies', next_page=item.url, total_pages=15)
return itemlist
return locals()
def search(item, text):
support.info(item, text)
logger.debug( text)
if 'all' in item.args:
item.url += text
else:
item.url += text + '.html'
try:
return peliculas(item)
# Cattura la eccezione così non interrompe la ricerca globle se il canale si rompe!
return movies(item)
# Cattura l' eccezione così non interrompe la ricerca globle se il canale si rompe!
except:
import sys
for line in sys.exc_info():
support.logger.error("search except: %s" % line)
logger.error("search except: %s" % line)
return []

View File

@@ -5,6 +5,6 @@
"language": ["ita", "sub-ita"],
"thumbnail": "ilgeniodellostreaming.png",
"banner": "ilgeniodellostreaming.png",
"categories": ["movie", "tvshow", "anime", "vos"],
"categories": ["movie", "tvshow", "anime", "sub"],
"settings": ["include_in_newest_anime"]
}

View File

@@ -6,29 +6,27 @@
from core import support
from core.support import info
from core.item import Item
from platformcode import config
from platformcode import config, logger
host = config.get_channel_url()
headers = [['Referer', host]]
@support.menu
def mainlist(item):
support.info(item)
film = ['/film/',
('Generi',['', 'genres', 'genres']),
('Per Lettera',['/film-a-z/', 'genres', 'letter']),
('Anni',['', 'genres', 'year']),
('Popolari',['/trending/?get=movies', 'peliculas', 'populared']),
('Più Votati', ['/ratings/?get=movies', 'peliculas', 'populared'])
('Popolari',['/trending/?get=movies', 'movies', 'populared']),
('Più Votati', ['/ratings/?get=movies', 'movies', 'populared'])
]
tvshow = ['/serie/',
('Aggiornamenti', ['/aggiornamenti-serie/', 'peliculas', 'update']),
('Popolari',['/trending/?get=tv', 'peliculas', 'populared']),
('Più Votati', ['/ratings/?get=tv', 'peliculas', 'populared'])
('Aggiornamenti', ['/aggiornamenti-serie/', 'movies', 'update']),
('Popolari',['/trending/?get=tv', 'movies', 'populared']),
('Più Votati', ['/ratings/?get=tv', 'movies', 'populared'])
]
@@ -36,7 +34,7 @@ def mainlist(item):
]
Tvshow = [
('Show TV {bullet bold}', ['/tv-show/', 'peliculas', '', 'tvshow'])
('Show TV {bullet bold}', ['/tv-show/', 'movies', '', 'tvshow'])
]
search = ''
@@ -45,8 +43,8 @@ def mainlist(item):
@support.scrape
def peliculas(item):
info()
def movies(item):
logger.debug()
# debugBlock = True
# debug=True
@@ -55,7 +53,7 @@ def peliculas(item):
patron = r'<img src="(?P<thumb>[^"]+)" alt="[^"]+" ?/?>[^>]+>(?P<type>[^<]+)</span>.*?<a href="(?P<url>[^"]+)">(?P<title>.+?)[ ]?(?:\[(?P<lang>Sub-ITA)\])?</a>[^>]+>[^>]+>(?:<span class="rating">IMDb\s*(?P<rating>[^>]+)</span>)?.?(?:<span class="year">(?P<year>[0-9]+)</span>)?.*?<p>(?P<plot>.*?)</p>'
typeContentDict={'movie': ['film'], 'tvshow': ['tv']}
typeActionDict={'findvideos': ['film'], 'episodios': ['tv']}
typeActionDict={'findvideos': ['film'], 'episodes': ['tv']}
else:
if item.contentType == 'movie':
@@ -77,11 +75,11 @@ def peliculas(item):
patron = r'<div class="poster">\s?<a href="(?P<url>[^"]+)"><img src="(?P<thumb>[^"]+)" alt="[^"]+"><\/a>[^>]+>[^>]+>[^>]+>\s*(?P<rating>[0-9.]+)<\/div>(?:<span class="quality">(?:SUB-ITA|)?(?P<quality>|[^<]+)?<\/span>)?[^>]+>[^>]+>[^>]+>[^>]+>(?P<title>.+?)[ ]?(?:\[(?P<lang>Sub-ITA)\])?<\/a>[^>]+>[^>]+>(?P<year>[^<]+)<\/span>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>(?P<plot>[^<]+)<div'
else:
# TVSHOW
action = 'episodios'
action = 'episodes'
if item.args == 'update':
action = 'findvideos'
patron = r'<div class="poster"><img src="(?P<thumb>[^"]+)"(?:[^>]+>){2}<a href="(?P<url>[^"]+)">[^>]+>(?P<episode>[\d\-x]+)(?:[^>]+>){4}(?P<title>.+?)(?:\[(?P<lang>[SsuUbBiItTaA-]{7})\])?<(?:[^>]+>){4}(?P<quality>[HDWEBRIP-]+)?(?:.+?)?/span><p class="serie"'
pagination = 25
pagination = True
def itemHook(item):
item.contentType = 'episode'
return item
@@ -95,10 +93,10 @@ def peliculas(item):
@support.scrape
def episodios(item):
info()
def episodes(item):
logger.debug()
patronBlock = r'<h1>.*?[ ]?(?:\[(?P<lang>.+?\]))?</h1>.+?<div class="se-a" style="display:block">\s*<ul class="episodios">(?P<block>.*?)</ul>\s*</div>\s*</div>\s*</div>\s*</div>\s*</div>'
patronBlock = r'<h1>.*?[ ]?(?:\[(?P<lang>.+?\]))?</h1>.+?<div class="se-a" style="display:block">\s*<ul class="episodes">(?P<block>.*?)</ul>\s*</div>\s*</div>\s*</div>\s*</div>\s*</div>'
patron = r'<a href="(?P<url>[^"]+)"><img src="(?P<thumb>[^"]+)">.*?'\
'<div class="numerando">(?P<episode>[^<]+).*?<div class="episodiotitle">'\
'[^>]+>(?P<title>[^<]+)<\/a>'
@@ -108,9 +106,9 @@ def episodios(item):
@support.scrape
def genres(item):
info(item)
logger.debug(item)
action='peliculas'
action='movies'
if item.args == 'genres':
patronBlock = r'<div class="sidemenu"><h2>Genere</h2>(?P<block>.*?)/li></ul></div>'
elif item.args == 'year':
@@ -126,50 +124,50 @@ def genres(item):
def search(item, text):
info(text)
logger.debug(text)
import uuid
text = text.replace(' ', '+')
item.url = host + '/?' + uuid.uuid4().hex + '=' + uuid.uuid4().hex + '&s=' + text
try:
item.args = 'search'
return peliculas(item)
return movies(item)
except:
import sys
for line in sys.exc_info():
info("%s" % line)
logger.error("%s" % line)
return []
def newest(categoria):
info(categoria)
def newest(category):
logger.debug(category)
itemlist = []
item = Item()
if categoria == 'peliculas':
if category == 'movie':
item.contentType = 'movie'
item.url = host + '/film/'
elif categoria == 'series':
elif category == 'tvshow':
item.args = 'update'
item.contentType = 'tvshow'
item.url = host + '/aggiornamenti-serie/'
## elif categoria == 'anime':
## elif category == 'anime':
## item.contentType = 'tvshow'
## item.url = host + '/anime/'
try:
item.action = 'peliculas'
itemlist = peliculas(item)
item.action = 'movies'
itemlist = movies(item)
except:
import sys
for line in sys.exc_info():
info("{0}".format(line))
logger.error("{0}".format(line))
return []
return itemlist
def findvideos(item):
info()
logger.debug()
matches = support.match(item, patron=[r'var ilinks\s?=\s?([^;]+)',r' href="#option-\d">([^\s]+)\s*([^\s]+)']).matches
itemlist = []
list_url = []
@@ -193,7 +191,7 @@ def findvideos(item):
for i, url in enumerate(list_url):
itemlist.append(support.Item(
channel=item.channel,
title=list_servers[i],
# title=list_servers[i],
url=url,
action='play',
quality=list_quality[i],

View File

@@ -5,9 +5,8 @@
from core import support
from core.support import info
from core.item import Item
from platformcode import config
from platformcode import config, logger
host = config.get_channel_url()
headers = [['Referer', host]]
@@ -15,7 +14,7 @@ headers = [['Referer', host]]
@support.menu
def mainlist(item):
film = ['/film/',
('In Sala', ['', 'peliculas', 'sala']),
('In Sala', ['', 'movies', 'sala']),
('Generi',['', 'genres', 'genres']),
('Per Lettera',['/catalog/all', 'genres', 'az']),
('Anni',['', 'genres', 'year'])]
@@ -24,7 +23,7 @@ def mainlist(item):
@support.scrape
def peliculas(item):
def movies(item):
if item.args == 'sala':
patronBlock = r'insala(?P<block>.*?)<header>'
patron = r'<img src="(?P<thumb>[^"]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>\s*(?P<rating>[^<]+)[^>]+>[^>]+>(?P<quality>[^<]+)[^>]+>[^>]+>[^>]+>[^>]+><a href="(?P<url>[^"]+)">(?P<title>[^<]+)[^>]+>[^>]+>[^>]+>(?P<year>\d{4})'
@@ -40,55 +39,55 @@ def peliculas(item):
@support.scrape
def genres(item):
action='peliculas'
action='movies'
if item.args == 'genres':
patronBlock = r'<div class="sidemenu">\s*<h2>Genere</h2>(?P<block>.*?)</ul'
elif item.args == 'year':
item.args = 'genres'
patronBlock = r'<div class="sidemenu">\s*<h2>Anno di uscita</h2>(?P<block>.*?)</ul'
elif item.args == 'az':
patronBlock = r'<div class="movies-letter">(?P<block>.*?)<div class="clearfix">'
patronMenu = r'<a(?:.+?)?href="(?P<url>.*?)"[ ]?>(?P<title>.*?)<\/a>'
if 'genres' in item.args:
patronGenreMenu = patronMenu
return locals()
def search(item, text):
info(text)
logger.debug(text)
text = text.replace(' ', '+')
item.url = host + "/search/" + text
try:
return peliculas(item)
return movies(item)
except:
import sys
for line in sys.exc_info():
info("%s" % line)
logger.error("%s" % line)
return []
def newest(categoria):
info(categoria)
def newest(category):
logger.debug(category)
itemlist = []
item = Item()
if categoria == 'peliculas':
if category == 'movie':
item.contentType = 'movie'
item.url = host + '/film/'
try:
item.action = 'peliculas'
itemlist = peliculas(item)
item.action = 'movies'
itemlist = movies(item)
except:
import sys
for line in sys.exc_info():
info("{0}".format(line))
logger.error("{0}".format(line))
return []
return itemlist
def findvideos(item):
info()
logger.debug()
urls = []
data = support.match(item).data
urls += support.match(data, patron=r'id="urlEmbed" value="([^"]+)').matches

View File

@@ -5,7 +5,7 @@
"language": ["ita","sub-ita"],
"thumbnail": "italiaserie.png",
"bannermenu": "italiaserie.png",
"categories": ["tvshow", "vos"],
"not_active": ["include_in_newest_peliculas", "include_in_newest_anime"],
"categories": ["tvshow", "sub"],
"not_active": ["include_in_newest_movie", "include_in_newest_anime"],
"settings": []
}

View File

@@ -15,30 +15,30 @@ headers = [['Referer', host]]
@support.menu
def mainlist(item):
tvshow = ['',
('Aggiornamenti', ['/aggiornamento-episodi/', 'peliculas', 'update']),
('Top 10', ['/top-10', 'peliculas', 'top']),
('Netflix {tv submenu}', ['/genere/netflix', 'peliculas'])
('Aggiornamenti', ['/aggiornamento-episodi/', 'movies', 'update']),
('Top 10', ['/top-10', 'movies', 'top']),
('Netflix {tv submenu}', ['/genere/netflix', 'movies'])
]
return locals()
@support.scrape
def peliculas(item):
def movies(item):
# debug=True
blacklist = ['Aggiornamento Episodi']
action = 'episodios'
action = 'episodes'
patron = r'<div class="post-thumb">\s*<a href="(?P<url>[^"]+)" title="(?P<title>[^"\[]+)[^>]+>\s*<img src="(?P<thumb>[^"]+)"[^>]+>'
if item.args == 'update':
pagination = ''
pagination = True
#patron = r'br />(?:[^>]+>)?(?P<title>[^]+)[^<]+<a href="(?P<url>[^"]+)">(?P<episode>[^ ]+)\s*(?P<title2>[^\(<]+)(?:\((?P<lang>[^\)]+))?'
patron = r'br[\s/]*>(?:\s*<[^>]+>)*(?P<title>[^<]+)[^<]+<a href="(?P<url>[^"]+)"[^>]*>(?:[^,]{0,80}[, ]{2})*(?P<episode>[\S]+)\s*(?P<title2>[^\(<]+)(?:\((?P<lang>[^\)]+))?'
action = 'episodios'
action = 'episodes'
if item.args == 'top':
patron = r'<a href="(?P<url>[^"]+)">(?P<title>[^<]+)</a>(?:[^>]+>){3}<img.*?src="(?P<thumb>[^"]+)"[^>]+>(?:[^>]+>){5}:\s*(?P<rating>[^/]+)'
if item.args =='a-z':
pagination = ''
pagination = True
patron = r'<li ><a href="(?P<url>[^"]+)" title="(?P<title>[^"]+)"'
patronNext = r'<a class="next page-numbers" href="(.*?)">'
@@ -50,7 +50,7 @@ def peliculas(item):
@support.scrape
def episodios(item):
def episodes(item):
res = support.match(item, patron=r'<a href="([^"]+)">&gt;')
if res.match: data = support.match(res.match).data
else: data = res.data
@@ -66,38 +66,38 @@ def episodios(item):
@support.scrape
def category(item):
action = 'peliculas'
action = 'movies'
patron = r'<li class="cat-item.*?href="(?P<url>[^"]+)".*?>(?P<title>.*?)</a>'
return locals()
def search(item, texto):
support.info("s=", texto)
item.url = host + "/?s=" + texto
def search(item, text):
logger.debug(text)
item.url = host + "/?s=" + text
item.contentType = 'tvshow'
try:
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.info("%s" % line)
logger.error("%s" % line)
return []
def newest(categoria):
support.info("newest", categoria)
def newest(category):
logger.debug("newest", category)
itemlist = []
item = Item()
try:
if categoria == "series":
if category == 'tvshow':
item.url = host + "/aggiornamento-episodi/"
item.action = "peliculas"
item.action = "movies"
item.args = "update"
item.contentType = "episode"
itemlist = peliculas(item)
itemlist = movies(item)
if itemlist[-1].action == "peliculas":
if itemlist[-1].action == "movies":
itemlist.pop()
# Continua la ricerca in caso di errore

View File

@@ -5,6 +5,7 @@
import requests
from core import support
from platformcode import logger
DRM = 'com.widevine.alpha'
key_widevine = "https://la7.prod.conax.cloud/widevine/license"
@@ -23,26 +24,26 @@ headers = {
@support.menu
def mainlist(item):
top = [('Dirette {bold}', ['', 'live']),
('Replay {bold}', ['', 'replay_channels'])]
top = [('Dirette {bullet bold}', ['', 'live']),
('Replay {bullet bold}', ['', 'replay_channels'])]
menu = [('Programmi TV {bullet bold}', ['/tutti-i-programmi', 'peliculas', '', 'tvshow']),
('Teche La7 {bullet bold}', ['/i-protagonisti', 'peliculas', '', 'tvshow'])]
menu = [('Programmi TV {bullet bold}', ['/tutti-i-programmi', 'movies', '', 'tvshow']),
('Teche La7 {bullet bold}', ['/i-protagonisti', 'movies', '', 'tvshow'])]
search = ''
return locals()
def live(item):
itemlist = [item.clone(title=support.typo('La7', 'bold'), fulltitle='La7', url= host + '/dirette-tv', action='play', forcethumb = True, no_return=True),
item.clone(title=support.typo('La7d', 'bold'), fulltitle='La7d', url= host + '/live-la7d', action='play', forcethumb = True, no_return=True)]
return support.thumb(itemlist, live=True)
itemlist = [item.clone(title='La7', fulltitle='La7', url= host + '/dirette-tv', action='findvideos', forcethumb = True),
item.clone(title='La7d', fulltitle='La7d', url= host + '/live-la7d', action='findvideos', forcethumb = True)]
return support.thumb(itemlist, mode='live')
def replay_channels(item):
itemlist = [item.clone(title=support.typo('La7', 'bold'), fulltitle='La7', url= host + '/rivedila7/0/la7', action='replay_menu', forcethumb = True),
item.clone(title=support.typo('La7d', 'bold'), fulltitle='La7d', url= host + '/rivedila7/0/la7d', action='replay_menu', forcethumb = True)]
return support.thumb(itemlist, live=True)
itemlist = [item.clone(title='La7', fulltitle='La7', url= host + '/rivedila7/0/la7', action='replay_menu', forcethumb = True),
item.clone(title='La7d', fulltitle='La7d', url= host + '/rivedila7/0/la7d', action='replay_menu', forcethumb = True)]
return support.thumb(itemlist, mode='live')
@support.scrape
@@ -50,17 +51,17 @@ def replay_menu(item):
action = 'replay'
patron = r'href="(?P<url>[^"]+)"><div class="giorno-text">\s*(?P<day>[^>]+)</div><[^>]+>\s*(?P<num>[^<]+)</div><[^>]+>\s*(?P<month>[^<]+)<'
def itemHook(item):
item.title = support.typo(item.day + ' ' + item.num + ' ' + item.month,'bold')
item.title = '{} {} {}'.format(item.day, item.num, item.month)
return item
return locals()
@support.scrape
def replay(item):
action = 'play'
action = 'findvideos'
patron = r'guida-tv"><[^>]+><[^>]+>(?P<hour>[^<]+)<[^>]+><[^>]+><[^>]+>\s*<a href="(?P<url>[^"]+)"><[^>]+><div class="[^"]+" data-background-image="(?P<t>[^"]+)"><[^>]+><[^>]+><[^>]+><[^>]+>\s*(?P<name>[^<]+)<[^>]+><[^>]+><[^>]+>(?P<plot>[^<]+)<'
def itemHook(item):
item.title = support.typo(item.hour + ' - ' + item.name,'bold')
item.title = '{} - {}'.format(item.hour, item.name)
item.contentTitle = item.fulltitle = item.show = item.name
item.thumbnail = 'http:' + item.t
item.fanart = item.thumbnail
@@ -69,37 +70,42 @@ def replay(item):
return locals()
def search(item, text):
logger.debug(text)
item.url = host + '/tutti-i-programmi'
item.search = text
try:
return peliculas(item)
return movies(item)
except:
import sys
for line in sys.exc_info():
support.info('search log:', line)
logger.error('search log:', line)
return []
@support.scrape
def peliculas(item):
def movies(item):
search = item.search
disabletmdb = True
addVideolibrary = False
downloadEnabled = False
action = 'episodios'
disableAll = True
action = 'episodes'
patron = r'<a href="(?P<url>[^"]+)"[^>]+><div class="[^"]+" data-background-image="(?P<t>[^"]+)"></div><div class="titolo">\s*(?P<title>[^<]+)<'
def itemHook(item):
item.thumbnail = 'http:' + item.t if item.t.startswith('//') else item.t if item.t else item.thumbnail
prepose = ''
if item.t.startswith('//'):
prepose = 'http:'
elif item.t.startswith('/'):
prepose = host
elif not item.t.startswith('http'):
prepose = host + '/'
item.thumbnail = prepose + item.t
item.fanart = item.thumb
return item
return locals()
@support.scrape
def episodios(item):
def episodes(item):
data = support.match(item).data
# debug = True
action = 'play'
action = 'findvideos'
if '>puntate<' in data:
patronBlock = r'>puntate<(?P<block>.*?)home-block-outbrain'
url = support.match(data, patron=r'>puntate<[^>]+>[^>]+>[^>]+><a href="([^"]+)"').match
@@ -110,16 +116,16 @@ def episodios(item):
patron = r'(?:<a href="(?P<url>[^"]+)">[^>]+><div class="[^"]+" data-background-image="(?P<t>[^"]*)">[^>]+>[^>]+>[^>]+>(?:[^>]+>)?(?:[^>]+>){6}?)\s*(?P<title>[^<]+)<(?:[^>]+>[^>]+>[^>]+><div class="data">(?P<date>[^<]+))?|class="heading">[^>]+>(?P<Title>[^<]+).*?window.shareUrl = "(?P<Url>[^"]+)".*?poster:\s*"(?P<Thumb>[^"]+)", title: "(?P<desc>[^"]+)"'
patronNext = r'<a href="([^"]+)">'
addVideolibrary = False
videlibraryEnabled = False
downloadEnabled = False
def itemHook(item):
if item.Thumb: item.t = item.Thumb
item.thumbnail = 'http:' + item.t if item.t.startswith('//') else item.t if item.t else item.thumbnail
if item.Title: item.title = support.typo(item.Title, 'bold')
if item.Title: item.title = item.Title
if item.date:
item.title = support.re.sub(r'[Pp]untata (?:del )?\d+/\d+/\d+', '', item.title)
item.title += support.typo(item.date, '_ [] bold')
item.title = '{} [{}]'.format(item.title, item.date)
if item.desc: item.plot = item.desc
item.forcethumb = True
item.fanart = item.thumbnail
@@ -127,21 +133,16 @@ def episodios(item):
return locals()
def findvideos(item):
logger.debug()
return support.server(item, itemlist=[item.clone(server='directo', action='play')])
def play(item):
support.info()
if item.livefilter:
for it in live(item):
if it.fulltitle == item.livefilter:
item = it
break
logger.debug()
data = support.match(item).data
match = support.match(data, patron='/content/entry/data/(.*?).mp4').match
if match:
url = 'https://awsvodpkg.iltrovatore.it/local/hls/,/content/entry/data/' + support.match(item, patron='/content/entry/data/(.*?).mp4').match + '.mp4.urlset/master.m3u8'
item = item.clone(title='Direct', url=url, server='directo', action='play')
else:
url = support.match(data, patron=r'''["]?dash["]?\s*:\s*["']([^"']+)["']''').match
if url:
preurl = support.match(data, patron=r'preTokenUrl = "(.+?)"').match
url = support.match(data, patron=r'''["]?dash["]?\s*:\s*["']([^"']+)["']''').match
tokenHeader = {
'host': headers['host_token'],
'user-agent': headers['user-agent'],
@@ -168,4 +169,9 @@ def play(item):
lic_url='%s|%s|R{SSM}|'%(license_url, preLic)
item.drm = DRM
item.license = lic_url
else:
match = support.match(data, patron='/content/entry/data/(.*?).mp4').match
if match:
url = 'https://awsvodpkg.iltrovatore.it/local/hls/,/content/entry/data/' + support.match(item, patron='/content/entry/data/(.*?).mp4').match + '.mp4.urlset/master.m3u8'
item = item.clone(url=url, server='directo', action='play')
return support.servertools.find_video_items(item, data=url)

View File

@@ -2,12 +2,14 @@
# ------------------------------------------------------------
# Canale per Mediaset Play
# ------------------------------------------------------------
import functools
from platformcode import logger, config
import uuid, datetime, xbmc
import requests, sys
from core import support
from core import jsontools, support, httptools
if sys.version_info[0] >= 3:
from urllib.parse import urlencode, quote
else:
@@ -23,6 +25,7 @@ loginData = {"client_id": clientid, "platform": "pc", "appName": "web//mediasetp
sessionUrl = "https://api.one.accedo.tv/session?appKey=59ad346f1de1c4000dfd09c5&uuid={uuid}&gid=default"
session = requests.Session()
session.request = functools.partial(session.request, timeout=httptools.HTTPTOOLS_DEFAULT_DOWNLOAD_TIMEOUT)
session.headers.update({'Content-Type': 'application/json', 'User-Agent': support.httptools.get_user_agent(), 'Referer': host})
entry = 'https://api.one.accedo.tv/content/entry/{id}?locale=it'
@@ -38,14 +41,14 @@ session.headers.update({'authorization': 'Bearer ' + Token})
sessionKey = session.get(sessionUrl.format(uuid=str(uuid.uuid4())), verify=False).json()['sessionKey']
session.headers.update({'x-session': sessionKey})
pagination = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100][config.get_setting('pagination', 'mediasetplay')]
pagination = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100][config.getSetting('pagination', 'mediasetplay')]
@support.menu
def mainlist(item):
top = [('Dirette {bold}', ['', 'live'])]
menu = [('Film {bullet bold}', ['/cinema', 'peliculas', {'uxReference':'filmUltimiArrivi'}, 'movie']),
menu = [('Film {bullet bold}', ['/cinema', 'movies', {'uxReference':'filmUltimiArrivi'}, 'movie']),
('Fiction / Serie TV {bullet bold}', ['/fiction', 'menu', '5acfcb3c23eec6000d64a6a4', 'tvshow']),
('Programmi TV{ bullet bold}', ['/programmitv', 'menu', '5acfc8011de1c4000b6ec953', 'tvshow']),
('Documentari {bullet bold}', ['/documentari', 'menu', '5bfd17c423eec6001aec49f9', 'undefined']),
@@ -63,7 +66,7 @@ def menu(item):
itemlist.append(item.clone(title=support.typo(it['title'], 'bullet bold'),
url= it['landingUrl'],
args={'uxReference':it.get('uxReferenceV2', ''), 'params':it.get('uxReferenceV2Params', ''), 'feed':it.get('feedurlV2','')},
action='peliculas'))
action='movies'))
return itemlist
@@ -75,22 +78,29 @@ def live(item):
stations = res['stations']
for it in stations.values():
logger.debug(jsontools.dump(it))
plot = ''
title = it['title']
url = 'https:' + it['mediasetstation$pageUrl']
if 'plus' in title.lower() or 'premium' in title.lower(): continue
if 'SVOD' in it['mediasetstation$channelsRights']: continue
thumb = it.get('thumbnails',{}).get('channel_logo-100x100',{}).get('url','')
if it['callSign'] in allguide:
guide = allguide[it['callSign']]
plot = '[B]{}[/B]\n{}\n\nA Seguire:\n[B]{}[/B]\n{}'.format(guide['currentListing']['mediasetlisting$epgTitle'],
guide['currentListing']['description'],
guide['nextListing']['mediasetlisting$epgTitle'],
guide['nextListing']['description'],)
itemlist.append(item.clone(title=support.typo(title, 'bold'), fulltitle=title, callSign=it['callSign'], urls=guide['tuningInstruction']['urn:theplatform:tv:location:any'], plot=plot, url=url, action='play', forcethumb=True))
plot = '[B]{}[/B]\n{}'.format(guide.get('currentListing', {}).get('mediasetlisting$epgTitle', ''),guide.get('currentListing', {}).get('description', ''))
if 'nextListing' in guide.keys():
plot += '\n\nA Seguire:\n[B]{}[/B]\n{}'.format(guide.get('nextListing', {}).get('mediasetlisting$epgTitle', ''),guide.get('nextListing', {}).get('description', ''))
itemlist.append(item.clone(title=title,
fulltitle=title, callSign=it['callSign'],
urls=guide['tuningInstruction']['urn:theplatform:tv:location:any'],
plot=plot,
url=url,
action='findvideos',
thumbnail=thumb,
forcethumb=True))
itemlist.sort(key=lambda it: support.channels_order.get(it.fulltitle, 999))
support.thumb(itemlist, live=True)
support.thumb(itemlist, mode='live')
return itemlist
@@ -98,7 +108,7 @@ def search(item, text):
item.args = {'uxReference':'main', 'params':'channel≈', 'query':text}
try:
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
@@ -107,7 +117,7 @@ def search(item, text):
return []
def peliculas(item):
def movies(item):
itemlist = []
res = get_programs(item)
video_id= ''
@@ -131,7 +141,7 @@ def peliculas(item):
else:
contentType = 'movie'
video_id = it['guid']
action = 'play'
action = 'findvideos'
for k, v in it['thumbnails'].items():
if 'image_vertical' in k and not thumb:
thumb = v['url'].replace('.jpg', '@3.jpg')
@@ -140,7 +150,7 @@ def peliculas(item):
if thumb and fanart:
break
itemlist.append(item.clone(title=support.typo(title, 'bold'),
itemlist.append(item.clone(title=title,
fulltitle=title,
contentTitle=title,
contentSerieName=contentSerieName,
@@ -172,22 +182,22 @@ def epmenu(item):
for s in item.seriesid:
itemlist.append(
item.clone(seriesid = s['id'],
title=support.typo(s['title'], 'bold')))
title=s['title']))
if len(itemlist) == 1: return epmenu(itemlist[0])
else:
res = requests.get(epUrl.format(item.seriesid)).json()['entries']
for it in res:
itemlist.append(
item.clone(seriesid = '',
title=support.typo(it['description'], 'bold'),
title=it['description'],
subbrand=it['mediasetprogram$subBrandId'],
action='episodios'))
action='episodes'))
itemlist = sorted(itemlist, key=lambda it: it.title, reverse=True)
if len(itemlist) == 1: return episodios(itemlist[0])
if len(itemlist) == 1: return episodes(itemlist[0])
return itemlist
def episodios(item):
def episodes(item):
# create month list
months = []
try:
@@ -195,15 +205,18 @@ def episodios(item):
except: # per i test, xbmc.getLocalizedString non è supportato
for month in range(21, 33): months.append('dummy')
# i programmi tv vanno ordinati per data decrescente, gli episodi delle serie per data crescente
order = 'desc' if '/programmi-tv/' in item.url else 'asc'
itemlist = []
res = requests.get('https://feed.entertainment.tv.theplatform.eu/f/PR1GhC/mediaset-prod-all-programs-v2?byCustomValue={subBrandId}{' + item.subbrand +'}&sort=:publishInfo_lastPublished|asc,tvSeasonEpisodeNumber').json()['entries']
res = requests.get('https://feed.entertainment.tv.theplatform.eu/f/PR1GhC/mediaset-prod-all-programs-v2?byCustomValue={subBrandId}{' + item.subbrand +'}&sort=:publishInfo_lastPublished|' + order + ',tvSeasonEpisodeNumber').json()['entries']
for it in res:
thumb = ''
titleDate = ''
if 'mediasetprogram$publishInfo_lastPublished' in it:
date = datetime.date.fromtimestamp(it['mediasetprogram$publishInfo_lastPublished'] / 1000)
titleDate =' [{} {}]'.format(date.day, months[date.month])
titleDate =' [{} {}]'.format(date.day, months[date.month-1])
title = '[B]{}[/B]{}'.format(it['title'], titleDate)
for k, v in it['thumbnails'].items():
if 'image_keyframe' in k and not thumb:
@@ -215,16 +228,22 @@ def episodios(item):
thumbnail=thumb,
forcethumb=True,
contentType='episode',
action='play',
action='findvideos',
video_id=it['guid']))
return itemlist
def findvideos(item):
logger.debug()
return support.server(item, itemlist=[item.clone(server='directo', action='play')])
def play(item):
logger.debug()
item.no_return=True
mpd = config.get_setting('mpd', item.channel)
# support.dbg()
mpd = config.getSetting('mpd', item.channel)
lic_url = 'https://widevine.entitlement.theplatform.eu/wv/web/ModularDrm/getRawWidevineLicense?releasePid={pid}&account=http://access.auth.theplatform.com/data/Account/2702976343&schema=1.0&token={token}|Accept=*/*&Content-Type=&User-Agent={ua}|R{{SSM}}|'
@@ -238,6 +257,8 @@ def play(item):
if Format in it['format']:
item.url = requests.head(it['publicUrls'][0]).headers['Location']
pid = it['releasePids'][0]
if mpd and 'widevine' in it['assetTypes']:
break
if mpd:
item.manifest = 'mpd'

View File

@@ -30,7 +30,7 @@ current_session.headers.update({'Content-Type': 'application/json', 'User-Agent'
# login anonimo
res = current_session.post(loginUrl, json=loginData, verify=False)
support.dbg()
logger.dbg()
Token = res.json['response']['beToken']
sid = res.json['response']['sid']
current_session.headers.update({'authorization': 'Bearer' + Token})
@@ -100,11 +100,11 @@ def search(item, text):
item.search = text
try:
itemlist = peliculas(item)
itemlist = movies(item)
except:
import sys
for line in sys.exc_info():
support.logger.error("%s" % line)
logger.error("%s" % line)
return itemlist
@@ -117,7 +117,7 @@ def menu(item):
for it in json:
logger.debug(jsontools.dump(it))
if 'uxReference' in it: itemlist.append(
item.clone(title=support.typo(it['title'], 'bullet bold'), url= it['landingUrl'], feed = it.get('feedurlV2',''), ref=it['uxReference'], args='', action='peliculas'))
item.clone(title=support.typo(it['title'], 'bullet bold'), url= it['landingUrl'], feed = it.get('feedurlV2',''), ref=it['uxReference'], args='', action='movies'))
return itemlist
@@ -150,10 +150,10 @@ def live(item):
plot=value['plot'],
action='play',
no_return=True))
return support.thumb(itemlist, live=True)
return support.thumb(itemlist, mode='live')
def peliculas(item):
def movies(item):
logger.debug()
itemlist = []
titlelist = []
@@ -228,16 +228,16 @@ def epmenu(item):
for entry in entries:
if 'mediasetprogram$subBrandId' in entry:
itemlist.append(
item.clone(action='episodios',
item.clone(action='episodes',
title=support.typo(entry['description'], 'bold'),
url=entry['mediasetprogram$subBrandId'],
order=entry.get('mediasetprogram$order',0)))
if len(itemlist) == 1: return episodios(itemlist[0])
if len(itemlist) == 1: return episodes(itemlist[0])
itemlist = sorted(itemlist, key=lambda it: it.order)
return itemlist
def episodios(item):
def episodes(item):
logger.debug()
itemlist = []
if not item.nextIndex: item.nextIndex = 1
@@ -318,7 +318,7 @@ def get_from_id(item):
def get_programs(item, ret=[], args={}):
hasMore = False
url = ''
# support.dbg()
# logger.dbg()
if 'search' in item.args:
args['uxReference'] = item.args[2]

View File

@@ -3,7 +3,8 @@
# Canale per altadefinizione01
# ------------------------------------------------------------
from core import support
from core import support, config
from platformcode import logger
host = 'https://metalvideo.com'
headers = {'X-Requested-With': 'XMLHttpRequest'}
@@ -12,7 +13,7 @@ headers = {'X-Requested-With': 'XMLHttpRequest'}
@support.scrape
def mainlist(item):
item.url = host
action = 'peliculas'
action = 'movies'
patronBlock = r'<ul class="dropdown-menu(?P<block>.*?)</ul>\s*</div'
patron = r'<a href="(?P<url>[^"]+)"(?: class="")?>(?P<title>[^<]+)<'
def itemHook(item):
@@ -24,18 +25,18 @@ def mainlist(item):
itemlist.append(
support.Item(
channel=item.channel,
title=support.typo('Cerca...', 'bold'),
title=support.typo(config.getLocalizedString(70741) % 'Musica… ', 'bold'),
contentType='music',
url=item.url,
action='search',
thumbnail=support.thumb('search')))
thumbnail=support.thumb('music_search')))
support.channel_config(item, itemlist)
return itemlist
return locals()
@support.scrape
def peliculas(item):
def movies(item):
# debug=True
action = 'findvideos'
patron= r'<img src="[^"]+" alt="(?P<title>[^"]+)" data-echo="(?P<thumb>[^"]+)"(?:[^>]+>){7}<a href="(?P<url>[^"]+)"'
@@ -49,13 +50,13 @@ def findvideos(item):
def search(item, text):
support.info(text)
logger.debug(text)
item.url = host + '/search.php?keywords=' + text + '&video-id='
try:
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.logger.error("%s" % line)
logger.error("%s" % line)
return []

View File

@@ -4,6 +4,7 @@
# ----------------------------------------------------------
from core import support
from platformcode import logger
host = support.config.get_channel_url()
headers = {'Referer': host}
@@ -13,7 +14,7 @@ headers = {'Referer': host}
def mainlist(item):
film = ['/lista-film',
('Ultimi Film Aggiunti', ['/ultimi-film-aggiunti', 'peliculas' , 'last'])]
('Ultimi Film Aggiunti', ['/ultimi-film-aggiunti', 'movies' , 'last'])]
tvshow = ['/lista-serie-tv',
('HD {TV}', ['/lista-serie-tv-in-altadefinizione']),
@@ -22,7 +23,7 @@ def mainlist(item):
anime = ['/lista-cartoni-animati-e-anime']
docu = [('Documentari {bullet bold}',['/lista-documentari', 'peliculas', '', 'tvshow'])]
docu = [('Documentari {bullet bold}',['/lista-documentari', 'movies', '', 'tvshow'])]
search = ''
@@ -30,48 +31,48 @@ def mainlist(item):
def search(item, text):
support.info(text)
logger.debug(text)
if item.contentType == 'movie' or item.extra == 'movie':
action = 'findvideos'
else:
action = 'episodios'
action = 'episodes'
item.args = 'search'
item.url = host + "?a=b&s=" + text
try:
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore .
except:
import sys
for line in sys.exc_info():
support.logger.error("%s" % line)
logger.error("%s" % line)
return []
def newest(categoria):
support.info(categoria)
def newest(category):
logger.debug(category)
item = support.Item()
try:
if categoria == "series":
if category == 'tvshow':
item.contentType= 'tvshow'
item.url = host + '/ultimi-episodi-aggiunti'
item.args = "lastep"
if categoria == "peliculas":
if category == "movie":
item.contentType= 'movie'
item.url = host + '/ultimi-film-aggiunti'
item.args = "last"
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.logger.error("{0}".format(line))
logger.error("{0}".format(line))
return []
@support.scrape
def peliculas(item):
pagination = ''
anime = True
def movies(item):
pagination = True
numerationEnabled = True
patronNext = r'href="([^"]+)" title="[^"]+" class="lcp_nextlink"'
action = 'findvideos'
# debug=True
@@ -82,7 +83,7 @@ def peliculas(item):
patronBlock = r'<table>(?P<block>.*?)</table>'
patron = r'<td>\s*<a href="[^>]+>(?P<title>.*?)(?:\s(?P<year>\d{4}))?\s(?:(?P<episode>(?:\d+x\d+|\d+)))\s*(?P<title2>[^<]+)(?P<url>.*?)<tr>'
elif item.args == 'search':
patronBlock = r'<div class="peliculas">(?P<block>.*?)<div id="paginador"'
patronBlock = r'<div class="movies">(?P<block>.*?)<div id="paginador"'
patron = r'class="item">\s*<a href="(?P<url>[^"]+)">\s*<div class="image">\s*<img src="(?P<thumb>[^"]+)" alt="(?P<title>.+?)(?:"| \d{4}).*?<span class="ttx">(?P<plot>[^<]+)<div class="degradado">[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>\s*(?:<span class="imdbs">(?P<rating>[^<]+))?(?:[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>(?P<year>\d+))?'
def itemHook(item):
if '/film/' in item.url:
@@ -90,21 +91,21 @@ def peliculas(item):
item.action = 'findvideos'
else:
item.contentType = 'tvshow'
item.action = 'episodios'
item.action = 'episodes'
return item
else:
patronBlock = r'<div class="entry-content pagess">(?P<block>.*?)</ul>'
patron = r'<li\s*><a href="(?P<url>[^"]+)" title="(?P<title>.*?)(?:\s(?P<year>\d{4}))?"[^>]*>'
if item.contentType == 'tvshow':
action = 'episodios'
anime = True
action = 'episodes'
numerationEnabled = True
return locals()
@support.scrape
def episodios(item):
anime = True
pagination = 50
def episodes(item):
numerationEnabled = True
pagination = True
patronBlock = r'<table>(?P<block>.*?)</table>'
patron = r'<tr><td><b>(?P<title>(?:\d+)?.*?)\s*(?:(?P<episode>(?:\d+x\d+|\d+)))\s*(?P<title2>[^<]+)(?P<data>.*?)<tr>'
def itemHook(item):

View File

@@ -6,6 +6,6 @@
"thumbnail": "netfreex.png",
"banner": "netfreex.png",
"categories": ["tvshow", "movie", "anime"],
"not_active": ["include_in_newest_peliculas", "include_in_newest_anime", "include_in_newest_series"],
"not_active": ["include_in_newest_movie", "include_in_newest_anime", "include_in_newest_tvshow"],
"settings": []
}

View File

@@ -40,14 +40,14 @@ def search(item, text):
return []
def peliculas(item):
def movies(item):
if 'anime' in item.url:
return support.dooplay_peliculas(item, True)
return support.dooplay_movies(item, True)
else:
return support.dooplay_peliculas(item, False)
return support.dooplay_movies(item, False)
def episodios(item):
def episodes(item):
return support.dooplay_get_episodes(item)
@@ -65,7 +65,7 @@ def findvideos(item):
@support.scrape
def menu(item):
action = 'peliculas'
action = 'movies'
data = support.match(item, patron=r'<a href="#">Genere<(.*?)</ul').match
patronMenu= r'<a href="(?P<url>[^"]+)"[^>]*>(?P<title>[^<]+)<'
return locals()

View File

@@ -20,7 +20,7 @@ def mainlist(item):
@support.scrape
def menu(item):
action='peliculas'
action='movies'
blacklist=['Tutti']
patronMenu = r'<a data-display-name="Link" href="(?P<url>[^"]+)" class="[^"]+">(?P<title>[^<]+)'
return locals()
@@ -31,7 +31,7 @@ def search(item, text):
item.text = text
try:
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore .
except:
import sys
@@ -64,11 +64,11 @@ def live(item):
logger.debug()
itemlist=[]
for key, value in liveDict().items():
itemlist.append(item.clone(title=support.typo(key,'bold'), contentTitle=key, fulltitle=key, show=key, url=value['url'], plot=value['plot'], action='play', forcethumb=True, no_return=True))
return support.thumb(itemlist, live=True)
itemlist.append(item.clone(title=key, contentTitle=key, fulltitle=key, show=key, url=value['url'], plot=value['plot'], action='findvideos', forcethumb=True, no_return=True))
return support.thumb(itemlist, mode='live')
def peliculas(item):
def movies(item):
logger.debug()
def load_more(url):
second_url = host if url.startswith('/') else '' + url.replace('\u002F','/').replace('\\u002F','/').replace('%5C','/')
@@ -92,7 +92,7 @@ def peliculas(item):
continue
if item.text.lower() in title.lower():
itemlist.append(
item.clone(title=support.typo(title,'bold'),
item.clone(title=title,
fulltitle = title,
show = title,
contentTitle = title if item.contentType == 'movie' else '',
@@ -101,11 +101,11 @@ def peliculas(item):
thumbnail = it['media']['image']['url'],
fanart = it['media']['image']['url'],
plot = it['meta']['description'],
action = 'findvideos' if item.contentType == 'movie' else 'episodios'))
action = 'findvideos' if item.contentType == 'movie' else 'episodes'))
return itemlist
def episodios(item):
def episodes(item):
logger.debug()
def load_more(url):
second_url = host if url.startswith('/') else '' + url.replace('\u002F','/').replace('%5C','/')
@@ -137,10 +137,10 @@ def episodios(item):
s = support.match(se, patron=r'S\s*(?P<season>\d+)').match
e = support.match(se, patron=r'E\s*(?P<episode>\d+)').match
if not e: e = support.match(it['meta']['subHeader'], patron=r'(\d+)').match
title = support.typo((s + 'x' if s else 'Episodio ') + e.zfill(2) + ' - ' + it['meta']['subHeader'],'bold')
title = (s + 'x' if s else 'Episodio ') + e.zfill(2) + ' - ' + it['meta']['subHeader']
else:
s = e = '0'
title = support.typo(it['meta']['header']['title'],'bold')
title = it['meta']['header']['title']
itemlist.append(
item.clone(title=title,
season=int(s) if s else '',
@@ -170,9 +170,4 @@ def play(item):
url = 'https://media.mtvnservices.com/pmt/e1/access/index.html?uri=' + mgid + '&configtype=edge&ref=' + item.url
ID, rootUrl = support.match(url, patron=[r'"id":"([^"]+)",',r'brightcove_mediagenRootURL":"([^"]+)"']).matches
item.url = jsontools.load(support.match(rootUrl.replace('&device={device}','').format(uri = ID)).data)['package']['video']['item'][0]['rendition'][0]['src']
if item.livefilter:
d = liveDict()[item.livefilter]
item = item.clone(title=support.typo(item.livefilter, 'bold'), fulltitle=item.livefilter, url=d['url'], plot=d['plot'], action='play', forcethumb=True, no_return=True)
support.thumb(item, live=True)
return [item]

View File

@@ -5,7 +5,8 @@
from core import support
from core.support import config, info
from core.support import config
from platformcode import logger
host = config.get_channel_url()
headers = [['Referer', host]]
@@ -23,58 +24,58 @@ def mainlist(item):
def search(item, texto):
info(texto)
item.url = host + "/?s=" + texto
logger.debug(texto)
item.url = host + "/search/" + texto
try:
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.logger.error("%s" % line)
logger.error("%s" % line)
return []
def newest(categoria):
support.info(categoria)
def newest(category):
logger.debug(category)
itemlist = []
item = support.Item()
try:
if categoria == "peliculas":
if category == "movie":
item.url = host + '/category/films'
item.contentType = 'movies'
return peliculas(item)
if categoria == "series":
return movies(item)
if category == 'tvshow':
item.url = host + '/category/serie'
item.contentType = 'tvshow'
return peliculas(item)
if categoria == "anime":
return movies(item)
if category == "anime":
item.url = host + '/category/anime-cartoni-animati'
item.contentType = 'tvshow'
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.logger.error("{0}".format(line))
logger.error("{0}".format(line))
return []
return itemlist
@support.scrape
def peliculas(item):
def movies(item):
patron = r'data-placement="bottom" title="(?P<title>[^"]+)" alt=[^=]+="(?P<url>[^"]+)"> <img class="[^"]+" title="[^"]+(?P<type>film|serie)[^"]+" alt="[^"]+" src="(?P<thumb>[^"]+)"'
patronNext = r'<a\s*class="nextpostslink" rel="next" href="([^"]+)">Avanti'
typeActionDict = {'findvideos': ['film'], 'episodios': ['serie']}
typeActionDict = {'findvideos': ['film'], 'episodes': ['serie']}
typeContentDict = {'movie': ['film'], 'tvshow': ['serie']}
# debug = True
return locals()
@support.scrape
def episodios(item):
def episodes(item):
if item.data: data = item.data
# debug= True
title = item.fulltitle
@@ -93,5 +94,5 @@ def findvideos(item):
data = support.match(item).data
if 'link-episode' in data:
item.data = data
return episodios(item)
return episodes(item)
return support.server(item, data=data)

View File

@@ -6,7 +6,7 @@
from core import support, jsontools
from core.item import Item
from platformcode import config
from platformcode import config, logger
import datetime
host = config.get_channel_url()
@@ -17,8 +17,8 @@ headers = [['Accept', 'application/ld+json']]
@support.menu
def mainlist(item):
# menu = [
# ('Ultimi Film aggiunti', ['/api/movies', 'peliculas', '']),
# ('Ultime Serie TV aggiunte', ['/api/shows', 'peliculas', '']),
# ('Ultimi Film aggiunti', ['/api/movies', 'movies', '']),
# ('Ultime Serie TV aggiunte', ['/api/shows', 'movies', '']),
# ('Generi', ['/api/genres', 'search_movie_by_genre', '']),
# ('Anni {film}', ['', 'search_movie_by_year', '']),
# ('Cerca... bold', ['', 'search', ''])
@@ -33,19 +33,19 @@ def mainlist(item):
return locals()
def newest(categoria):
support.info()
def newest(category):
logger.debug()
item = Item()
if categoria == 'peliculas':
if category == 'movie':
item.contentType = 'movie'
item.url = host + '/api/movies'
elif categoria == 'series':
elif category == 'tvshow':
item.contentType = 'tvshow'
item.url = host+'/api/shows'
return peliculas(item)
return movies(item)
def peliculas(item):
support.info()
def movies(item):
logger.debug()
itemlist = []
data = support.match(item.url, headers=headers).data
@@ -66,8 +66,8 @@ def peliculas(item):
return itemlist
def episodios(item):
support.info()
def episodes(item):
logger.debug()
itemlist = []
data = support.match(item.url, headers=headers).data
json_object = jsontools.load(data)
@@ -83,7 +83,7 @@ def episodios(item):
return itemlist
def get_season(item, seas_url, seasonNumber):
support.info()
logger.debug()
itemlist = []
data = support.match(seas_url, headers=headers).data
json_object = jsontools.load(data)
@@ -97,7 +97,7 @@ def get_season(item, seas_url, seasonNumber):
return itemlist[::-1]
def search(item, texto):
support.info(item.url, "search", texto)
logger.debug(item.url, "search", texto)
itemlist=[]
try:
item.url = host + "/api/movies?originalTitle="+texto+"&translations.name=" +texto
@@ -118,18 +118,18 @@ def search(item, texto):
except:
import sys
for line in sys.exc_info():
support.logger.error("%s" % line)
logger.error("%s" % line)
return []
def search_movie_by_genre(item):
support.info()
logger.debug()
itemlist = []
data = support.match(item.url, headers=headers).data
json_object = jsontools.load(data)
for genre in json_object['hydra:member']:
itemlist.append(
item.clone(action="peliculas",
item.clone(action="movies",
title=support.typo(genre['name'],'bold'),
contentType='movie',
url="%s/api/movies?genres.id=%s" %(host,genre['id'])))
@@ -137,7 +137,7 @@ def search_movie_by_genre(item):
def search_movie_by_year(item):
support.info()
logger.debug()
now = datetime.datetime.now()
year = int(now.year)
itemlist = []
@@ -148,12 +148,12 @@ def search_movie_by_year(item):
plot="1",
type="movie",
title=support.typo(year_to_search,'bold'),
action="peliculas"))
action="movies"))
return itemlist
def findvideos(item):
support.info()
logger.debug()
itemlist = []
try:
data = support.match(item.url, headers=headers).data
@@ -175,7 +175,7 @@ def findvideos(item):
def get_itemlist_element(element,item):
support.info()
logger.debug()
contentSerieName = ''
contentTitle =''
try:
@@ -209,7 +209,7 @@ def get_itemlist_element(element,item):
infoLabels['tmdb_id']=element['tmdbId']
else:
contentSerieName = scrapedtitle
next_action='episodios'
next_action='episodes'
quality=''
url="%s%s"

View File

@@ -4,6 +4,7 @@
# ------------------------------------------------------------
from core import support
from platformcode import logger
host = support.config.get_channel_url()
@@ -17,12 +18,12 @@ headers = [['Referer', host]]
def mainlist(item):
film = [
('Generi', ['', 'menu', 'Film']),
('Più Visti', ['','peliculas', 'most'])
('Più Visti', ['','movies', 'most'])
]
tvshow = ['',
('Generi', ['', 'menu', 'Serie Tv']),
('Ultimi Episodi', ['','peliculas', 'last'])
('Ultimi Episodi', ['','movies', 'last'])
]
search = ''
@@ -31,62 +32,62 @@ def mainlist(item):
@support.scrape
def menu(item):
action = 'peliculas'
action = 'movies'
patronBlock = item.args + r' Categorie</a>\s*<ul(?P<block>.*?)</ul>'
patronMenu = r'<a href="(?P<url>[^"]+)"[^>]+>(?P<title>[^>]+)<'
return locals()
def search(item, text):
support.info('search', item)
logger.debug('search', item)
itemlist = []
text = text.replace(' ', '+')
item.url = host + '/search/keyword/' + text
try:
item.args = 'search'
itemlist = peliculas(item)
if itemlist[-1].action == 'peliculas':
itemlist = movies(item)
if itemlist[-1].action == 'movies':
itemlist.pop()
return itemlist
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.info('search log:', line)
logger.error('search log:', line)
return []
def newest(categoria):
support.info(categoria)
def newest(category):
logger.debug(category)
itemlist = []
item = support.Item()
item.url = host
item.action = 'peliculas'
item.action = 'movies'
try:
if categoria == 'peliculas':
if category == 'movie':
item.contentType = 'movie'
itemlist = peliculas(item)
itemlist = movies(item)
else:
item.args = 'last'
item.contentType = 'tvshow'
itemlist = peliculas(item)
itemlist = movies(item)
if itemlist[-1].action == 'peliculas':
if itemlist[-1].action == 'movies':
itemlist.pop()
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.logger.error("%s" % line)
logger.error("%s" % line)
return []
return itemlist
@support.scrape
def peliculas(item):
def movies(item):
if item.contentType == 'tvshow' and not item.args:
action = 'episodios'
action = 'episodes'
patron = r'<div class="movie-box">\s*<a href="(?P<url>[^"]+)">[^>]+>[^>]+>\D+Streaming\s(?P<lang>[^"]+)[^>]+>[^>]+>[^>]+>(?P<quality>[^<]+)[^>]+>[^>]+>[^>]+>\s*<img src="(?P<thumb>[^"]+)"[^>]+>[^>]+>[^>]+>[^>]+>(?P<rating>[^<]+)<[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>(?P<title>[^<]+)[^>]+>[^>]+>[^>]+>\s*(?P<year>\d+)'
elif item.contentType == 'movie' and not item.args:
patron = r'<div class="existing_item col-6 col-lg-3 col-sm-4 col-xl-4">\s*<div class="movie-box">\s*<a href="(?P<url>(?:http(?:s)://[^/]+)?/(?P<type>[^/]+)/[^"]+)">[^>]+>[^>]+>\D+Streaming\s*(?P<lang>[^"]+)">[^>]+>[^>]+>(?P<quality>[^<]+)<[^>]+>[^>]+>[^>]+>\s*<img src="(?P<thumb>[^"]+)"[^>]+>[^>]+>[^>]+>[^>]+>(?P<rating>[^<]+)<[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>(?P<title>[^<]+)[^>]+>[^>]+>[^>]+>\s*(?:(?P<year>\d+))?[^>]+>[^>]+>[^>]+>[^>]+>(?P<plot>[^<]*)<'
@@ -96,19 +97,19 @@ def peliculas(item):
patron =r'div class="sm-113 item">\s*<a href="(?P<url>[^"]+)">[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>\s<img src="(?P<thumb>[^"]+)"[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>\s*(?P<title>[^<]+)'
else:
patron = r'<div class="movie-box">\s*<a href="(?P<url>(?:http(?:s)://[^/]+)?/(?P<type>[^/]+)/[^"]+)">[^>]+>[^>]+>\D+Streaming\s*(?P<lang>[^"]+)">[^>]+>[^>]+>(?P<quality>[^<]+)<[^>]+>[^>]+>[^>]+>\s*<img src="(?P<thumb>[^"]+)"[^>]+>[^>]+>[^>]+>[^>]+>(?P<rating>[^<]+)<[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>(?P<title>[^<]+)[^>]+>[^>]+>[^>]+>\s*(?:(?P<year>\d+))?[^>]+>[^>]+>[^>]+>[^>]+>(?P<plot>[^<]*)<'
typeActionDict = {'findvideos':['movie'], 'episodios':['tvshow']}
typeActionDict = {'findvideos':['movie'], 'episodes':['tvshow']}
typeContentDict = {'movie':['movie'], 'tvshow':['tvshow']}
patronNext = r'<a href="([^"]+)"[^>]+>&raquo;'
return locals()
@support.scrape
def episodios(item):
def episodes(item):
patron = r'<div class="episode-box">[^>]+>[^>]+>[^>]+>\D+Streaming\s(?P<lang>[^"]+)">[^>]+>[^>]+>(?P<quality>[^<]+)<[^>]+>[^>]+>[^>]+>\s*<img src="(?P<thumb>[^"]+)"[^[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>\s*<a href="(?P<url>[^"]+)"[^>]+>[^>]+>(?P<title>[^<]+)<[^>]+>[^>]+>[^>]+>\D*(?P<season>\d+)[^>]+>\D*(?P<episode>\d+)'
return locals()
def findvideos(item):
support.info()
logger.debug()
# match = support.match(item, patron='wstream', debug=True)
return support.server(item)

View File

@@ -19,8 +19,8 @@ host = support.config.get_channel_url()
@support.menu
def mainlist(item):
top = [('Dirette {bold}', ['/dirette', 'live', '/palinsesto/onAir.json']),
('Replay {bold}', ['/guidatv', 'replayMenu', '/guidatv.json'])]
top = [('Dirette {bullet bold}', ['/dirette', 'live', '/palinsesto/onAir.json']),
('Replay {bullet bold}', ['/guidatv', 'replayMenu', '/guidatv.json'])]
menu = [('Film {bullet bold}', ['/film', 'menu', '/tipologia/film/index.json']),
('Serie TV {bullet bold}', ['/serietv', 'menu', '/tipologia/serietv/index.json']),
@@ -43,14 +43,14 @@ def menu(item):
logger.debug()
itemlist = []
item.disable_videolibrary = True
action = 'peliculas'
action = 'movies'
if item.data:
for it in item.data:
url = getUrl(it['path_id'])
action = 'genres'
itemlist.append(item.clone(title=support.typo(it['name'], 'bold'), url=url.replace('.json','.html'), genre_url=url, data='', action=action))
support.thumb(itemlist, genre=True)
support.thumb(itemlist, mode='genre')
else:
items = item.data if item.data else requests.get(host + item.args).json()['contents']
for it in items:
@@ -58,7 +58,7 @@ def menu(item):
thumb = item.thumbnail
if 'RaiPlay Slider Generi Block' in it['type']:
action = 'menu'
thumb = support.thumb('genres')
thumb = support.thumb('genre')
itemlist.append(item.clone(title=support.typo(it['name'], 'bold'), data=it.get('contents', item.data), thumbnail=thumb, action=action))
return itemlist
@@ -68,7 +68,7 @@ def genres(item):
itemlist = []
items = requests.get(getUrl(item.genre_url)).json()['contents']
for title, it in items.items():
if it: itemlist.append(item.clone(title=support.typo(title, 'bold'), data=it, action='peliculas', thumbnail=support.thumb('az')))
if it: itemlist.append(item.clone(title=support.typo(title, 'bold'), data=it, action='movies', thumbnail=support.thumb('az')))
return itemlist
@@ -78,21 +78,21 @@ def search(item, text):
try:
item.data = requests.post(host + '/atomatic/raiplay-search-service/api/v3/search', json=post).json()['agg']['titoli']['cards']
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.logger.error("%s" % line)
logger.error("%s" % line)
return []
def peliculas(item):
def movies(item):
logger.debug()
return addinfo(item.data, item)
def episodios(item):
def episodes(item):
logger.debug()
itemlist = []
@@ -100,8 +100,8 @@ def episodios(item):
items = item.data
elif item.season_url:
items = requests.get(item.season_url).json()['items']
elif item.video_url:
items = requests.get(item.video_url).json()['blocks']
elif item.videoUrl:
items = requests.get(item.videoUrl).json()['blocks']
if 'sets' in items[0]:
if len(items) > 1:
@@ -119,7 +119,7 @@ def episodios(item):
def epMenu(item):
video_url = ''
videoUrl = ''
itemlist = []
for it in item.data:
if 'sets' in it:
@@ -141,9 +141,9 @@ def live(item):
current = it['currentItem']
next = it['nextItem']
plot = '[B]{}[/B]\n{}\n\nA Seguire: [B]{}[/B]\n{}'.format(current['name'], current['description'], next['name'], next['description'])
itemlist.append(item.clone(title=title, fulltitle=title, fanart=fanart, plot=plot, url=url, video_url=url + '.json', action='play'))
itemlist.append(item.clone(title=title, fulltitle=title, fanart=fanart, plot=plot, url=url, videoUrl=url + '.json', action='findvideos'))
itemlist.sort(key=lambda it: support.channels_order.get(it.fulltitle, 999))
support.thumb(itemlist, live=True)
support.thumb(itemlist, mode='live')
return itemlist
@@ -192,7 +192,7 @@ def replayChannels(item):
channel_url=channel_url,
action='replay'))
itemlist.sort(key=lambda it: support.channels_order.get(it.fulltitle, 999))
support.thumb(itemlist, live=True)
support.thumb(itemlist, mode='live')
return itemlist
def replay(item):
@@ -206,8 +206,8 @@ def replay(item):
fanart = image,
plot = info['description'],
url = getUrl(it['weblink']),
video_url = getUrl(it['path_id']),
action = 'play',
videoUrl = getUrl(it['path_id']),
action = 'findvideos',
forcethumb = True)
@@ -225,10 +225,10 @@ def replay(item):
return [Item(title='Non ci sono Replay per questo Canale')]
return itemlist
def play(item):
def findvideos(item):
logger.debug()
res = requests.get(item.video_url).json()
res = requests.get(item.videoUrl).json()
if 'first_item_path' in res:
res = requests.get(getUrl(res['first_item_path'])).json()
@@ -258,7 +258,7 @@ def getUrl(url):
def addinfo(items, item):
def itInfo(key, item):
logger.debug(jsontools.dump(key))
# logger.debug(jsontools.dump(key))
item.forcethumb = True
if key.get('titolo', ''):
key = requests.get(getUrl(key['path_id'])).json()['program_info']
@@ -279,14 +279,14 @@ def addinfo(items, item):
thumbnail= getUrl(thumb),
fanart=getUrl(fanart),
url=getUrl(key.get('weblink', '')),
video_url=getUrl(key['path_id']),
videoUrl=getUrl(key['path_id']),
plot=info.get('description', ''))
if 'Genere' not in key.get('sub_type', '') and ('layout' not in key or key['layout'] == 'single'):
it.action = 'play'
it.action = 'findvideos'
it.contentTitle = it.fulltitle
else:
it.action = 'episodios'
it.action = 'episodes'
it.contentSerieName = it.fulltitle
return it

View File

@@ -5,8 +5,9 @@
from core import support
def findhost(url):
return support.match(url, patron=r'<h2[^>]+><a href="([^"]+)"').match
from platformcode import logger
# def findhost(url):
# return support.match(url, patron=r'<h2[^>]+><a href="([^"]+)"').match
host = support.config.get_channel_url()
headers = [['Referer', host]]
@@ -17,64 +18,64 @@ def mainlist(item):
tvshow = [('Genere', ['', 'menu', 'genre']),
('A-Z', ['', 'menu', 'a-z']),
('In Corso', ['/category/serie-tv-streaming/serie-in-corso', 'peliculas']),
('Complete', ['/category/serie-tv-streaming/serie-complete', 'peliculas']),
('Americane', ['/category/serie-tv-streaming/serie-tv-americane', 'peliculas']),
('Italiane', ['/category/serie-tv-streaming/serie-tv-italiane', 'peliculas']),
('Ultimi Episodi', ['/aggiornamenti', 'peliculas', 'last']),
('Evidenza', ['', 'peliculas', 'best'])]
('In Corso', ['/category/serie-tv-streaming/serie-in-corso', 'movies']),
('Complete', ['/category/serie-tv-streaming/serie-complete', 'movies']),
('Americane', ['/category/serie-tv-streaming/serie-tv-americane', 'movies']),
('Italiane', ['/category/serie-tv-streaming/serie-tv-italiane', 'movies']),
('Ultimi Episodi', ['/aggiornamenti', 'movies', 'last']),
('Evidenza', ['', 'movies', 'best'])]
return locals()
def search(item, texto):
support.info(texto)
logger.debug(texto)
item.contentType = 'tvshow'
item.url = host + "/?s=" + texto
try:
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore .
except:
import sys
for line in sys.exc_info():
support.logger.error("%s" % line)
logger.error("%s" % line)
return []
def newest(categoria):
support.info(categoria)
def newest(category):
logger.debug(category)
itemlist = []
item = support.Item()
item.url = host + '/aggiornamenti'
item.args = 'last'
try:
if categoria == "series":
if category == 'tvshow':
item.contentType = 'tvshow'
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.logger.error("{0}".format(line))
logger.error("{0}".format(line))
return []
return itemlist
@support.scrape
def peliculas(item):
def movies(item):
# debug = True
if item.args == 'last':
action = 'findvideos'
patron = r'singleUpdate">(?:[^>]+>){2}\s*<img src="(?P<thumb>[^"]+)"(?:[^>]+>){3}\s*<h2>(?P<title>[^<]+)<(?:[^>]+>){14,16}\s*<a href="(?P<url>[^"]+)">(?:[^>]+>){3}\s*(?P<season>\d+)\D+(?P<episode>\d+)(?:[^\(]*\()?(?P<lang>[^\)]+)?(?:\))?'
elif item.args == 'best':
action='episodios'
action='episodes'
patron = r'col-md-3">\s*<a href="(?P<url>[^"]+)">[^>]+>\s*<div class="infoVetrina">[^>]+>(?P<year>\d{4})(?:[^>]+>){2}(?P<title>[^<]+)<(?:[^>]+>){4}(?P<rating>[^<]+)(?:[^>]+>){4}\s*<img src="(?P<thumb>[^"]+)"'
else:
action='episodios'
action='episodes'
# patron = r'<a href="(?P<url>[^"]+)">[^>]+>\s*<div class="infoSeries">\s*<h2>(?P<title>[^<]+)<(?:[^>]+>){5}(?P<rating>[^<]+)?(?:[^>]+>){3}\s*<img src="(?P<thumb>[^"]+)"(?:[^>]+>){3}(?P<quality>[^<]+)<(?:[^>]+>){2}(?P<year>\d{4})'
patron = r'<a href="(?P<url>[^"]+)">[^>]+>\s*<div class="infoSeries">\s*<h2>(?P<title>[^<]+?)(?:\[(?P<lang>[^\]]+)\])?<(?:[^>]+>){5}(?P<rating>[^<]+)?(?:[^>]+>){3}\s*(?:<img src="(?P<thumb>[^"]+)"[^>]+>)?(?:[^>]+>){0,2}(?P<quality>[^<]+)<(?:[^>]+>){2}(?P<year>\d{4})'
patronNext=r'next page-numbers" href="([^"]+)"'
@@ -83,7 +84,7 @@ def peliculas(item):
@support.scrape
def episodios(item):
def episodes(item):
def get_season(pageData, seas_url, season):
data = ''
episodes = support.match(pageData if pageData else seas_url, patronBlock=patron_episode, patron=patron_option).matches
@@ -104,7 +105,7 @@ def episodios(item):
data = ''
# debugging
# support.dbg()
# logger.dbg()
# for i, season in enumerate(seasons.matches):
# data += get_season(seasons.data if i == 0 else '', season[0], season[1])
import sys
@@ -136,13 +137,13 @@ def menu(item):
patronMenu = r'<a href="(?P<url>[^"]+)" class="">(?P<title>[^<]+)'
blacklist = ['Serie TV Streaming','Serie TV Americane','Serie TV Italiane','Serie Complete','Serie in Corso','altadefinizione']
action = 'peliculas'
action = 'movies'
return locals()
def findvideos(item):
item.url = item.url.replace('&amp;', '&')
support.info(item)
logger.debug(item)
if item.args == 'last':
url = support.match(item, patron = r'<iframe id="iframeVid" width="[^"]+" height="[^"]+" src="([^"]+)" allowfullscreen').match
matches = support.match(url,patron=r'<a href="([^"]+)">(\d+)<', patronBlock=r'<h3>EPISODIO</h3><ul>(.*?)</ul>').matches

View File

@@ -15,9 +15,9 @@
Altrimenti:
- Prima fare la 'Rinumerazione' dal menu contestuale dal titolo della serie
"""
import re
from core import support, httptools, scrapertools
from platformcode import config
from core import support, scrapertools
from platformcode import config, logger
from core.item import Item
@@ -31,33 +31,33 @@ headers = [['Referer', host]]
@support.menu
def mainlist(item):
support.info()
logger.debug()
film = ['/ultimi-film-aggiunti/',
('A-Z', ['/lista-film/', 'peliculas', 'lista'])
('A-Z', ['/lista-film/', 'movies', 'lista'])
]
tvshow = ['',
('Aggiornamenti', ['/ultimi-episodi-aggiunti/', 'peliculas', 'update']),
('Tutte', ['/lista-serie-tv/', 'peliculas', 'qualcosa']),
('Italiane', ['/lista-serie-tv-italiane/', 'peliculas', 'qualcosa']),
('Anni 50-60-70-80', ['/lista-serie-tv-anni-60-70-80/', 'peliculas', 'qualcosa']),
('HD', ['/lista-serie-tv-in-altadefinizione/', 'peliculas', 'qualcosa'])
('Aggiornamenti', ['/ultimi-episodi-aggiunti/', 'movies', 'update']),
('Tutte', ['/lista-serie-tv/', 'movies', 'qualcosa']),
('Italiane', ['/lista-serie-tv-italiane/', 'movies', 'qualcosa']),
('Anni 50-60-70-80', ['/lista-serie-tv-anni-60-70-80/', 'movies', 'qualcosa']),
('HD', ['/lista-serie-tv-in-altadefinizione/', 'movies', 'qualcosa'])
]
anime = ['/lista-cartoni-animati-e-anime/']
documentari = [('Documentari {bullet bold}', ['/lista-documentari/' , 'peliculas' , 'doc', 'tvshow'])]
documentari = [('Documentari {bullet bold}', ['/lista-documentari/' , 'movies' , 'doc', 'tvshow'])]
search = ''
return locals()
@support.scrape
def peliculas(item):
support.info()
anime = True
def movies(item):
logger.debug()
numerationEnabled = True
blacklist = ['DMCA', 'Contatti', 'Attenzione NON FARTI OSCURARE', 'Lista Cartoni Animati e Anime']
patronBlock = r'<h1>.+?</h1>(?P<block>.*?)<div class="footer_c">'
@@ -68,22 +68,22 @@ def peliculas(item):
patronBlock = r'>Lista Serie Tv</a></li></ul></div><div id="box_movies">(?P<block>.*?)<div id="paginador">'
patron = r'<div class="movie">[^>]+[^>]+>\s*<img src="(?P<thumb>[^"]+)" alt="(?P<title>.+?)(?:(?P<year>\d{4})|")[^>]*>\s*<a href="(?P<url>[^"]+)'
elif item.contentType == 'episode':
pagination = 35
pagination = True
action = 'findvideos'
patron = r'<td><a href="(?P<url>[^"]+)"(?:[^>]+)?>\s?(?P<title>.*?)(?P<episode>\d+x\d+)[ ]?(?P<title2>[^<]+)?<'
elif item.contentType == 'tvshow':
# SEZIONE Serie TV- Anime - Documentari
pagination = 35
pagination = True
if not item.args and 'anime' not in item.url:
patron = r'<div class="movie">[^>]+>.+?src="(?P<thumb>[^"]+)" alt="[^"]+".+? href="(?P<url>[^"]+)">.*?<h2>(?P<title>[^"]+)</h2>\s?(?:<span class="year">(?P<year>\d+|\-\d+))?<'
else:
anime = True
numerationEnabled = True
patron = r'(?:<td>)?<a href="(?P<url>[^"]+)"(?:[^>]+)?>\s?(?P<title>[^<]+)(?P<episode>[\d\-x]+)?(?P<title2>[^<]+)?<'
else:
# SEZIONE FILM
pagination = 25
pagination = True
if item.args == 'lista':
patron = r'href="(?P<url>[^"]+)"[^>]+>(?P<title>.+?)(?:\s(?P<year>\d{4})|<)'
@@ -99,15 +99,15 @@ def peliculas(item):
pass
else:
item.contentType = 'tvshow'
item.action = 'episodios'
item.action = 'episodes'
return item
return locals()
@support.scrape
def episodios(item):
support.info()
anime = True
def episodes(item):
logger.debug()
numerationEnabled = True
action = 'findvideos'
patronBlock = r'<table>(?P<block>.*)<\/table>'
patron = r'<tr><td>(?P<title>.*?)?[ ](?:Parte)?(?P<episode>\d+x\d+|\d+)(?:|[ ]?(?P<title2>.+?)?(?:avi)?)<(?P<data>.*?)<\/td><tr>'
@@ -121,47 +121,47 @@ def episodios(item):
def search(item, text):
support.info("CERCA :" ,text, item)
logger.debug("CERCA :" ,text, item)
item.url = "%s/?s=%s" % (host, text)
try:
item.args = 'search'
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.info("%s" % line)
logger.error("%s" % line)
return []
def newest(categoria):
support.info(categoria)
def newest(category):
logger.debug(category)
itemlist = []
item = Item()
if categoria == 'peliculas':
if category == 'movie':
item.contentType = 'movie'
item.url = host + '/ultimi-film-aggiunti/'
elif categoria == 'series':
elif category == 'tvshow':
item.args = 'update'
item.contentType = 'episode'
item.url = host +'/ultimi-episodi-aggiunti/'
try:
item.action = 'peliculas'
itemlist = peliculas(item)
item.action = 'movies'
itemlist = movies(item)
except:
import sys
for line in sys.exc_info():
support.info("{0}".format(line))
logger.error("{0}".format(line))
return []
return itemlist
def findvideos(item):
support.info()
logger.debug()
if item.contentType == 'movie':
return support.server(item, headers=headers)
else:
@@ -179,6 +179,6 @@ def findvideos(item):
series = support.typo(item.contentSerieName, ' bold color kod')
itemlist = support.server(item, data=url_video)
itemlist.append(item.clone(title=goseries + series, contentType='tvshow', url=url_serie, action='episodios', plot = goseries + series + "con tutte le puntate", args=''))
itemlist.append(item.clone(title=goseries + series, contentType='tvshow', url=url_serie, action='episodes', plot = goseries + series + "con tutte le puntate", args=''))
return itemlist

View File

@@ -16,7 +16,7 @@
"visible": true
},
{
"id": "include_in_newest_series",
"id": "include_in_newest_tvshow",
"type": "bool",
"label": "Includi in Novità - Serie TV",
"default": true,

View File

@@ -9,7 +9,6 @@ import time
from core import httptools, tmdb, scrapertools, support
from core.item import Item
from core.support import info
from platformcode import logger, config
host = config.get_channel_url()
@@ -21,10 +20,9 @@ list_language = IDIOMAS.values()
@support.menu
def mainlist(item):
info()
itemlist = []
tvshowSub = [
('Novità {bold}',[ '', 'peliculas_tv', '', 'tvshow']),
('Novità {bold}',[ '', 'movies_tv', '', 'tvshow']),
('Serie TV {bold}',[ '', 'lista_serie', '', 'tvshow']),
('Per Lettera', ['', 'list_az', 'serie', 'tvshow'])
]
@@ -52,12 +50,12 @@ def cleantitle(scrapedtitle):
# ----------------------------------------------------------------------------------------------------------------
def findvideos(item):
info()
logger.debug()
data = httptools.downloadpage(item.url, headers=headers, ignore_response_code=True).data
data = re.sub(r'\n|\t|\s+', ' ', data)
# recupero il blocco contenente i link
blocco = scrapertools.find_single_match(data, r'<div class="entry">([\s\S.]*?)<div class="post').replace('..:: Episodio ', 'Episodio ').strip()
matches = scrapertools.find_multiple_matches(blocco, r'(S(\d*)E(\d*))\s')
matches = scrapertools.findMultipleMatches(blocco, r'(S(\d*)E(\d*))\s')
if len(matches) > 0:
for fullseasonepisode, season, episode in matches:
blocco = blocco.replace(fullseasonepisode + ' ', 'Episodio ' + episode + ' ')
@@ -66,10 +64,10 @@ def findvideos(item):
episodio = item.infoLabels['episode']
patron = r'\.\.:: Episodio %s([\s\S]*?)(<div class="post|..:: Episodio)' % episodio
info(patron)
info(blocco)
logger.debug(patron)
logger.debug(blocco)
matches = scrapertools.find_multiple_matches(blocco, patron)
matches = scrapertools.findMultipleMatches(blocco, patron)
if len(matches):
data = matches[0][0]
@@ -80,7 +78,7 @@ def findvideos(item):
['Referer', keeplinks]]
html = httptools.downloadpage(keeplinks, headers=headers2).data
data += str(scrapertools.find_multiple_matches(html, '</lable><a href="([^"]+)" target="_blank"'))
data += str(scrapertools.findMultipleMatches(html, '</lable><a href="([^"]+)" target="_blank"'))
return support.server(item, data=data)
@@ -89,7 +87,7 @@ def findvideos(item):
# ----------------------------------------------------------------------------------------------------------------
def lista_serie(item):
info()
logger.debug()
itemlist = []
PERPAGE = 15
@@ -112,7 +110,7 @@ def lista_serie(item):
if i >= p * PERPAGE: break
title = cleantitle(scrapedtitle)
itemlist.append(
item.clone(action="episodios",
item.clone(action="episodes",
title=title,
url=scrapedurl,
thumbnail=scrapedthumbnail,
@@ -136,8 +134,8 @@ def lista_serie(item):
# ----------------------------------------------------------------------------------------------------------------
def episodios(item, itemlist=[]):
info()
def episodes(item, itemlist=[]):
logger.debug()
patron = r'<div class="post-meta">\s*<a href="([^"]+)"\s*title="([^"]+)"\s*class=".*?"></a>.*?'
patron += r'<p><a href="([^"]+)">'
@@ -159,7 +157,7 @@ def episodios(item, itemlist=[]):
blocco = scrapertools.find_single_match(data, r'<div class="entry">[\s\S.]*?<div class="post')
blocco = blocco.replace('<strong>Episodio ', '<strong>Episodio ').replace(' </strong>', ' </strong>')
blocco = blocco.replace('<strong>Episodio ', '<strong>S' + season.zfill(2) + 'E')
matches = scrapertools.find_multiple_matches(blocco, r'(S(\d*)E(\d*))\s')
matches = scrapertools.findMultipleMatches(blocco, r'(S(\d*)E(\d*))\s')
episodes = []
if len(matches) > 0:
for fullepisode_s, season, episode in matches:
@@ -175,7 +173,7 @@ def episodios(item, itemlist=[]):
title = scrapedtitle.split(" S0")[0].strip()
title = title.split(" S1")[0].strip()
title = title.split(" S2")[0].strip()
episodes = scrapertools.find_multiple_matches(scrapedtitle, r'((\d*)x(\d*))')
episodes = scrapertools.findMultipleMatches(scrapedtitle, r'((\d*)x(\d*))')
for fullepisode, season, episode in episodes:
infoLabels = {}
@@ -200,7 +198,7 @@ def episodios(item, itemlist=[]):
next_page = scrapertools.find_single_match(data, patron)
if next_page != "":
item.url = next_page
itemlist = episodios(item, itemlist)
itemlist = episodes(item, itemlist)
else:
item.url = item.originalUrl
support.videolibrary(itemlist, item, 'bold color kod')
@@ -211,8 +209,8 @@ def episodios(item, itemlist=[]):
# ================================================================================================================
# ----------------------------------------------------------------------------------------------------------------
def peliculas_tv(item):
info()
def movies_tv(item):
logger.debug()
itemlist = []
patron = r'<div class="post-meta">\s*<a href="([^"]+)"\s*title="([^"]+)"\s*class=".*?"></a>'
@@ -229,7 +227,7 @@ def peliculas_tv(item):
scrapedplot = ""
scrapedtitle = cleantitle(scrapedtitle)
infoLabels = {}
episode = scrapertools.find_multiple_matches(scrapedtitle, r'((\d*)x(\d*))')
episode = scrapertools.findMultipleMatches(scrapedtitle, r'((\d*)x(\d*))')
if episode: # workaround per quando mettono le serie intere o altra roba, sarebbero da intercettare TODO
episode = episode[0]
title = scrapedtitle.split(" S0")[0].strip()
@@ -255,7 +253,7 @@ def peliculas_tv(item):
# Paginazione
patron = r'<strong class="on">\d+</strong>\s?<a href="([^<]+)">\d+</a>'
support.nextPage(itemlist, item, data, patron)
support.nextPage(itemlist, item, data=data, patron=patron)
return itemlist
@@ -264,16 +262,16 @@ def peliculas_tv(item):
# ----------------------------------------------------------------------------------------------------------------
def newest(categoria):
info(categoria)
def newest(category):
logger.debug(category)
itemlist = []
item = Item()
item.url = host
item.extra = 'serie'
try:
if categoria == "series":
itemlist = peliculas_tv(item)
if itemlist[-1].action == 'peliculas_tv':
if category == 'tvshow':
itemlist = movies_tv(item)
if itemlist[-1].action == 'movies_tv':
itemlist.pop(-1)
except:
@@ -289,7 +287,7 @@ def newest(categoria):
# ----------------------------------------------------------------------------------------------------------------
def search(item, texto):
info(texto)
logger.debug(texto)
itemlist = []
try:
patron = r'<li class="cat-item cat-item-\d+"><a href="([^"]+)"\s?>([^<]+)</a>'
@@ -300,7 +298,7 @@ def search(item, texto):
scrapedplot = ""
title = cleantitle(scrapedtitle)
itemlist.append(
item.clone(action="episodios",
item.clone(action="episodes",
title=title,
url=scrapedurl,
thumbnail=scrapedthumbnail,
@@ -313,7 +311,7 @@ def search(item, texto):
except:
import sys
for line in sys.exc_info():
support.info('search log:', line)
logger.error('search log:', line)
return []
return itemlist
@@ -325,7 +323,7 @@ def search(item, texto):
def list_az(item):
info()
logger.debug()
itemlist = []
alphabet = dict()

View File

@@ -5,7 +5,7 @@
"language": ["ita", "sub-ita"],
"thumbnail": "serietvu.png",
"banner": "serietvu.png",
"categories": ["tvshow", "vos"],
"not_active": ["include_in_newest_peliculas", "include_in_newest_anime"],
"categories": ["tvshow", "sub"],
"not_active": ["include_in_newest_movie", "include_in_newest_anime"],
"settings": []
}

View File

@@ -8,10 +8,9 @@
"""
import re
from core import support, httptools, scrapertools
from core import support
from core.item import Item
from core.support import info
from platformcode import config
from platformcode import config, logger
host = config.get_channel_url()
headers = [['Referer', host]]
@@ -24,7 +23,7 @@ headers = [['Referer', host]]
def mainlist(item):
tvshow = ['/category/serie-tv',
('Ultimi episodi', ['/ultimi-episodi/', 'peliculas', 'update']),
('Ultimi episodi', ['/ultimi-episodi/', 'movies', 'update']),
('Generi', ['', 'genres', 'genres'])
]
@@ -32,31 +31,31 @@ def mainlist(item):
@support.scrape
def peliculas(item):
def movies(item):
# debug=True
patronBlock = r'<div class="wrap">\s*<h.>.*?</h.>(?P<block>.*?)<footer>'
if item.args != 'update':
action = 'episodios'
action = 'episodes'
patron = r'<div class="item">\s*?<a href="(?P<url>[^"]+)" data-original="(?P<thumb>[^"]+)" class="lazy inner">(?:[^>]+>){4}(?P<title>[^<]+)<'
else:
action = 'findvideos'
patron = r'<div class="item">\s*?<a href="(?P<url>[^"]+)"\s*?data-original="(?P<thumb>[^"]+)"(?:[^>]+>){5}(?P<title>.+?)<[^>]+>\((?P<episode>[\dx\-]+)\s+?(?P<lang>Sub-Ita|[iITtAa]+)\)<'
pagination = 25
pagination = True
patronNext = r'<li><a href="([^"]+)"\s+?>Pagina successiva'
return locals()
@support.scrape
def episodios(item):
def episodes(item):
seasons = support.match(item, patron=r'<option value="(\d+)"[^>]*>\D+(\d+)').matches
patronBlock = r'</select><div style="clear:both"></div></h2>(?P<block>.*?)<div id="trailer" class="tab">'
patron = r'(?:<div class="list (?:active)?")?\s*<a data-id="\d+(?:[ ](?P<lang>[SuUbBiItTaA\-]+))?"(?P<other>[^>]+)>.*?Episodio [0-9]+\s?(?:<br>(?P<title>[^<]+))?.*?Stagione (?P<season>[0-9]+) , Episodio - (?P<episode>[0-9]+).*?<(?P<url>.*?<iframe)'
def itemHook(i):
for value, season in seasons:
info(value)
info(season)
logger.debug(value)
logger.debug(season)
i.title = i.title.replace(value+'x',season+'x')
i.other += '\n' + i.url
i.url = item.url
@@ -67,50 +66,50 @@ def episodios(item):
@support.scrape
def genres(item):
blacklist = ["Home Page", "Calendario Aggiornamenti"]
action = 'peliculas'
action = 'movies'
patronBlock = r'<h2>Sfoglia</h2>\s*<ul>(?P<block>.*?)</ul>\s*</section>'
patronMenu = r'<li><a href="(?P<url>[^"]+)">(?P<title>[^<]+)</a></li>'
return locals()
def search(item, text):
info(text)
logger.debug(text)
item.url = host + "/?s=" + text
try:
item.contentType = 'tvshow'
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
info("%s" % line)
logger.debug("%s" % line)
return []
def newest(categoria):
info(categoria)
def newest(category):
logger.debug(category)
itemlist = []
item = Item()
try:
if categoria == "series":
if category == 'tvshow':
item.url = host + "/ultimi-episodi"
item.action = "peliculas"
item.action = "movies"
item.contentType = 'tvshow'
item.args = 'update'
itemlist = peliculas(item)
itemlist = movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
info("{0}".format(line))
logger.error("{0}".format(line))
return []
return itemlist
def findvideos(item):
info(item)
logger.debug(item)
if item.args != 'update':
return support.server(item, data=item.other)
else:
@@ -127,7 +126,7 @@ def findvideos(item):
item.clone(title=support.typo("Vai alla Serie Completa: " + item.fulltitle, ' bold'),
contentType='tvshow',
url=url_serie,
action='episodios',
action='episodes',
thumbnail = support.thumb('tvshow')))
return itemlist

View File

@@ -6,6 +6,6 @@
"thumbnail": "popcornstream.png",
"banner": "popcornstream.png",
"categories": ["movie","tvshow","anime"],
"not_active":["include_in_newest_peliculas", "include_in_newest_series", "include_in_newest_anime"],
"not_active":["include_in_newest_movie", "include_in_newest_tvshow", "include_in_newest_anime"],
"settings": []
}

View File

@@ -4,8 +4,7 @@
# ------------------------------------------------------------
from core import support, httptools
from core.item import Item
from platformcode import config
from platformcode import config, logger
import sys
if sys.version_info[0] >= 3:
from urllib.parse import unquote
@@ -32,14 +31,14 @@ def mainlist(item):
def search(item, text):
support.info("[streamingaltadefinizione.py] " + item.url + " search " + text)
logger.debug(text)
item.url = item.url + "/?s=" + text
try:
return support.dooplay_search(item)
except:
import sys
for line in sys.exc_info():
support.logger.error("%s" % line)
logger.error("%s" % line)
return []
@@ -47,16 +46,16 @@ def search(item, text):
def genre(item):
patronMenu = '<a href="(?P<url>[^"#]+)">(?P<title>[a-zA-Z]+)'
patronBlock='<a href="#">Genere</a><ul class="sub-menu">(?P<block>.*?)</ul>'
action='peliculas'
action='movies'
return locals()
def peliculas(item):
return support.dooplay_peliculas(item, True if "/genere/" in item.url else False)
def movies(item):
return support.dooplay_movies(item, True if "/genere/" in item.url else False)
def episodios(item):
def episodes(item):
return support.dooplay_get_episodes(item)

View File

@@ -6,5 +6,15 @@
"thumbnail": "streamingcommunity.png",
"banner": "streamingcommunity.png",
"categories": ["movie","tvshow"],
"settings": []
"settings": [
{
"id": "pagination",
"type": "list",
"label": "Pagination",
"default": 1,
"enabled": true,
"visible": true,
"lvalues": ["10", "20", "30", "40", "50", "60"]
}
]
}

View File

@@ -4,42 +4,56 @@
# ------------------------------------------------------------
import json, requests, sys
from core import support, channeltools
from platformcode import logger
from core import support, channeltools, jsontools
from platformcode import config, logger
if sys.version_info[0] >= 3:
from concurrent import futures
else:
from concurrent_py2 import futures
host = support.config.get_channel_url()
def findhost(url):
matches = support.match(url, patron='<a href="([^"]+)" target="_blank"').matches
if matches:
return matches[-1]
host = support.config.get_channel_url(findhost)
session = requests.Session()
headers = {}
perpage = config.getSetting('pagination', 'streamingcommunity', default=1) * 10 + 10
def getHeaders():
def getHeaders(forced=False):
global headers
global host
if not headers:
headers = {'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14'}
response = session.get(host, headers=headers)
csrf_token = support.match(response.text, patron='name="csrf-token" content="([^"]+)"').match
headers = {'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14',
'content-type': 'application/json;charset=UTF-8',
'Referer': host,
'x-csrf-token': csrf_token,
'Cookie': '; '.join([x.name + '=' + x.value for x in response.cookies])}
try:
headers = {'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14'}
response = session.get(host, headers=headers)
if not response.url.startswith(host):
host = support.config.get_channel_url(findhost, forceFindhost=True)
csrf_token = support.match(response.text, patron='name="csrf-token" content="([^"]+)"').match
headers = {'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14',
'content-type': 'application/json;charset=UTF-8',
'Referer': host,
'x-csrf-token': csrf_token,
'Cookie': '; '.join([x.name + '=' + x.value for x in response.cookies])}
except:
host = support.config.get_channel_url(findhost, forceFindhost=True)
if not forced: getHeaders(True)
getHeaders()
@support.menu
def mainlist(item):
film=['',
('Generi',['/film','genres']),
('Titoli del Momento',['/film','peliculas',0]),
('Novità',['/film','peliculas',1]),
('Popolari',['/film','peliculas',2])]
('Titoli del Momento',['/film','movies',0]),
('Novità',['/film','movies',1]),
('Popolari',['/film','movies',2])]
tvshow=['',
('Generi',['/serie-tv','genres']),
('Titoli del Momento',['/serie-tv','peliculas',0]),
('Novità',['/serie-tv','peliculas',1]),
('Popolari',['/serie-tv','peliculas',2])]
('Titoli del Momento',['/serie-tv','movies',0]),
('Novità',['/serie-tv','movies',1]),
('Popolari',['/serie-tv','movies',2])]
search=''
return locals()
@@ -51,8 +65,8 @@ def genres(item):
data = support.scrapertools.decodeHtmlentities(support.match(item).data)
args = support.match(data, patronBlock=r'genre-options-json="([^\]]+)\]', patron=r'name"\s*:\s*"([^"]+)').matches
for arg in args:
itemlist.append(item.clone(title=support.typo(arg, 'bold'), args=arg, action='peliculas'))
support.thumb(itemlist, genre=True)
itemlist.append(item.clone(title=support.typo(arg, 'bold'), args=arg, action='movies'))
support.thumb(itemlist, mode=True)
return itemlist
@@ -61,7 +75,7 @@ def search(item, text):
item.search = text
try:
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
@@ -75,15 +89,17 @@ def newest(category):
itemlist = []
item = support.Item()
item.args = 1
if category == 'peliculas':
if category == 'movie':
item.contentType= 'movie'
item.url = host + '/film'
else:
item.contentType= 'tvshow'
item.url = host + '/serie-tv'
try:
itemlist = peliculas(item)
itemlist = movies(item)
if itemlist[-1].action == 'peliculas':
if itemlist[-1].action == 'movies':
itemlist.pop()
# Continua la ricerca in caso di errore
except:
@@ -96,20 +112,19 @@ def newest(category):
def peliculas(item):
def movies(item):
# getHeaders()
logger.debug()
itemlist = []
recordlist = []
videoType = 'movie' if item.contentType == 'movie' else 'tv'
page = item.page if item.page else 0
offset = page * 60
if item.records:
records = item.records
elif type(item.args) == int:
offset = page * perpage
if type(item.args) == int:
data = support.scrapertools.decodeHtmlentities(support.match(item).data)
records = json.loads(support.match(data, patron=r'slider-title titles-json="(.*?)" slider-name="').matches[item.args])
elif not item.search:
payload = json.dumps({'type': videoType, 'offset':offset, 'genre':item.args})
records = session.post(host + '/api/browse', headers=headers, data=payload).json()['records']
@@ -123,30 +138,36 @@ def peliculas(item):
js += record
else:
js = records
logger.debug(jsontools.dump(js))
itemlist = makeItems(item, js)
for i, it in enumerate(js):
if i < 20:
itemlist.append(makeItem(i, it, item))
else:
recordlist.append(it)
itemlist.sort(key=lambda item: item.n)
if recordlist:
itemlist.append(item.clone(title=support.typo(support.config.get_localized_string(30992), 'color kod bold'), thumbnail=support.thumb(), page=page, records=recordlist))
elif len(itemlist) >= 20:
itemlist.append(item.clone(title=support.typo(support.config.get_localized_string(30992), 'color kod bold'), thumbnail=support.thumb(), records=[], page=page + 1))
support.tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
if len(itemlist) == perpage:
support.nextPage(itemlist, item, 'movies', page=page + 1)
return itemlist
def makeItems(item, items):
itemlist = []
with futures.ThreadPoolExecutor() as executor:
itlist = [executor.submit(makeItem, n, it, item) for n, it in enumerate(items) if n < perpage]
for res in futures.as_completed(itlist):
if res.result():
itemlist.append(res.result())
itemlist.sort(key=lambda item: item.n)
return itemlist
def makeItem(n, it, item):
info = session.post(host + '/api/titles/preview/{}'.format(it['id']), headers=headers).json()
title, lang = support.match(info['name'], patron=r'([^\[|$]+)(?:\[([^\]]+)\])?').match
if not lang:
lang = 'ITA'
itm = item.clone(title=support.typo(title,'bold') + support.typo(lang,'_ [] color kod bold'))
itm.contentType = info['type'].replace('tv', 'tvshow')
itm.language = lang
itm.year = info['release_date'].split('-')[0]
itm = item.clone(title=title, contentType = info['type'].replace('tv', 'tvshow'), contentLanguage = lang, year = info['release_date'].split('-')[0])
if itm.contentType == 'movie':
@@ -160,13 +181,13 @@ def makeItem(n, it, item):
# itm.contentType = 'tvshow'
itm.contentTitle = ''
itm.fulltitle = itm.show = itm.contentSerieName = title
itm.action = 'episodios'
itm.action = 'episodes'
itm.season_count = info['seasons_count']
itm.url = host + '/titles/%s-%s' % (it['id'], it['slug'])
itm.n = n
return itm
def episodios(item):
def episodes(item):
# getHeaders()
logger.debug()
itemlist = []
@@ -176,16 +197,15 @@ def episodios(item):
for episodes in js:
for it in episodes['episodes']:
itemlist.append(
support.Item(channel=item.channel,
title=support.typo(str(episodes['number']) + 'x' + str(it['number']).zfill(2) + ' - ' + it['name'], 'bold'),
episode = it['number'],
season=episodes['number'],
item.clone(
contentEpisodeNumber = it['number'],
contentSeason=episodes['number'],
thumbnail=it['images'][0]['original_url'] if 'images' in it and 'original_url' in it['images'][0] else item.thumbnail,
fanart=item.fanart,
plot=it['plot'],
action='findvideos',
contentType='episode',
contentSerieName=item.fulltitle,
contentTitle=support.cleantitle(it['name']),
url=host + '/watch/' + str(episodes['title_id']),
episodeid= '?e=' + str(it['id'])))
@@ -195,34 +215,26 @@ def episodios(item):
def findvideos(item):
video_urls = []
data = support.match(item.url + item.episodeid, headers=headers).data.replace('&quot;','"').replace('\\','')
url = support.match(data, patron=r'video_url"\s*:\s*"([^"]+)"').match
channelParams = channeltools.get_channel_parameters(item.channel)
itemlist = [item.clone(title = channelParams['title'], server='directo', thumbnail=channelParams["thumbnail"], forcethumb=True, action='play')]
return support.server(item, itemlist=itemlist)
def calculateToken():
from time import time
from base64 import b64encode as b64
import hashlib
o = 48
n = support.match(host + '/client-address').data
i = 'Yc8U6r8KjAKAepEA'
t = int(time() + (3600 * o))
l = '{}{} {}'.format(t, n, i)
md5 = hashlib.md5(l.encode())
s = '?token={}&expires={}'.format(b64(md5.digest()).decode().replace('=', '').replace('+', "-").replace('\\', "_"), t)
return s
token = calculateToken()
def play(item):
from time import time
from base64 import b64encode
from hashlib import md5
def videourls(res):
newurl = '{}/{}{}'.format(url, res, token)
if requests.head(newurl, headers=headers).status_code == 200:
video_urls.append(["m3u8 {} [StreamingCommunity]".format(res), newurl])
data = support.httptools.downloadpage(item.url + item.episodeid, headers=headers).data.replace('&quot;','"').replace('\\','')
scws_id = support.match(data, patron=r'scws_id"\s*:\s*(\d+)').match
with futures.ThreadPoolExecutor() as executor:
for res in ['480p', '720p', '1080p']:
executor.submit(videourls, res)
if not scws_id:
return []
if not video_urls: video_urls = [["m3u8 [StreamingCommunity]", url + token]]
else: video_urls.sort(key=lambda url: int(support.match(url[0], patron=r'(\d+)p').match))
itemlist = [item.clone(title = channeltools.get_channel_parameters(item.channel)['title'], server='directo', video_urls=video_urls, thumbnail=channeltools.get_channel_parameters(item.channel)["thumbnail"], forcethumb=True)]
return support.server(item, itemlist=itemlist)
# Calculate Token
client_ip = support.httptools.downloadpage('https://scws.xyz/videos/' + scws_id, headers=headers).json.get('client_ip')
expires = int(time() + 172800)
token = b64encode(md5('{}{} Yc8U6r8KjAKAepEA'.format(expires, client_ip).encode('utf-8')).digest()).decode('utf-8').replace('=', '').replace('+', '-').replace('/', '_')
url = 'https://scws.xyz/master/{}?token={}&expires={}&n=1'.format(scws_id, token, expires)
return [item.clone(server='directo', url=url, manifest='hls')]

View File

@@ -24,7 +24,7 @@ def mainlist(item):
@support.scrape
def peliculas(item):
def movies(item):
patron = """tgme_widget_message_photo_wrap.*?image:url\("(?P<thumbnail>[^"]+).*?//telegram\.org/img/emoji/40/(?:F09F8EAC|F09F8EA5)\.png"\)">.*?</i>\s?(?:<b>)?(?P<title>[^<]+).*?(?:Audio(?:</b>)?: (?P<lang>.*?<br>))?.*?Anno(?:</b>)?: (?P<year>[0-9]{4}).*?(?:<b>Stream</b>|Risoluzione|<b>Tipo</b>|Tipo|Stream): (?P<quality>[^<]+).*?tgme_widget_message_inline_button url_button" href="(?P<url>[^"]+)"""
def itemlistHook(itemlist):
retItemlist = []
@@ -34,7 +34,7 @@ def peliculas(item):
i.contentType = 'movie'
if '/SerieTv/' in i.url:
i.contentType = 'tvshow'
i.action = 'episodios'
i.action = 'episodes'
if item.contentType == i.contentType or item.contentType == 'list': # list = ricerca globale quando c'è un solo tipo di risultato
retItemlist.append(i)
# rimuovo duplicati
@@ -66,14 +66,14 @@ def peliculas(item):
# return item
if item.contentType == 'tvshow':
action = 'episodios'
action = 'episodes'
return locals()
def search(item, texto):
item.url = host + "/?q=" + texto
try:
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
@@ -82,19 +82,19 @@ def search(item, texto):
return []
def newest(categoria):
def newest(category):
item = Item()
if categoria == "series":
if category == 'tvshow':
item.contentType = 'tvshow'
item.url = host + '?q=%23SerieTv'
else:
item.contentType = 'movie'
item.url = host + '?q=%23Film'
return peliculas(item)
return movies(item)
# cerco il titolo, così mi escono fuori tutti i messaggi contenenti puntate singole o serie
def episodios(item):
def episodes(item):
url = item.url
item.cercaSerie = True
itemlist = search(item, item.fulltitle.replace("'", ""))
@@ -134,7 +134,7 @@ def episodios(item):
def findvideos(item):
# support.dbg()
# logger.dbg()
domain = scrapertools.find_single_match(item.url, 'https?://[a-z0-9.-]+')
if item.contentType == 'movie':
id = item.url.split('/')[-1]

View File

@@ -6,6 +6,6 @@
"thumbnail": "tantifilm.png",
"banner": "tantifilm.png",
"categories": ["tvshow", "movie", "anime"],
"not_active":["include_in_newest_anime", "include_in_newest_peliculas"],
"not_active":["include_in_newest_anime", "include_in_newest_movie"],
"settings": []
}

View File

@@ -3,11 +3,9 @@
# Canale per Tantifilm
# ------------------------------------------------------------
from core import scrapertools, httptools, support
from core import support
from core.item import Item
from core.support import info
from platformcode import logger
from platformcode import config
from platformcode import logger, config
# def findhost(url):
@@ -23,7 +21,7 @@ player_iframe = r'<iframe.*?src="([^"]+)"[^>]+></iframe>\s*<div class="player'
@support.menu
def mainlist(item):
info()
logger.debug()
top = [('Generi', ['', 'category'])]
film = ['/film',
@@ -47,7 +45,7 @@ def mainlist(item):
return locals()
@support.scrape
def peliculas(item):
def movies(item):
# debug = True
if item.args == 'search':
patron = r'<a href="(?P<url>[^"]+)" title="Permalink to\s*(?P<title>[^"]+) \((?P<year>[0-9]+)[^<]*\)[^"]*"[^>]+>\s*<img[^s]+src="(?P<thumb>[^"]+)".*?<div class="calitate">\s*<p>(?P<quality>[^<]+)<\/p>'
@@ -57,7 +55,7 @@ def peliculas(item):
patronBlock = r'<div id="main_col">(?P<block>.*?)<!\-\- main_col \-\->'
# if item.args != 'all' and item.args != 'search':
# action = 'findvideos' if item.extra == 'movie' else 'episodios'
# action = 'findvideos' if item.extra == 'movie' else 'episodes'
# item.contentType = 'movie' if item.extra == 'movie' else 'tvshow'
# debug = True
return locals()
@@ -65,7 +63,7 @@ def peliculas(item):
@support.scrape
def episodios(item):
def episodes(item):
def get_season(pageData, seas_url, season):
data = ''
episodes = support.match(pageData if pageData else seas_url, patronBlock=patron_episode, patron=patron_option).matches
@@ -106,33 +104,33 @@ def episodios(item):
@support.scrape
def category(item):
blacklist = ['Ultimi Film Aggiornati', 'Anime', 'Serie TV Altadefinizione', 'HD AltaDefinizione', 'Al Cinema', 'Serie TV', 'Miniserie', 'Programmi Tv', 'Live', 'Trailers', 'Serie TV Aggiornate', 'Aggiornamenti', 'Featured']
patron = '<li><a href="(?P<url>[^"]+)"><span></span>(?P<title>[^<]+)</a></li>'
patronGenreMenu = '<li><a href="(?P<url>[^"]+)"><span></span>(?P<title>[^<]+)</a></li>'
patron_block = '<ul class="table-list">(.*?)</ul>'
action = 'peliculas'
action = 'movies'
return locals()
def search(item, texto):
info(texto)
logger.debug(texto)
item.url = host + "/?s=" + texto
try:
item.args = 'search'
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error("%s" % line)
logger.error('{}'.format(line))
return []
@support.scrape
def newest(categoria):
if categoria == 'series':
def newest(category):
if category == 'tvshow':
item = Item(url=host + '/aggiornamenti-serie-tv')
data = support.match(item).data.replace('<u>','').replace('</u>','')
item.contentType = 'episode'
@@ -155,32 +153,32 @@ def hdpass(item):
def findvideos(item):
info()
support.info("ITEMLIST: ", item)
logger.debug()
logger.debug("ITEMLIST: ", item)
data = support.match(item.url, headers=headers).data
check = support.match(data, patron=r'<div class="category-film">(.*?)</div>').match
if 'sub' in check.lower():
item.contentLanguage = 'Sub-ITA'
support.info("CHECK : ", check)
logger.debug("CHECK : ", check)
if 'anime' in check.lower():
item.contentType = 'tvshow'
item.data = data
support.info('select = ### è una anime ###')
logger.debug('select = ### è una anime ###')
try:
return episodios(item)
return episodes(item)
except:
pass
elif 'serie' in check.lower():
item.contentType = 'tvshow'
item.data = data
return episodios(item)
return episodes(item)
else:
item.contentTitle = item.fulltitle
item.contentType = 'movie'
# if 'protectlink' in data:
# urls = scrapertools.find_multiple_matches(data, r'<iframe src="[^=]+=(.*?)"')
# support.info("SONO QUI: ", urls)
# urls = scrapertools.findMultipleMatches(data, r'<iframe src="[^=]+=(.*?)"')
# logger.debug("SONO QUI: ", urls)
# for url in urls:
# url = url.decode('base64')
# # tiro via l'ultimo carattere perchè non c'entra
@@ -191,19 +189,19 @@ def findvideos(item):
# if url:
# listurl.add(url)
# data += '\n'.join(listurl)
info(data)
logger.debug(data)
itemlist = []
# support.dbg()
# logger.dbg()
if '/serietv/series/names' in item.url:
itemlist.extend(support.server(item, itemlist=hdpass(Item(url=item.url))))
else:
urls = support.match(data, patron=player_iframe).matches
# support.dbg()
# logger.dbg()
if item.otherLinks:
urls += support.match(item.otherLinks, patron=r'href="([^"]+)').matches
info('URLS', urls)
logger.debug('URLS', urls)
for u in urls:
if 'hdplayer.casa/series/' in u:
urls.remove(u)

View File

@@ -4,6 +4,7 @@
from core import support, httptools
from core.item import Item
from platformcode import logger
import sys
if sys.version_info[0] >= 3: from concurrent import futures
else: from concurrent_py2 import futures
@@ -25,8 +26,8 @@ def mainlist(item):
return locals()
def episodios(item):
support.info(item)
def episodes(item):
logger.debug(item)
itemlist = []
with futures.ThreadPoolExecutor() as executor:
@@ -48,12 +49,12 @@ def episodios(item):
def genres(item):
itemlist = []
for n, genre in enumerate(httptools.downloadpage(host + api_url + 'categories', post={}).json.get('categories', [])):
itemlist.append(item.clone(action="peliculas", genre=genre.get('name'), title=genre.get('value'), n=n))
return support.thumb(itemlist, genre=True)
itemlist.append(item.clone(action="movies", genre=genre.get('name'), title=genre.get('value'), n=n))
return support.thumb(itemlist, mode='genre')
def peliculas(item, text=''):
support.info('search', item)
def movies(item, text=''):
logger.debug('search', item)
itemlist = []
filter_type = False
if item.genre:
@@ -75,7 +76,7 @@ def peliculas(item, text=''):
itemlist.append(item.clone(id=result.get('id'), title=result.get('title'), contentTitle=result.get('title'),
contentSerieName='' if contentType == 'movie' else result.get('title'),
contentPlot=result.get('description'), thumbnail=result.get('poster'),
fanart=result.get('backdrop'), year=result.get('year'), action='episodios' if contentType == 'tvshow' else 'findvideos',
fanart=result.get('backdrop'), year=result.get('year'), action='episodes' if contentType == 'tvshow' else 'findvideos',
url='{}/{}/{}-{}'.format('https://filmigratis.org', contentType, result.get('id'), support.scrapertools.slugify(result.get('title'))),
contentType=contentType))
support.tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
@@ -87,7 +88,7 @@ def peliculas(item, text=''):
def search(item, text):
return peliculas(item, text)
return movies(item, text)
def findvideos(item):

View File

@@ -5,8 +5,8 @@
"active": true,
"thumbnail": "toonitalia.png",
"banner": "toonitalia.png",
"categories": ["tvshow", "movie", "vos", "anime"],
"not_active":["include_in_newest_peliculas", "include_in_newest_series"],
"categories": ["tvshow", "movie", "sub", "anime"],
"not_active":["include_in_newest_movie", "include_in_newest_tvshow"],
"default_off":["include_in_newest"],
"settings": []
}

View File

@@ -4,6 +4,7 @@
# ------------------------------------------------------------
from core import scrapertools, support
from platformcode import logger
import sys
host = support.config.get_channel_url()
@@ -13,59 +14,59 @@ headers = [['Referer', host]]
@support.menu
def mainlist(item):
top = [('Novità',['', 'peliculas', 'new', 'tvshow']),
('Aggiornamenti', ['', 'peliculas', 'last', 'tvshow'])]
top = [('Novità',['', 'movies', 'new', 'tvshow']),
('Aggiornamenti', ['', 'movies', 'last', 'tvshow'])]
tvshow = ['/category/serie-tv/']
anime =['/category/anime/',
('Sub-Ita',['/category/anime-sub-ita/', 'peliculas', 'sub']),
('Film Animati',['/category/film-animazione/','peliculas', '', 'movie'])]
('Sub-Ita',['/category/anime-sub-ita/', 'movies', 'sub']),
('Film Animati',['/category/film-animazione/','movies', '', 'movie'])]
search = ''
return locals()
def search(item, text):
support.info(text)
logger.debug(text)
# item.args='search'
item.text = text
item.url = item.url + '/?a=b&s=' + text.replace(' ', '+')
try:
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.logger.error("%s" % line)
logger.error("%s" % line)
return []
def newest(categoria):
support.info(categoria)
def newest(category):
logger.debug(category)
item = support.Item()
try:
item.contentType = 'undefined'
item.url= host
item.args= 'new'
return peliculas(item)
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.logger.error("{0}".format(line))
logger.error("{0}".format(line))
return []
@support.scrape
def peliculas(item):
def movies(item):
# debugBlock = True
# debug = True
# search = item.text
if item.contentType != 'movie': anime = True
action = 'findvideos' if item.contentType == 'movie' else 'episodios'
if item.contentType != 'movie': numerationEnabled = True
action = 'findvideos' if item.contentType == 'movie' else 'episodes'
blacklist = ['-Film Animazione disponibili in attesa di recensione ']
if item.action == 'search':
pagination = ''
pagination = True
#patronBlock = '"lcp_catlist"[^>]+>(?P<block>.*)</ul>'
patronBlock = '<main[^>]+>(?P<block>.*?)</ma'
#patron = r'href="(?P<url>[^"]+)" title="(?P<title>[^"]+)"'
@@ -82,7 +83,7 @@ def peliculas(item):
patronNext = '<a class="next page-numbers" href="([^"]+)">'
def itemHook(item):
support.info(item.title)
logger.debug(item.title)
if item.args == 'sub':
item.title += support.typo('Sub-ITA', 'bold color kod _ []')
item.contentLanguage = 'Sub-ITA'
@@ -91,8 +92,8 @@ def peliculas(item):
@support.scrape
def episodios(item):
anime = True
def episodes(item):
numerationEnabled = True
# debug = True
patron = r'>\s*(?:(?P<season>\d+)(?:&#215;|x|×))?(?P<episode>\d+)(?:\s+&#8211;\s+)?[ ]+(?P<title2>[^<]+)[ ]+<a (?P<data>.*?)(?:<br|</p)'
# data = ''

View File

@@ -3,7 +3,7 @@
# Canale per tunein
# ------------------------------------------------------------
from core import scrapertools, support
from core import scrapertools, support, config
from platformcode import logger
host = 'http://api.radiotime.com'
@@ -21,21 +21,22 @@ def mainlist(item):
return item
def itemlistHook(itemlist):
itemlist.append(
item.clone(title=support.typo('Cerca...', 'bold color kod'), action='search', thumbnail=support.thumb('search')))
item.clone(title=support.typo(config.getLocalizedString(70741) % 'Musica… ', 'bold'), action='search', thumbnail=support.thumb('search')))
support.channel_config(item, itemlist)
return itemlist
return locals()
def radio(item):
support.info()
logger.debug()
itemlist = []
data = support.match(item, patron= r'text="(?P<title>[^\("]+)(?:\((?P<location>[^\)]+)\))?" URL="(?P<url>[^"]+)" bitrate="(?P<quality>[^"]+)" reliability="[^"]+" guide_id="[^"]+" subtext="(?P<song>[^"]+)" genre_id="[^"]+" formats="(?P<type>[^"]+)" (?:playing="[^"]+" )?(?:playing_image="[^"]+" )?(?:show_id="[^"]+" )?(?:item="[^"]+" )?image="(?P<thumb>[^"]+)"')
if data.matches:
for title, location, url, quality, song, type, thumbnail in data.matches:
title = scrapertools.decodeHtmlentities(title)
itemlist.append(
item.clone(title = support.typo(title, 'bold') + support.typo(quality + ' kbps','_ [] bold color kod'),
item.clone(contentTitle = title,
quality= quality,
thumbnail = thumbnail,
url = url,
contentType = 'music',
@@ -49,7 +50,7 @@ def radio(item):
infoLabels={}
infoLabels['duration'] = duration
itemlist.append(
item.clone(title = support.typo(title, 'bold'),
item.clone(contentTitle = title,
thumbnail = thumbnail,
infolLbels = infoLabels,
url = url,
@@ -62,11 +63,11 @@ def radio(item):
title = scrapertools.unescape(title)
itemlist.append(
item.clone(channel = item.channel,
title = support.typo(title, 'bold'),
contentTitle = title,
thumbnail = item.thumbnail,
url = url,
action = 'radio'))
support.nextPage(itemlist, item, data.data, r'(?P<url>[^"]+)" key="nextStations')
support.nextPage(itemlist, item, data=data.data, patron=r'(?P<url>[^"]+)" key="nextStations')
return itemlist
@@ -76,14 +77,15 @@ def findvideos(item):
item.action = 'play'
urls = support.match(item.url).data.strip().split()
for url in urls:
item.title = 'TuneIn'
item.url= url
item.server = 'directo'
itemlist.append(item)
return itemlist
return support.server(item, itemlist=itemlist)
def search(item, text):
support.info(text)
logger.debug(text)
item.url = host + '/Search.ashx?query=' +text
try:
return radio(item)

View File

@@ -21,8 +21,8 @@ blacklist = ['CB01.UNO &#x25b6; TROVA L&#8217;INDIRIZZO UFFICIALE ', 'AVVISO IMP
def mainlist(item):
film = [
('I più votati', ["ratings/?get=movies", 'peliculas']),
('I più popolari', ["trending/?get=movies", 'peliculas']),
('I più votati', ["ratings/?get=movies", 'movies']),
('I più popolari', ["trending/?get=movies", 'movies']),
('Generi', ['ratings/?get=movies', 'menu', 'genres']),
('Anno', ["", 'menu', 'releases']),
]
@@ -36,8 +36,8 @@ def search(item, text):
return support.dooplay_search(item, blacklist)
def peliculas(item):
return support.dooplay_peliculas(item, False, blacklist)
def movies(item):
return support.dooplay_movies(item, False, blacklist)
def findvideos(item):

View File

@@ -2,9 +2,9 @@
"id": "vvvvid",
"name": "VVVVID",
"active": true,
"language": ["ita","vos"],
"language": ["ita","sub-ita"],
"thumbnail": "vvvvid.png",
"banner": "vvvvid.png",
"categories": ["anime","tvshow","movie","vos"],
"categories": ["anime","tvshow","movie","sub"],
"settings": []
}

View File

@@ -3,8 +3,8 @@
# Canale per vvvvid
# ----------------------------------------------------------
import requests, sys, inspect
from core import jsontools, support, tmdb
from platformcode import autorenumber, logger, config
from core import channeltools, support, tmdb
from platformcode import autorenumber, logger, config, platformtools
host = support.config.get_channel_url()
@@ -31,35 +31,35 @@ main_host = host + '/vvvvid/ondemand/'
def mainlist(item):
if conn_id:
anime = ['/vvvvid/ondemand/anime/',
('Popolari',['/vvvvid/ondemand/anime/', 'peliculas', 'channel/10002/last/']),
('Nuove Uscite',['/vvvvid/ondemand/anime/', 'peliculas', 'channel/10007/last/']),
('Generi',['/vvvvid/ondemand/anime/', 'peliculas', 'channel/10004/last/?category=']),
('A-Z',['/vvvvid/ondemand/anime/', 'peliculas', 'channel/10003/last/?filter='])
('Popolari',['/vvvvid/ondemand/anime/', 'movies', 'channel/10002/last/']),
('Nuove Uscite',['/vvvvid/ondemand/anime/', 'movies', 'channel/10007/last/']),
('Generi',['/vvvvid/ondemand/anime/', 'movies', 'channel/10004/last/?category=']),
('A-Z',['/vvvvid/ondemand/anime/', 'movies', 'channel/10003/last/?filter='])
]
film = ['/vvvvid/ondemand/film/',
('Popolari',['/vvvvid/ondemand/film/', 'peliculas', 'channel/10002/last/']),
('Nuove Uscite',['/vvvvid/ondemand/film/', 'peliculas', 'channel/10007/last/']),
('Generi',['/vvvvid/ondemand/film/', 'peliculas', 'channel/10004/last/?category=']),
('A-Z',['/vvvvid/ondemand/film/', 'peliculas', 'channel/10003/last/?filter=']),
('Popolari',['/vvvvid/ondemand/film/', 'movies', 'channel/10002/last/']),
('Nuove Uscite',['/vvvvid/ondemand/film/', 'movies', 'channel/10007/last/']),
('Generi',['/vvvvid/ondemand/film/', 'movies', 'channel/10004/last/?category=']),
('A-Z',['/vvvvid/ondemand/film/', 'movies', 'channel/10003/last/?filter=']),
]
tvshow = ['/vvvvid/ondemand/series/',
('Popolari',['/vvvvid/ondemand/series/', 'peliculas', 'channel/10002/last/']),
('Nuove Uscite',['/vvvvid/ondemand/series/', 'peliculas', 'channel/10007/last/']),
('Generi',['/vvvvid/ondemand/series/', 'peliculas', 'channel/10004/last/?category=']),
('A-Z',['/vvvvid/ondemand/series/', 'peliculas', 'channel/10003/last/?filter='])
('Popolari',['/vvvvid/ondemand/series/', 'movies', 'channel/10002/last/']),
('Nuove Uscite',['/vvvvid/ondemand/series/', 'movies', 'channel/10007/last/']),
('Generi',['/vvvvid/ondemand/series/', 'movies', 'channel/10004/last/?category=']),
('A-Z',['/vvvvid/ondemand/series/', 'movies', 'channel/10003/last/?filter='])
]
show = [('Show {bold} {tv}',['/vvvvid/ondemand/show/', 'peliculas', '', 'tvshow']),
('Popolari {submenu} {tv}',['/vvvvid/ondemand/show/', 'peliculas', 'channel/10002/last/', 'tvshow']),
('Nuove Uscite {submenu} {tv}',['/vvvvid/ondemand/show/', 'peliculas', 'channel/10007/last/', 'tvshow']),
('Generi {submenu} {tv}',['/vvvvid/ondemand/show/', 'peliculas', 'channel/10004/last/?category=', 'tvshow']),
('A-Z {submenu} {tv}',['/vvvvid/ondemand/show/', 'peliculas', 'channel/10003/last/?filter=', 'tvshow']),
show = [('Show {bold} {tv}',['/vvvvid/ondemand/show/', 'movies', '', 'tvshow']),
('Popolari {submenu} {tv}',['/vvvvid/ondemand/show/', 'movies', 'channel/10002/last/', 'tvshow']),
('Nuove Uscite {submenu} {tv}',['/vvvvid/ondemand/show/', 'movies', 'channel/10007/last/', 'tvshow']),
('Generi {submenu} {tv}',['/vvvvid/ondemand/show/', 'movies', 'channel/10004/last/?category=', 'tvshow']),
('A-Z {submenu} {tv}',['/vvvvid/ondemand/show/', 'movies', 'channel/10003/last/?filter=', 'tvshow']),
('Cerca Show... {bold submenu} {tv}', ['/vvvvid/ondemand/show/', 'search', '', 'tvshow'])
]
kids = [('Kids {bold}',['/vvvvid/ondemand/kids/', 'peliculas', '', 'tvshow']),
('Popolari {submenu} {kids}',['/vvvvid/ondemand/kids/', 'peliculas', 'channel/10002/last/', 'tvshow']),
('Nuove Uscite {submenu} {kids}',['/vvvvid/ondemand/kids/', 'peliculas', 'channel/10007/last/', 'tvshow']),
('Generi {submenu} {kids}',['/vvvvid/ondemand/kids/', 'peliculas', 'channel/10004/last/?category=', 'tvshow']),
('A-Z {submenu} {kids}',['/vvvvid/ondemand/kids/', 'peliculas', 'channel/10003/last/?filter=', 'tvshow']),
kids = [('Kids {bold}',['/vvvvid/ondemand/kids/', 'movies', '', 'tvshow']),
('Popolari {submenu} {kids}',['/vvvvid/ondemand/kids/', 'movies', 'channel/10002/last/', 'tvshow']),
('Nuove Uscite {submenu} {kids}',['/vvvvid/ondemand/kids/', 'movies', 'channel/10007/last/', 'tvshow']),
('Generi {submenu} {kids}',['/vvvvid/ondemand/kids/', 'movies', 'channel/10004/last/?category=', 'tvshow']),
('A-Z {submenu} {kids}',['/vvvvid/ondemand/kids/', 'movies', 'channel/10003/last/?filter=', 'tvshow']),
('Cerca Kids... {bold submenu} {kids}', ['/vvvvid/ondemand/kids/', 'search', '', 'tvshow'])
]
else:
@@ -68,44 +68,48 @@ def mainlist(item):
def search(item, text):
support.info(text)
logger.debug(text)
itemlist = []
if conn_id:
if 'film' in item.url: item.contentType = 'movie'
else: item.contentType = 'tvshow'
item.search = text
try:
itemlist = peliculas(item)
itemlist = movies(item)
except:
import sys
for line in sys.exc_info():
support.logger.error("%s" % line)
logger.error("%s" % line)
return []
return itemlist
def newest(categoria):
def newest(category):
item = support.Item()
item.args = 'channel/10007/last/'
if categoria == 'peliculas':
if category == 'movie':
item.contentType = 'movie'
item.url = main_host + 'film/'
if categoria == 'series':
if category == 'tvshow':
item.contentType = 'tvshow'
item.url = main_host + 'series/'
if categoria == 'anime':
if category == 'anime':
item.contentType = 'tvshow'
item.url = main_host + 'anime/'
return peliculas(item)
return movies(item)
def peliculas(item):
def movies(item):
itemlist = []
# support.dbg()
# logger.dbg()
if not item.args:
json_file =loadjs(item.url + 'channel/10005/last/')
support.logger.debug(json_file)
logger.debug(json_file)
make_itemlist(itemlist, item, json_file)
itemlist = support.pagination(itemlist, item, 'movies')
if item.contentType != 'movie': autorenumber.start(itemlist)
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
elif ('=' not in item.args) and ('=' not in item.url):
json_file=loadjs(item.url + item.args)
@@ -120,22 +124,21 @@ def peliculas(item):
itemlist.append(
item.clone(title = support.typo(key.upper() if Filter == 'filter' else key['name'], 'bold'),
url = item.url + item.args + (key if Filter == 'filter' else str(key['id'])),
action = 'peliculas',
action = 'movies',
args = 'filters'))
else :
else:
json_file=loadjs(item.url)
item.args=''
make_itemlist(itemlist, item, json_file)
if 'category' in item.args:
support.thumb(itemlist,genre=True)
elif not 'filter' in item.args:
if item.contentType != 'movie': autorenumber.start(itemlist)
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
support.thumb(itemlist,mode='genre')
return itemlist
def episodios(item):
def episodes(item):
itemlist = []
if item.episodes:
episodes = item.episodes
@@ -154,19 +157,23 @@ def episodios(item):
for episode in episodes:
try:
title = 'Episodio ' + episode['number'] + ' - ' + episode['title'].encode('utf8')
title = episode['title'].encode('utf8')
except:
title = 'Episodio ' + episode['number'] + ' - ' + episode['title']
title = episode['title']
if type(title) == tuple: title = title[0]
itemlist.append(
item.clone(title = support.typo(title, 'bold'),
url= main_host + show_id + '/season/' + str(season_id),
action= 'findvideos',
video_id= episode['video_id']))
item.clone(title = title,
contentType = 'episode',
contentEpisodeNumber = int(episode['number']),
url= main_host + show_id + '/season/' + str(season_id),
action= 'findvideos',
video_id= episode['video_id']))
if inspect.stack()[1][3] not in ['find_episodes']:
autorenumber.start(itemlist, item)
for i in itemlist:
logger.debug(i)
support.videolibrary(itemlist,item)
return itemlist
@@ -191,7 +198,7 @@ def findvideos(item):
url = url.split()[-1]
itemlist.append(
item.clone(action= 'play',
title=config.get_localized_string(30137),
title=config.getLocalizedString(30137),
url= 'https://or01.top-ix.org/videomg/_definst_/mp4:' + item.url + '/' + url,
server= 'directo')
)
@@ -201,16 +208,16 @@ def findvideos(item):
itemlist.append(
item.clone(action= 'play',
title=config.get_localized_string(30137),
title=config.getLocalizedString(30137),
url= item.url + '?' + key,
server= 'directo')
)
server= 'directo'))
return support.server(item, itemlist=itemlist, Download=False)
def make_itemlist(itemlist, item, data):
search = item.search if item.search else ''
infoLabels = {}
for key in data['data']:
if search.lower() in encode(key['title']).lower():
title = encode(key['title'])
@@ -223,7 +230,7 @@ def make_itemlist(itemlist, item, data):
fulltitle= title,
show= title,
url= main_host + str(key['show_id']) + '/seasons/',
action= 'findvideos' if item.contentType == 'movie' else 'episodios',
action= 'findvideos' if item.contentType == 'movie' else 'episodes',
contentType = item.contentType,
contentSerieName= fulltitle if item.contentType != 'movie' else '',
contentTitle= fulltitle if item.contentType == 'movie' else '',
@@ -234,7 +241,7 @@ def make_itemlist(itemlist, item, data):
def loadjs(url):
if '?category' not in url:
url += '?full=true'
support.info('Json URL;',url)
logger.debug('Json URL;',url)
json = current_session.get(url, headers=headers, params=payload).json()
return json

View File

@@ -4,6 +4,7 @@ import glob, os
from core.item import Item
from platformcode import config, logger
from core.support import thumb
addon = config.__settings__
downloadenabled = addon.getSetting('downloadenabled')
@@ -14,47 +15,46 @@ def getmainlist(view="thumb_"):
# Main Menu Channels
if addon.getSetting('enable_news_menu') == "true":
itemlist.append(Item(title=config.get_localized_string(30130), channel="news", action="mainlist",
thumbnail=get_thumb("news.png", view), category=config.get_localized_string(30119), viewmode="thumbnails",
context=[{"title": config.get_localized_string(70285), "channel": "shortcuts", "action": "SettingOnPosition", "category":7, "setting":1}]))
itemlist.append(Item(title=config.getLocalizedString(30130), channel="news", action="mainlist",
thumbnail=thumb("news"), category=config.getLocalizedString(30119), viewmode="thumbnails",
context=[{"title": config.getLocalizedString(70285), "channel": "shortcuts", "action": "SettingOnPosition", "category":7, "setting":1}]))
if addon.getSetting('enable_channels_menu') == "true":
itemlist.append(Item(title=config.get_localized_string(30118), channel="channelselector", action="getchanneltypes",
thumbnail=get_thumb("channels.png", view), view=view, category=config.get_localized_string(30119), viewmode="thumbnails"))
itemlist.append(Item(title=config.getLocalizedString(30118), channel="channelselector", action="getchanneltypes",
thumbnail=thumb("channels"), view=view, category=config.getLocalizedString(30119), viewmode="thumbnails"))
if addon.getSetting('enable_search_menu') == "true":
itemlist.append(Item(title=config.get_localized_string(30103), channel="search", path='special', action="mainlist",
thumbnail=get_thumb("search.png", view), category=config.get_localized_string(30119), viewmode="list",
context = [{"title": config.get_localized_string(60412), "action": "setting_channel_new", "channel": "search"},
{"title": config.get_localized_string(70286), "channel": "shortcuts", "action": "SettingOnPosition", "category":5 , "setting":1}]))
itemlist.append(Item(title=config.getLocalizedString(30103), channel="search", path='special', action="mainlist",
thumbnail=thumb("search"), category=config.getLocalizedString(30119), viewmode="list",
context = [{"title": config.getLocalizedString(60412), "action": "channels_selections", "channel": "search"},
{"title": config.getLocalizedString(70286), "channel": "shortcuts", "action": "SettingOnPosition", "category":5 , "setting":1}]))
if addon.getSetting('enable_onair_menu') == "true":
itemlist.append(Item(channel="filmontv", action="mainlist", title=config.get_localized_string(50001),
thumbnail=get_thumb("on_the_air.png"), viewmode="thumbnails"))
itemlist.append(Item(channel="filmontv", action="mainlist", title=config.getLocalizedString(50001),
thumbnail=thumb("live"), viewmode="thumbnails"))
if addon.getSetting('enable_link_menu') == "true":
itemlist.append(Item(title=config.get_localized_string(70527), channel="kodfavorites", action="mainlist", thumbnail=get_thumb("mylink.png", view),
view=view, category=config.get_localized_string(70527), viewmode="thumbnails"))
itemlist.append(Item(title=config.getLocalizedString(70527), channel="kodfavorites", action="mainlist", thumbnail=thumb("mylink"),
view=view, category=config.getLocalizedString(70527), viewmode="thumbnails"))
if addon.getSetting('enable_fav_menu') == "true":
itemlist.append(Item(title=config.get_localized_string(30102), channel="favorites", action="mainlist",
thumbnail=get_thumb("favorites.png", view), category=config.get_localized_string(30102), viewmode="thumbnails"))
itemlist.append(Item(title=config.getLocalizedString(30102), channel="favorites", action="mainlist",
thumbnail=thumb("favorites"), category=config.getLocalizedString(30102), viewmode="thumbnails"))
if config.get_videolibrary_support() and addon.getSetting('enable_library_menu') == "true":
itemlist.append(Item(title=config.get_localized_string(30131), channel="videolibrary", action="mainlist",
thumbnail=get_thumb("videolibrary.png", view), category=config.get_localized_string(30119), viewmode="thumbnails",
context=[{"title": config.get_localized_string(70287), "channel": "shortcuts", "action": "SettingOnPosition", "category":2, "setting":1},
{"title": config.get_localized_string(60568), "channel": "videolibrary", "action": "update_videolibrary"}]))
itemlist.append(Item(title=config.getLocalizedString(30131), channel="videolibrary", action="mainlist",
thumbnail=thumb("videolibrary"), category=config.getLocalizedString(30119), viewmode="thumbnails",
context=[{"title": config.getLocalizedString(70287), "channel": "shortcuts", "action": "SettingOnPosition", "category":2, "setting":1},
{"title": config.getLocalizedString(60568), "channel": "videolibrary", "action": "update_videolibrary"}]))
if downloadenabled != "false":
itemlist.append(Item(title=config.get_localized_string(30101), channel="downloads", action="mainlist", thumbnail=get_thumb("downloads.png", view), viewmode="list",
context=[{"title": config.get_localized_string(70288), "channel": "shortcuts", "action": "SettingOnPosition", "category":6}]))
itemlist.append(Item(title=config.getLocalizedString(30101), channel="downloads", action="mainlist", thumbnail=thumb("download"), viewmode="list",
context=[{"title": config.getLocalizedString(70288), "channel": "shortcuts", "action": "SettingOnPosition", "category":6}]))
thumb_setting = "setting_%s.png" % 0 # config.get_setting("plugin_updates_available")
itemlist.append(Item(title=config.get_localized_string(30100), channel="setting", action="settings",
thumbnail=get_thumb(thumb_setting, view), category=config.get_localized_string(30100), viewmode="list", folder=False))
itemlist.append(Item(title=config.get_localized_string(30104) + " (v" + config.get_addon_version(with_fix=True) + ")", channel="help", action="mainlist",
thumbnail=get_thumb("help.png", view), category=config.get_localized_string(30104), viewmode="list"))
itemlist.append(Item(title=config.getLocalizedString(30100), channel="setting", action="settings",
thumbnail=thumb('setting'), category=config.getLocalizedString(30100), viewmode="list", folder=False))
itemlist.append(Item(title=config.getLocalizedString(30104) + " (v" + config.getAddonVersion(with_fix=True) + ")", channel="help", action="mainlist",
thumbnail=thumb("help"), category=config.getLocalizedString(30104), viewmode="list"))
return itemlist
@@ -62,7 +62,7 @@ def getchanneltypes(view="thumb_"):
logger.debug()
# Category List
channel_types = ["movie", "tvshow", "anime", "documentary", "vos", "live", "torrent", "music"] #, "direct"
channel_types = ["movie", "tvshow", "anime", "documentary", "sub", "live", "torrent", "music"] #, "direct"
# Channel Language
channel_language = auto_filter()
@@ -70,19 +70,19 @@ def getchanneltypes(view="thumb_"):
# Build Itemlist
itemlist = list()
title = config.get_localized_string(30121)
title = config.getLocalizedString(30121)
itemlist.append(Item(title=title, channel="channelselector", action="filterchannels", view=view,
category=title, channel_type="all", thumbnail=get_thumb("all.png", view),
category=title, channel_type="all", thumbnail=thumb("all"),
viewmode="thumbnails"))
for channel_type in channel_types:
title = config.get_localized_category(channel_type)
title = config.getLocalizedCategory(channel_type)
itemlist.append(Item(title=title, channel="channelselector", action="filterchannels", category=title,
channel_type=channel_type, viewmode="thumbnails",
thumbnail=get_thumb("%s.png" % channel_type, view)))
thumbnail=thumb(channel_type)))
itemlist.append(Item(title=config.get_localized_string(70685), channel="community", action="mainlist", view=view,
category=config.get_localized_string(70685), channel_type="all", thumbnail=get_thumb("community.png", view),
itemlist.append(Item(title=config.getLocalizedString(70685), channel="community", action="mainlist", view=view,
category=config.getLocalizedString(70685), channel_type="all", thumbnail=thumb("community"),
viewmode="thumbnails"))
return itemlist
@@ -99,7 +99,7 @@ def filterchannels(category, view="thumb_"):
category = "all"
appenddisabledchannels = True
channel_path = os.path.join(config.get_runtime_path(), 'channels', '*.json')
channel_path = os.path.join(config.getRuntimePath(), 'channels', '*.json')
logger.debug("channel_path = %s" % channel_path)
channel_files = glob.glob(channel_path)
@@ -126,15 +126,15 @@ def filterchannels(category, view="thumb_"):
logger.debug("channel_parameters=%s" % repr(channel_parameters))
# If you prefer the banner and the channel has it, now change your mind
if view == "banner_" and "banner" in channel_parameters:
channel_parameters["thumbnail"] = channel_parameters["banner"]
# if view == "banner_" and "banner" in channel_parameters:
# channel_parameters["thumbnail"] = channel_parameters["banner"]
# if the channel is deactivated the channel is not shown in the list
if not channel_parameters["active"]:
continue
# The channel is skipped if it is not active and we are not activating / deactivating the channels
channel_status = config.get_setting("enabled", channel_parameters["channel"])
channel_status = config.getSetting("enabled", channel_parameters["channel"])
if channel_status is None:
# if channel_status does not exist, there is NO value in _data.json.
@@ -158,7 +158,7 @@ def filterchannels(category, view="thumb_"):
# If you have configuration we add an item in the context
context = []
if channel_parameters["has_settings"]:
context.append({"title": config.get_localized_string(70525), "channel": "setting", "action": "channel_config",
context.append({"title": config.getLocalizedString(70525), "channel": "setting", "action": "channel_config",
"config": channel_parameters["channel"]})
channel_info = set_channel_info(channel_parameters)
@@ -175,46 +175,51 @@ def filterchannels(category, view="thumb_"):
channelslist.sort(key=lambda item: item.title.lower().strip())
if not config.get_setting("only_channel_icons"):
if not config.getSetting("only_channel_icons"):
from core.support import thumb
if category == "all":
channel_parameters = channeltools.get_channel_parameters('url')
# If you prefer the banner and the channel has it, now change your mind
if view == "banner_" and "banner" in channel_parameters:
channel_parameters["thumbnail"] = channel_parameters["banner"]
# if view == "banner_" and "banner" in channel_parameters:
# channel_parameters["thumbnail"] = channel_parameters["banner"]
channelslist.insert(0, Item(title=config.get_localized_string(60088), action="mainlist", channel="url",
channelslist.insert(0, Item(title=config.getLocalizedString(60088), action="mainlist", channel="url",
thumbnail=channel_parameters["thumbnail"], type="generic", viewmode="list"))
# Special Category
if category in ['movie', 'tvshow']:
titles = [config.get_localized_string(70028), config.get_localized_string(30985), config.get_localized_string(70559), config.get_localized_string(60264), config.get_localized_string(70560)]
ch_list = []
titles = [config.getLocalizedString(70028), config.getLocalizedString(30985), config.getLocalizedString(70559), config.getLocalizedString(60264), config.getLocalizedString(70560)]
ids = ['popular', 'top_rated', 'now_playing', 'on_the_air']
for x in range(0,3):
if x == 2 and category != 'movie':
title=titles[x+1]
title=titles[x+1] + '{tv}'
id = ids[x+1]
else:
title=titles[x]
title=titles[x] + '{movie}'
id = ids[x]
channelslist.insert(x,
Item(channel='search', action='discover_list', title=title, search_type='list',
list_type='%s/%s' % (category.replace('show',''), id), mode=category, thumbnail=get_thumb(id+".png")))
ch_list.insert(x,
Item(channel='classicsearch', action='discover_list', title=title, search_type='list',
list_type='%s/%s' % (category.replace('show',''), id), mode=category))
channelslist.insert(3, Item(channel='search', action='genres_menu', title=config.get_localized_string(30987),
type=category.replace('show',''), mode=category ,thumbnail=get_thumb("genres.png")))
ch_list.insert(3, Item(channel='classicsearch', action='genres_menu', title=config.getLocalizedString(30987) + '{' + category.replace('show','') + '}',
type=category.replace('show',''), mode=category))
channelslist = thumb(ch_list) + channelslist
return channelslist
def get_thumb(thumb_name, view="thumb_"):
from core import filetools
if thumb_name.startswith('http'):
return thumb_name
elif config.get_setting('enable_custom_theme') and config.get_setting('custom_theme') and filetools.isfile(config.get_setting('custom_theme') + view + thumb_name):
media_path = config.get_setting('custom_theme')
else:
icon_pack_name = config.get_setting('icon_set', default="default")
media_path = filetools.join("https://raw.githubusercontent.com/kodiondemand/media/master/themes", icon_pack_name)
return filetools.join(media_path, view + thumb_name)
# def get_thumb(thumb_name, view="thumb_"):
# from core import filetools
# if thumb_name.startswith('http'):
# return thumb_name
# elif config.getSetting('enable_custom_theme') and config.getSetting('custom_theme') and filetools.isfile(config.getSetting('custom_theme') + view + thumb_name):
# media_path = config.getSetting('custom_theme')
# else:
# icon_pack_name = config.getSetting('icon_set', default="default")
# media_path = filetools.join("https://raw.githubusercontent.com/kodiondemand/media/master/themes/new", icon_pack_name)
# return filetools.join(media_path, thumb_name)
def set_channel_info(parameters):
@@ -241,22 +246,22 @@ def set_channel_info(parameters):
categories = parameters['categories']
for cat in categories:
if content != '':
content = '%s, %s' % (content, config.get_localized_category(cat))
content = '%s, %s' % (content, config.getLocalizedCategory(cat))
else:
content = config.get_localized_category(cat)
content = config.getLocalizedCategory(cat)
info = '[B]' + config.get_localized_string(70567) + ' [/B]' + content + '\n\n'
info += '[B]' + config.get_localized_string(70568) + ' [/B] ' + language
info = '[B]' + config.getLocalizedString(70567) + ' [/B]' + content + '\n\n'
info += '[B]' + config.getLocalizedString(70568) + ' [/B] ' + language
return info
def auto_filter(auto_lang=False):
list_lang = ['ita', 'vos', 'sub-ita']
if config.get_setting("channel_language") == 'auto' or auto_lang == True:
lang = config.get_localized_string(20001)
if config.getSetting("channel_language") == 'auto' or auto_lang == True:
lang = config.getLocalizedString(20001)
else:
lang = config.get_setting("channel_language", default="all")
lang = config.getSetting("channel_language", default="all")
if lang not in list_lang:
lang = 'all'

View File

@@ -1,14 +1,14 @@
from platformcode import config, logger
import xbmc, sys, xbmcgui, os
librerias = xbmc.translatePath(os.path.join(config.get_runtime_path(), 'lib'))
librerias = xbmc.translatePath(os.path.join(config.getRuntimePath(), 'lib'))
sys.path.insert(0, librerias)
from core import jsontools, support
addon_id = config.get_addon_core().getAddonInfo('id')
addon_id = config.getAddonCore().getAddonInfo('id')
LOCAL_FILE = os.path.join(config.get_runtime_path(), "platformcode/contextmenu/contextmenu.json")
LOCAL_FILE = os.path.join(config.getRuntimePath(), "platformcode/contextmenu/contextmenu.json")
f = open(LOCAL_FILE)
contextmenu_settings = jsontools.load(open(LOCAL_FILE).read())
f.close()
@@ -53,7 +53,7 @@ def build_menu():
def empty_item():
return config.get_localized_string(90004)
return config.getLocalizedString(90004)
if __name__ == '__main__':

View File

@@ -15,6 +15,7 @@ from . import filetools
from platformcode import config
from collections import defaultdict
from lib.sqlitedict import SqliteDict
import zlib, pickle, sqlite3
class nested_dict_sqlite(defaultdict):
@@ -29,6 +30,19 @@ class nested_dict_sqlite(defaultdict):
self[key].close()
self.clear()
def encode(obj):
return sqlite3.Binary(zlib.compress(pickle.dumps(obj, pickle.HIGHEST_PROTOCOL)))
def decode(obj):
return pickle.loads(zlib.decompress(bytes(obj)))
db_name = filetools.join(config.getDataPath(), "db.sqlite")
vdb_name = filetools.join(config.getVideolibraryPath(), "videolibrary.sqlite")
db_name = filetools.join(config.get_data_path(), "db.sqlite")
db = nested_dict_sqlite(lambda table: SqliteDict(db_name, table, 'c', True))
videolibrarydb = nested_dict_sqlite(lambda table: SqliteDict(vdb_name, table, 'c', True, encode=encode, decode=decode))
if 'played_time' not in SqliteDict.get_tablenames(vdb_name):
for k, v in dict(db['viewed']).items():
videolibrarydb['played_time'][k] = v

View File

@@ -9,13 +9,6 @@ __channel__ = "autoplay"
PLAYED = False
quality_list = ['4k', '2160p', '2160', '4k2160p', '4k2160', '4k 2160p', '4k 2160', '2k',
'fullhd', 'fullhd 1080', 'fullhd 1080p', 'full hd', 'full hd 1080', 'full hd 1080p', 'hd1080', 'hd1080p', 'hd 1080', 'hd 1080p', '1080', '1080p',
'hd', 'hd720', 'hd720p', 'hd 720', 'hd 720p', '720', '720p', 'hdtv',
'sd', '480p', '480', '360p', '360', '240p', '240',
'default']
def start(itemlist, item):
'''
Main method from which the links are automatically reproduced
@@ -39,13 +32,13 @@ def start(itemlist, item):
if not config.is_xbmc():
return itemlist
if config.get_setting('autoplay') or (item.channel == 'community' and item.autoplay):
if config.getSetting('autoplay') or item.autoplay:
# Save the current value of "Action and Player Mode" in preferences
user_config_setting_action = config.get_setting("default_action")
# user_config_setting_player = config.get_setting("player_mode")
user_config_setting_action = config.getSetting("default_action")
# user_config_setting_player = config.getSetting("player_mode")
# Enable the "View in high quality" action (if the server returns more than one quality, eg gdrive)
if not user_config_setting_action: config.set_setting("default_action", 2)
if not user_config_setting_action: config.setSetting("default_action", 2)
from core.servertools import sort_servers
autoplay_list = sort_servers(itemlist)
@@ -55,8 +48,8 @@ def start(itemlist, item):
max_intents_servers = {}
# If something is playing it stops playing
if platformtools.is_playing():
platformtools.stop_video()
if platformtools.isPlaying():
platformtools.stopVideo()
for autoplay_elem in autoplay_list:
play_item = Item
@@ -64,7 +57,7 @@ def start(itemlist, item):
if autoplay_elem.channel == 'videolibrary':
channel_id = autoplay_elem.contentChannel
if not platformtools.is_playing() and not PLAYED:
if not platformtools.isPlaying() and not PLAYED:
videoitem = autoplay_elem
if videoitem.server.lower() not in max_intents_servers:
max_intents_servers[videoitem.server.lower()] = max_intents
@@ -76,15 +69,16 @@ def start(itemlist, item):
lang = " [{}]".format(videoitem.language) if videoitem.language else ''
quality = ' [{}]'.format(videoitem.quality) if videoitem.quality and videoitem.quality != 'default' else ''
name = servername(videoitem.server)
platformtools.dialog_notification('AutoPlay', '{}{}{}'.format(name, lang, quality), sound=False)
platformtools.dialogNotification('AutoPlay', '{}{}{}'.format(name, lang, quality), sound=False)
# Try to play the links If the channel has its own play method, use it
try: channel = __import__('channels.%s' % channel_id, None, None, ["channels.%s" % channel_id])
except: channel = __import__('specials.%s' % channel_id, None, None, ["specials.%s" % channel_id])
channel = platformtools.channelImport(channel_id)
if not channel:
return
if hasattr(channel, 'play'):
resolved_item = getattr(channel, 'play')(videoitem)
if len(resolved_item) > 0:
if isinstance(resolved_item[0], list): videoitem.video_urls = resolved_item
if isinstance(resolved_item[0], list): videoitem.videoUrls = resolved_item
else: videoitem = resolved_item[0]
play_item.autoplay = True
@@ -94,16 +88,16 @@ def start(itemlist, item):
if base_item.contentChannel == 'videolibrary' or base_item.nfo:
# Fill the video with the data of the main item and play
play_item = base_item.clone(**videoitem.__dict__)
platformtools.play_video(play_item, autoplay=True)
platformtools.playVideo(play_item, autoplay=True)
else:
videoitem.window = base_item.window
# If it doesn't come from the video library, just play
platformtools.play_video(videoitem, autoplay=True)
platformtools.playVideo(videoitem, autoplay=True)
except:
pass
# sleep(3)
try:
if platformtools.is_playing():
if platformtools.isPlaying():
PLAYED = True
break
except:
@@ -114,20 +108,20 @@ def start(itemlist, item):
# If the maximum number of attempts of this server has been reached, ask if we want to continue testing or ignore it.
if max_intents_servers[videoitem.server.lower()] == 0:
text = config.get_localized_string(60072) % name
if not platformtools.dialog_yesno("AutoPlay", text, config.get_localized_string(60073)):
text = config.getLocalizedString(60072) % name
if not platformtools.dialogYesNo("AutoPlay", text, config.getLocalizedString(60073)):
max_intents_servers[videoitem.server.lower()] = max_intents
# If there are no items in the list, it is reported
if autoplay_elem == autoplay_list[-1]:
platformtools.dialog_notification('AutoPlay', config.get_localized_string(60072) % name)
platformtools.dialogNotification('AutoPlay', config.getLocalizedString(60072) % name)
else:
platformtools.dialog_notification(config.get_localized_string(60074), config.get_localized_string(60075))
platformtools.dialogNotification(config.getLocalizedString(60074), config.getLocalizedString(60075))
# Restore if necessary the previous value of "Action and Player Mode" in preferences
if not user_config_setting_action: config.set_setting("default_action", user_config_setting_action)
# if user_config_setting_player != 0: config.set_setting("player_mode", user_config_setting_player)
if not user_config_setting_action: config.setSetting("default_action", user_config_setting_action)
# if user_config_setting_player != 0: config.setSetting("player_mode", user_config_setting_player)
return itemlist
@@ -139,7 +133,7 @@ def play_multi_channel(item, itemlist):
def servername(server):
from core.servertools import translate_server_name
path = filetools.join(config.get_runtime_path(), 'servers', server.lower() + '.json')
path = filetools.join(config.getRuntimePath(), 'servers', server.lower() + '.json')
name = jsontools.load(open(path, "rb").read())['name']
if name.startswith('@'): name = config.get_localized_string(int(name.replace('@','')))
if name.startswith('@'): name = config.getLocalizedString(int(name.replace('@','')))
return translate_server_name(name)

View File

@@ -16,8 +16,7 @@ remote_path = 'https://raw.githubusercontent.com/kodiondemand/media/master/'
def is_enabled(channel_name):
logger.debug("channel_name=" + channel_name)
return get_channel_parameters(channel_name)["active"] and get_channel_setting("enabled", channel=channel_name,
default=True)
return get_channel_parameters(channel_name)["active"] and getChannelSetting("enabled", channel=channel_name, default=True)
def get_channel_parameters(channel_name):
@@ -37,8 +36,7 @@ def get_channel_parameters(channel_name):
channel_parameters["update_url"] = channel_parameters.get("update_url", DEFAULT_UPDATE_URL)
channel_parameters["language"] = channel_parameters.get("language", ["all"])
channel_parameters["active"] = channel_parameters.get("active", False)
channel_parameters["include_in_global_search"] = channel_parameters.get("include_in_global_search",
False)
channel_parameters["include_in_global_search"] = channel_parameters.get("include_in_global_search", False)
channel_parameters["categories"] = channel_parameters.get("categories", list())
channel_parameters["thumbnail"] = channel_parameters.get("thumbnail", "")
@@ -91,13 +89,13 @@ def get_channel_json(channel_name):
from core import filetools
channel_json = None
try:
channel_path = filetools.join(config.get_runtime_path(), "channels", channel_name + ".json")
channel_path = filetools.join(config.getRuntimePath(), "channels", channel_name + ".json")
if not filetools.isfile(channel_path):
channel_path = filetools.join(config.get_runtime_path(), "specials", channel_name + ".json")
channel_path = filetools.join(config.getRuntimePath(), "specials", channel_name + ".json")
if not filetools.isfile(channel_path):
channel_path = filetools.join(config.get_runtime_path(), "servers", channel_name + ".json")
channel_path = filetools.join(config.getRuntimePath(), "servers", channel_name + ".json")
if not filetools.isfile(channel_path):
channel_path = filetools.join(config.get_runtime_path(), "servers", "debriders",
channel_path = filetools.join(config.getRuntimePath(), "servers", "debriders",
channel_name + ".json")
if filetools.isfile(channel_path):
@@ -108,7 +106,7 @@ def get_channel_json(channel_name):
except Exception as ex:
template = "An exception of type %s occured. Arguments:\n%r"
message = template % (type(ex).__name__, ex.args)
logger.error(" %s" % message)
logger.error("{} | {}".format(channel_name,message))
return channel_json
@@ -116,24 +114,27 @@ def get_channel_json(channel_name):
def get_channel_controls_settings(channel_name):
logger.debug("channel_name=" + channel_name)
dict_settings = {}
# import web_pdb; web_pdb.set_trace()
# list_controls = get_channel_json(channel_name).get('settings', list())
list_controls = get_default_settings(channel_name)
for c in list_controls:
if 'id' not in c or 'type' not in c or 'default' not in c:
# If any control in the list does not have id, type or default, we ignore it
continue
# new dict with key(id) and value(default) from settings
dict_settings[c['id']] = c['default']
if c['type'] == 'list' and c.get('values'):
dict_settings[c['id']] = list(c['values'])[c['default']]
elif c['type'] == 'list' and c.get('dvalues'):
dict_settings[c['id']] = list(c['dvalues'].values())[c['default']]
else:
dict_settings[c['id']] = c['default']
return list_controls, dict_settings
def get_lang(channel_name):
channel = __import__('channels.%s' % channel_name, fromlist=["channels.%s" % channel_name])
list_language = [config.get_localized_string(70522)]
list_language = [config.getLocalizedString(70522)]
if hasattr(channel, 'list_language'):
for language in channel.list_language:
list_language.append(language)
@@ -161,7 +162,7 @@ def get_default_settings(channel_name):
from core import filetools
import copy
default_path = filetools.join(config.get_runtime_path(), 'default_channel_settings' + '.json')
default_path = filetools.join(config.getRuntimePath(), 'default_channel_settings' + '.json')
if channel_name not in ['trakt', 'autoplay']:
global default_file
else:
@@ -169,9 +170,8 @@ def get_default_settings(channel_name):
if not default_file:
default_file = jsontools.load(filetools.read(default_path))
channel_path = filetools.join(config.get_runtime_path(), 'channels', channel_name + '.json')
channel_path = filetools.join(config.getRuntimePath(), 'channels', channel_name + '.json')
# from core.support import dbg; dbg()
if filetools.exists(channel_path):
default_controls = default_file['settings']
default_controls_renumber = default_file['renumber']
@@ -185,36 +185,36 @@ def get_default_settings(channel_name):
default_off = channel_json['default_off'] if 'default_off' in channel_json else []
# Apply default configurations if they do not exist
# logger.dbg()
for control in copy.deepcopy(default_controls):
if control['id'] not in str(channel_controls):
if 'include_in_newest' in control['id'] and 'include_in_newest' not in not_active and control[
'id'] not in not_active:
if 'include_in_newest' in control['id'] and 'include_in_newest' not in not_active and control['id'] not in not_active:
label = control['id'].split('_')
label = label[-1]
if label == 'peliculas':
if label == 'movie':
if 'movie' in categories:
control['label'] = config.get_localized_string(70727) + ' - ' + config.get_localized_string( 30122)
control['default'] = False if ('include_in_newest' in default_off) or ( ' include_in_newest_peliculas' in default_off) else True
control['label'] = config.getLocalizedString(70727) + ' - ' + config.getLocalizedString( 30122)
control['default'] = False if ('include_in_newest' in default_off) or ( ' include_in_newest_movie' in default_off) else True
channel_controls.append(control)
else:
pass
elif label == 'series':
elif label == 'tvshow':
if 'tvshow' in categories:
control['label'] = config.get_localized_string(70727) + ' - ' + config.get_localized_string( 30123)
control['default'] = False if ('include_in_newest' in default_off) or ( 'include_in_newest_series' in default_off) else True
control['label'] = config.getLocalizedString(70727) + ' - ' + config.getLocalizedString( 30123)
control['default'] = False if ('include_in_newest' in default_off) or ( 'include_in_newest_tvshow' in default_off) else True
channel_controls.append(control)
else:
pass
elif label == 'anime':
if 'anime' in categories:
control['label'] = config.get_localized_string(70727) + ' - ' + config.get_localized_string( 30124)
control['label'] = config.getLocalizedString(70727) + ' - ' + config.getLocalizedString( 30124)
control['default'] = False if ('include_in_newest' in default_off) or ( 'include_in_newest_anime' in default_off) else True
channel_controls.append(control)
else:
pass
else:
control['label'] = config.get_localized_string(70727) + ' - ' + label.capitalize()
control['label'] = config.getLocalizedString(70727) + ' - ' + label.capitalize()
control['default'] = control['default'] if control['id'] not in default_off else False
channel_controls.append(control)
@@ -234,7 +234,7 @@ def get_default_settings(channel_name):
return channel_controls
def get_channel_setting(name, channel, default=None):
def getChannelSetting(name, channel, default=None):
from core import filetools
"""
Returns the configuration value of the requested parameter.
@@ -258,7 +258,7 @@ def get_channel_setting(name, channel, default=None):
@rtype: any
"""
file_settings = filetools.join(config.get_data_path(), "settings_channels", channel + "_data.json")
file_settings = filetools.join(config.getDataPath(), "settings_channels", channel + "_data.json")
dict_settings = {}
dict_file = {}
@@ -291,7 +291,7 @@ def get_channel_setting(name, channel, default=None):
return dict_settings.get(name, default)
def set_channel_setting(name, value, channel):
def setChannelSetting(name, value, channel):
from core import filetools
"""
Sets the configuration value of the indicated parameter.
@@ -315,10 +315,10 @@ def set_channel_setting(name, value, channel):
"""
# We create the folder if it does not exist
if not filetools.exists(filetools.join(config.get_data_path(), "settings_channels")):
filetools.mkdir(filetools.join(config.get_data_path(), "settings_channels"))
if not filetools.exists(filetools.join(config.getDataPath(), "settings_channels")):
filetools.mkdir(filetools.join(config.getDataPath(), "settings_channels"))
file_settings = filetools.join(config.get_data_path(), "settings_channels", channel + "_data.json")
file_settings = filetools.join(config.getDataPath(), "settings_channels", channel + "_data.json")
dict_settings = {}
dict_file = None

Some files were not shown because too many files have changed in this diff Show More