aggiunti aggiornamenti
@@ -1,217 +0,0 @@
|
||||
<pre><code># -*- coding: utf-8 -*-
|
||||
# ------------------------------------------------------------
|
||||
# Canale per idcanale nel json
|
||||
# ------------------------------------------------------------
|
||||
|
||||
"""
|
||||
|
||||
Problemi noti che non superano il test del canale:
|
||||
- indicare i problemi
|
||||
|
||||
Avvisi:
|
||||
- Eventuali avvisi per i tester
|
||||
|
||||
Ulteriori info:
|
||||
|
||||
|
||||
"""
|
||||
# CANCELLARE Ciò CHE NON SERVE per il canale e
|
||||
# fare pulizia quando si è finito di testarlo
|
||||
|
||||
# Qui gli import
|
||||
|
||||
# per l'uso dei decoratori, per i log, e funzioni per siti particolari
|
||||
from core import support
|
||||
# se non si fa uso di findhost()
|
||||
from platformcode import config
|
||||
|
||||
# in caso di necessità
|
||||
#from core import scrapertoolsV2, httptools, servertools, tmdb
|
||||
#from core.item import Item
|
||||
#from lib import unshortenit
|
||||
|
||||
##### fine import
|
||||
|
||||
# impostazioni variabili o def findhost()
|
||||
|
||||
# se necessaria la variabile __channel__
|
||||
|
||||
# da cancellare se non utilizzata
|
||||
__channel__ = "id nel json"
|
||||
# da cancellare se si utilizza findhost()
|
||||
host = config.get_channel_url(id nel json o __channel__)
|
||||
headers = [['Referer', host]]
|
||||
|
||||
# Inizio findhost() - da cancellare se usato l'altro metodo
|
||||
#impostati dinamicamente da findhost()
|
||||
host = ""
|
||||
headers = ""
|
||||
|
||||
def findhost():
|
||||
global host, headers
|
||||
# da adattare alla bisogna...
|
||||
permUrl = httptools.downloadpage('INSERIRE-URL-QUI', follow_redirects=False).headers
|
||||
host = 'https://www.'+permUrl['location'].replace('https://www.google.it/search?q=site:', '')
|
||||
headers = [['Referer', host]]
|
||||
|
||||
findhost() # così le imposta una volta per tutte
|
||||
### fine findhost
|
||||
|
||||
# server di esempio...
|
||||
list_servers = ['supervideo', 'streamcherry','rapidvideo', 'streamango', 'openload']
|
||||
# quality di esempio
|
||||
list_quality = ['default', 'HD', '3D', '4K', 'DVD', 'SD']
|
||||
|
||||
### fine variabili
|
||||
|
||||
#### Inizio delle def principali ###
|
||||
|
||||
@support.menu
|
||||
def mainlist(item):
|
||||
support.log(item)
|
||||
|
||||
# Ordine delle voci
|
||||
# Prima voce FILM, puoi solo impostare l'url
|
||||
film = [
|
||||
#'url', # url per la voce FILM, se possibile la pagina principale con le ultime novità
|
||||
#Voce Menu,['url','action','args',contentType]
|
||||
('Al Cinema', ['', 'peliculas', '']),
|
||||
('Generi', ['', 'genres', 'genres']),
|
||||
('Per Lettera', ['', 'genres', 'letters']),
|
||||
('Anni', ['', 'genres', 'years']),
|
||||
('Qualità', ['', 'genres', 'quality']),
|
||||
('Mi sento fortunato', ['', 'genres', 'lucky']),
|
||||
('Popolari', ['', 'peliculas', '']),
|
||||
('Sub-ITA', ['', 'peliculas', ''])
|
||||
]
|
||||
|
||||
# Prima voce SERIE, puoi solo impostare l'url
|
||||
tvshow = [
|
||||
'#'url', # url per la voce Serie, se possibile la pagina principale con le ultime novità
|
||||
#Voce Menu,['url','action','args',contentType]
|
||||
('Per Lettera', ['', 'genres', 'letters']),
|
||||
('Per Genere', ['', 'genres', 'genres']),
|
||||
('Per anno', ['', 'genres', 'years'])
|
||||
|
||||
anime = [
|
||||
'#'url', # url per la voce Anime, se possibile la pagina principale con le ultime novità
|
||||
#Voce Menu,['url','action','args',contentType]
|
||||
('In Corso',['', '', '', '']),
|
||||
('Ultimi Episodi',['', '', '', '']),
|
||||
('Ultime Serie',['', '', '', ''])
|
||||
]
|
||||
|
||||
"""
|
||||
Eventuali Menu per voci non contemplate!
|
||||
"""
|
||||
|
||||
|
||||
return locals()
|
||||
|
||||
# riepilogo key per il match nei patron
|
||||
#known_keys = ['url', 'title', 'title2', 'season', 'episode', 'thumb', 'quality',
|
||||
# 'year', 'plot', 'duration', 'genere', 'rating', 'type', 'lang']
|
||||
# url = link relativo o assoluto
|
||||
# title = titolo Film/Serie/Anime/Altro
|
||||
# title2 = titolo dell'episodio Serie/Anime/Altro
|
||||
# season = stagione in formato numerico
|
||||
# episode = numero episodio, in formato numerico. Se il sito ha stagionexepisodio potete omettere season
|
||||
# thumb = locandina Film/Serie/Anime/Altro
|
||||
# quality = qualità indicata del video
|
||||
# year = anno in formato numerico (4 cifre)
|
||||
# duration = durata del Film/Serie/Anime/Altro
|
||||
# genere = genere del Film/Serie/Anime/Altro. Es: avventura, commedia
|
||||
# rating = punteggio/voto in formato numerico
|
||||
# type = tipo del video. Es. movie per film o tvshow per le serie. Di solito sono discrimanti usati dal sito
|
||||
# lang = lingua del video. Es: ITA, Sub-ITA, Sub, SUB ITA. Se non appare 'ITA' è di default
|
||||
|
||||
|
||||
@support.scrape
|
||||
def peliculas(item):
|
||||
support.log(item)
|
||||
#dbg # decomenntare per debug
|
||||
|
||||
action = ''
|
||||
blacklist = ''
|
||||
patron = ''
|
||||
patronBlock = ''
|
||||
patronNext = ''
|
||||
|
||||
debug = False # True per debug
|
||||
return locals()
|
||||
|
||||
@support.scrape
|
||||
def episodios(item):
|
||||
support.log(item)
|
||||
#dbg # decomenntare per debug
|
||||
|
||||
action = ''
|
||||
blacklist = ''
|
||||
patron = ''
|
||||
patronBlock = ''
|
||||
patronNext = ''
|
||||
|
||||
debug = False
|
||||
return locals()
|
||||
|
||||
@support.scrape
|
||||
def genres(item):
|
||||
support.log(item)
|
||||
#dbg # decomenntare per debug
|
||||
|
||||
action = ''
|
||||
blacklist = ''
|
||||
patron = ''
|
||||
patronBlock = ''
|
||||
patronNext = ''
|
||||
|
||||
debug = False
|
||||
return locals()
|
||||
|
||||
############## Fine ordine obbligato
|
||||
## Def ulteriori
|
||||
|
||||
############## Fondo Pagina
|
||||
# da adattare al canale
|
||||
def search(item, text):
|
||||
support.log('search', item)
|
||||
itemlist = []
|
||||
text = text.replace(" ", "+")
|
||||
item.url = host+"/index.php?do=search&story=%s&subaction=search" % (text)
|
||||
try:
|
||||
return peliculas(item)
|
||||
# Se captura la excepcion, para no interrumpir al buscador global si un canal falla
|
||||
except:
|
||||
import sys
|
||||
for line in sys.exc_info():
|
||||
logger.info("%s mainlist search log: %s" % (__channel__, line))
|
||||
return []
|
||||
|
||||
|
||||
# da adattare al canale
|
||||
def newest(categoria):
|
||||
support.log('newest ->', categoria)
|
||||
itemlist = []
|
||||
item = Item()
|
||||
try:
|
||||
if categoria == "peliculas":
|
||||
item.url = host
|
||||
item.action = "peliculas"
|
||||
itemlist = peliculas(item)
|
||||
|
||||
if itemlist[-1].action == "peliculas":
|
||||
itemlist.pop()
|
||||
# Continua la ricerca in caso di errore
|
||||
except:
|
||||
import sys
|
||||
for line in sys.exc_info():
|
||||
logger.error("{0}".format(line))
|
||||
return []
|
||||
|
||||
return itemlist
|
||||
|
||||
# da adattare... ( support.server ha vari parametri )
|
||||
def findvideos(item):
|
||||
support.log('findvideos ->', item)
|
||||
return support.server(item, headers=headers)
|
||||
</code></pre>
|
||||
+1
-1
@@ -4,4 +4,4 @@
|
||||
* [funzioni di debug](https://github.com/kodiondemand/addon/wiki/funzioni-di-debug)
|
||||
|
||||
* [Testare i Canali](https://github.com/kodiondemand/addon/wiki/Testare-un-canale)
|
||||
|
||||
* [Installazione e aggiornamenti](https://github.com/kodiondemand/addon/wiki/aggiornamenti)
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
# Installazione e aggiornamenti
|
||||
|
||||
KoD, a differenza degli altri addon utilizza un sistema di installazione e di aggiornamento tutto suo, esigenza nata dal fatto che i siti cambiano spesso, per stargli dietro sono quindi necessari aggiornamenti costanti, che spesso consistono in modifiche di poco conto.<br>
|
||||
Modifiche che sarebbe meglio finissero il più velocemente possibile sui dispositivi degli utenti.
|
||||
|
||||
Utilizzare un repository kodi, come fanno tutti gli addon, implica
|
||||
alcune operazioni "noiose" ogni qualvolta si vuole mandare un update.
|
||||
Script come [repo_prep](https://forum.kodi.tv/showthread.php?tid=129401) aiutano, ma si tratta comunque di un operazione in più.<br>
|
||||
Inoltre, lato utente, kodi cerca gli aggiornamenti ogni tanto (spesso si devono forzare se si vuole averli dubito) e
|
||||
scarica l'intero addon di nuovo anche se è stata modificata una sola linea.
|
||||
|
||||
L'updater "ad hoc" di kod invece, non necessita di nessun effort aggiuntivo (a parte per le Major release), basta pushare su github ed hai già fatto un aggiornamento.<br>
|
||||
Gli aggiornamenti vengono cercati ad ogni avvio di kodi, viene scaricato solo il minimo indispensabile (le singole modifiche ai singoli file) e viene mostrato un messaggio con il changelog (il nome del commit).
|
||||
|
||||
## Funzionamento in sintesi:
|
||||
All'avvio di kodi l'updater chiama le api di GitHub per vedere qual'è l'ultimo commit e quindi se è necessario aggiornare:
|
||||
se ci sono commit nuovi, scarica le relative patch (generate da github) e le applica in locale.<br>
|
||||
Per tenere conto del commit attuale, usa un file apposito (last_commit.txt).<br>
|
||||
Per vedere a che commit si trova il tuo KoD, basta aprirlo e guardare il numero nella sezione aiuto
|
||||
<br>
|
||||
Per poi confrontarlo con la [lista dei commit](https://github.com/kodiondemand/addon/commits/stable)
|
||||
|
||||
## Kod beta e kod stable
|
||||
Lo sviluppo avviene su 2 rami:
|
||||
- [branch master](https://github.com/kodiondemand/addon), che sarebbe la beta, dove sviluppiamo e testiamo le nuove feature e i vari fix
|
||||
- [branch stable](https://github.com/kodiondemand/addon/tree/stable), su cui viene riversato ogni cambiamento testato e verificato
|
||||
|
||||
## Installazione
|
||||
Per toglierci anche il "peso" di rigenerare ogni tanto lo zip di installazione,
|
||||
Abbiamo creato un installer, che altro non fa che "fingersi" kod,
|
||||
scaricare lo zip da GitHub (in modo da essere sempre aggiornato) ed
|
||||
installarlo (di fatto, cancellandosi).<br>
|
||||
Per velocizzare le cose, nel frattempo vi chiederà di impostare la videoteca.
|
||||
|
||||
## Installazione senza installer
|
||||
Installare kod direttamente è possibile, ma se non è aggiornato dovrà recuperare il gap (facendovi perdere tempo).<br>
|
||||
In tal caso, siccome non saprà a che commit si trova, cercherà di capirlo calcolando l'hash di se stesso (in caso di fallimento, scaricherà lo zip da GitHub, di fatto auto-aggiornandosi).<br>
|
||||
|
||||
## Impostazioni
|
||||
È possibile disabilitare gli aggiornamenti o scegliere di non mostrare i messaggi in impostazioni -> Preferenze -> Altro:
|
||||
|
||||
## Dev mode
|
||||
Lato sviluppo, è necessario che l'updater sia disattivato, per evitare di interferirsi a vicenda.
|
||||
Pertanto, se esiste una cartella .git (si presume che gli sviluppatori lavorino direttamente con git), si abiliterà la Dev mode, che, tra le altre cose,
|
||||
disabilita l'updater.
|
||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 63 KiB |
Reference in New Issue
Block a user