astrXbian/.install/.kodi/addons/plugin.video.vstream/resources/sites/streamay_series.py

365 lines
14 KiB
Python

# -*- coding: utf-8 -*-
# vStream https://github.com/Kodi-vStream/venom-xbmc-addons
import re
from resources.lib.gui.hoster import cHosterGui
from resources.lib.gui.gui import cGui
from resources.lib.handler.inputParameterHandler import cInputParameterHandler
from resources.lib.handler.outputParameterHandler import cOutputParameterHandler
from resources.lib.handler.requestHandler import cRequestHandler
from resources.lib.parser import cParser
from resources.lib.comaddon import progress
SITE_IDENTIFIER = 'streamay_series'
SITE_NAME = 'StreamAy Séries'
SITE_DESC = 'Séries en Streaming'
URL_MAIN = 'https://fr.streamay.site/'
SERIE_SERIES = (URL_MAIN + 'series.html', 'showMovies')
SERIE_NEWS = (URL_MAIN, 'showSeriesNews')
SERIE_LIST = (True, 'AlphaList')
SERIE_GENRES = (True, 'showGenres')
SERIE_ANNEES = (True, 'showSerieYears')
URL_SEARCH = (URL_MAIN + 'recherche?q=', 'showMovies')
URL_SEARCH_SERIES = (URL_SEARCH[0], 'showMovies')
FUNCTION_SEARCH = 'showMovies'
def load():
oGui = cGui()
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', 'http://venom/')
oGui.addDir(SITE_IDENTIFIER, 'showSearch', 'Recherche', 'search.png', oOutputParameterHandler)
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', SERIE_NEWS[0])
oGui.addDir(SITE_IDENTIFIER, SERIE_NEWS[1], 'Séries (Derniers ajouts)', 'news.png', oOutputParameterHandler)
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', SERIE_SERIES[0])
oGui.addDir(SITE_IDENTIFIER, SERIE_SERIES[1], 'Séries', 'series.png', oOutputParameterHandler)
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', SERIE_GENRES[0])
oGui.addDir(SITE_IDENTIFIER, SERIE_GENRES[1], 'Séries (Genres)', 'genres.png', oOutputParameterHandler)
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', SERIE_LIST[0])
oGui.addDir(SITE_IDENTIFIER, SERIE_LIST[1], 'Series (Liste)', 'listes.png', oOutputParameterHandler)
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', SERIE_ANNEES[0])
oGui.addDir(SITE_IDENTIFIER, SERIE_ANNEES[1], 'Séries (Par Années)', 'annees.png', oOutputParameterHandler)
oGui.setEndOfDirectory()
def showSearch():
oGui = cGui()
sSearchText = oGui.showKeyBoard()
if (sSearchText != False):
showMovies(URL_SEARCH[0] + sSearchText)
oGui.setEndOfDirectory()
return
def showGenres():
oGui = cGui()
liste = []
liste.append(['Action', URL_MAIN + 'series/action/'])
liste.append(['Animation', URL_MAIN + 'series/animation/'])
liste.append(['Aventure', URL_MAIN + 'series/aventure/'])
liste.append(['Biopic', URL_MAIN + 'series/biopic/'])
liste.append(['Comédie', URL_MAIN + 'series/comedie/'])
liste.append(['Divers', URL_MAIN + 'series/divers/'])
liste.append(['Documentaire', URL_MAIN + 'series/documentaire/'])
liste.append(['Drame', URL_MAIN + 'series/drame/'])
liste.append(['Epouvante-Horreur', URL_MAIN + 'series/epouvante-horreur/'])
liste.append(['Famille', URL_MAIN + 'series/famille/'])
liste.append(['Fantastique', URL_MAIN + 'series/fantastique/'])
liste.append(['Guerre', URL_MAIN + 'series/guerre/'])
liste.append(['Policier', URL_MAIN + 'series/policier/'])
liste.append(['Romance', URL_MAIN + 'series/romance/'])
liste.append(['Science-fiction', URL_MAIN + 'series/science-fiction/'])
liste.append(['Thriller', URL_MAIN + 'series/thriller/'])
for sTitle, sUrl in liste:
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', sUrl)
oGui.addDir(SITE_IDENTIFIER, 'showMovies', sTitle, 'genres.png', oOutputParameterHandler)
oGui.setEndOfDirectory()
def showSerieYears():
# for i in itertools.chain(range(5, 7), [8, 9]): afficher dans l'ordre (pense bete ne pas effacer)
oGui = cGui()
from itertools import chain
generator = chain([1983, 1990, 1994], range(1997, 2021)) # desordre
for i in reversed(list(generator)):
Year = str(i)
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', URL_MAIN + 'series/annee/' + Year + '.html')
oGui.addDir(SITE_IDENTIFIER, 'showMovies', Year, 'annees.png', oOutputParameterHandler)
oGui.setEndOfDirectory()
def AlphaList():
oGui = cGui()
for i in range(0, 36):
if (i < 10):
sTitle = chr(48 + i)
else:
sTitle = chr(65 + i - 10)
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', URL_MAIN + 'series/alphabet/' + sTitle.lower())
oOutputParameterHandler.addParameter('sMovieTitle', sTitle)
oGui.addDir(SITE_IDENTIFIER, 'showMovies', '[COLOR teal] Lettre [COLOR red]' + sTitle + '[/COLOR][/COLOR]', 'listes.png', oOutputParameterHandler)
oGui.setEndOfDirectory()
def showSeriesNews():
oGui = cGui()
oInputParameterHandler = cInputParameterHandler()
sUrl = oInputParameterHandler.getValue('siteUrl')
oRequestHandler = cRequestHandler(sUrl)
sHtmlContent = oRequestHandler.request()
sPattern = '<span class=".+?"></span><a href="([^"]+)".+?<img src="([^"]+)" alt="([^"]+)"'
oParser = cParser()
aResult = oParser.parse(sHtmlContent, sPattern)
if (aResult[0] == True):
total = len(aResult[1])
progress_ = progress().VScreate(SITE_NAME)
for aEntry in aResult[1]:
progress_.VSupdate(progress_, total)
if progress_.iscanceled():
break
sUrl = aEntry[0]
sThumb = aEntry[1]
if sThumb.startswith('/'):
sThumb = URL_MAIN[:-1] + sThumb
sTitle = aEntry[2]
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', sUrl)
oOutputParameterHandler.addParameter('sMovieTitle', sTitle)
oGui.addTV(SITE_IDENTIFIER, 'ShowSaisons', sTitle, '', sThumb, '', oOutputParameterHandler)
progress_.VSclose(progress_)
oGui.setEndOfDirectory()
def showMovies(sSearch=''):
oGui = cGui()
oParser = cParser()
if sSearch:
sUrl = sSearch.replace(' ', '+')
else:
oInputParameterHandler = cInputParameterHandler()
sUrl = oInputParameterHandler.getValue('siteUrl')
oRequestHandler = cRequestHandler(sUrl)
sHtmlContent = oRequestHandler.request()
sPattern = '<div class="shortstory-in">.+?href="([^"]+)" title="([^"]+)".+?src="([^"]+)"'
aResult = oParser.parse(sHtmlContent, sPattern)
if (aResult[0] == False):
oGui.addText(SITE_IDENTIFIER)
if (aResult[0] == True):
total = len(aResult[1])
progress_ = progress().VScreate(SITE_NAME)
for aEntry in aResult[1]:
progress_.VSupdate(progress_, total)
if progress_.iscanceled():
break
sUrl = aEntry[0]
sTitle = aEntry[1]
sThumb = aEntry[2]
if sThumb.startswith('/'):
sThumb = URL_MAIN[:-1] + sThumb
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', sUrl)
oOutputParameterHandler.addParameter('sMovieTitle', sTitle)
oOutputParameterHandler.addParameter('sThumb', sThumb)
oGui.addTV(SITE_IDENTIFIER, 'ShowSaisons', sTitle, '', sThumb, '', oOutputParameterHandler)
progress_.VSclose(progress_)
sNextPage = __checkForNextPage(sHtmlContent)
if (sNextPage != False):
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', sNextPage)
number = re.search('/page-([0-9]+)', sNextPage).group(1)
oGui.addNext(SITE_IDENTIFIER, 'showMovies', '[COLOR teal]Page ' + number + ' >>>[/COLOR]', oOutputParameterHandler)
if not sSearch:
oGui.setEndOfDirectory()
def __checkForNextPage(sHtmlContent):
sPattern = 'href="([^"]+)"><i class="fa fa-angle-right">'
oParser = cParser()
aResult = oParser.parse(sHtmlContent, sPattern)
if (aResult[0] == True):
if aResult[1][0].startswith('/'):
return URL_MAIN[:-1] + aResult[1][0]
else:
return aResult[1][0]
return False
def ShowSaisons():
oGui = cGui()
oParser = cParser()
oInputParameterHandler = cInputParameterHandler()
sUrl = oInputParameterHandler.getValue('siteUrl')
sMovieTitle = oInputParameterHandler.getValue('sMovieTitle')
oRequestHandler = cRequestHandler(sUrl)
sHtmlContent = oRequestHandler.request()
# récupération du Synopsis
sDesc = ''
try:
sPattern = 'class="fsynopsis"><p>(.+?)</p>'
aResult = oParser.parse(sHtmlContent, sPattern)
if aResult[0]:
sDesc = aResult[1][0]
except:
pass
sPattern = 'class="short-images radius-3".+?href="([^"]+)".+?<img src="([^"]+)".+?<figcaption>([^<]+)<'
aResult = oParser.parse(sHtmlContent, sPattern)
if (aResult[0] == True):
for aEntry in aResult[1]:
sUrl = aEntry[0]
sThumb = aEntry[1]
if sThumb.startswith('/'):
sThumb = URL_MAIN[:-1] + sThumb
sTitle = sMovieTitle + ' ' + aEntry[2]
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', sUrl)
oOutputParameterHandler.addParameter('sMovieTitle', sTitle)
oOutputParameterHandler.addParameter('sThumb', sThumb)
oOutputParameterHandler.addParameter('sDesc', sDesc)
oGui.addEpisode(SITE_IDENTIFIER, 'showEpisodes', sTitle, '', sThumb, sDesc, oOutputParameterHandler)
oGui.setEndOfDirectory()
def showEpisodes():
oGui = cGui()
oParser = cParser()
oInputParameterHandler = cInputParameterHandler()
sUrl = oInputParameterHandler.getValue('siteUrl')
sMovieTitle = oInputParameterHandler.getValue('sMovieTitle')
sThumb = oInputParameterHandler.getValue('sThumb')
sDesc = oInputParameterHandler.getValue('sDesc')
oRequestHandler = cRequestHandler(sUrl)
sHtmlContent = oRequestHandler.request()
sPattern = '<div class="saision_LI2">\s*<a href="([^"]+)">\s*<span>([^<]+)<'
aResult = oParser.parse(sHtmlContent, sPattern)
if (aResult[0] == False):
oGui.addText(SITE_IDENTIFIER)
if (aResult[0] == True):
for aEntry in aResult[1]:
sUrl = aEntry[0]
sTitle = sMovieTitle + ' ' + aEntry[1]
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', sUrl)
oOutputParameterHandler.addParameter('sMovieTitle', sTitle)
oOutputParameterHandler.addParameter('sThumb', sThumb)
oOutputParameterHandler.addParameter('sDesc', sDesc)
oGui.addEpisode(SITE_IDENTIFIER, 'showLinks', sTitle, '', sThumb, sDesc, oOutputParameterHandler)
oGui.setEndOfDirectory()
def showLinks():
oGui = cGui()
oInputParameterHandler = cInputParameterHandler()
sUrl = oInputParameterHandler.getValue('siteUrl')
sMovieTitle = oInputParameterHandler.getValue('sMovieTitle')
sThumb = oInputParameterHandler.getValue('sThumb')
sDesc = oInputParameterHandler.getValue('sDesc')
oRequest = cRequestHandler(sUrl)
sHtmlContent = oRequest.request()
sHtmlContent = sHtmlContent.replace(' class="download-server"', '')
sPattern = '<div data-url="([^"]+)".+?id="player_v_DIV_5">([^<]+)<.+?<img src="/storage/icon/(.+?)_l.png"'
oParser = cParser()
aResult = oParser.parse(sHtmlContent, sPattern)
if (aResult[0] == True):
for aEntry in aResult[1]:
sUrl = aEntry[0]
sHost = aEntry[1].capitalize()
# Filtre host connue
oHoster = cHosterGui().checkHoster(sHost)
if not oHoster:
continue
sLang = aEntry[2].upper()
sDisplayTitle = ('%s (%s) [COLOR coral]%s[/COLOR]') % (sMovieTitle, sLang, sHost)
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle)
oOutputParameterHandler.addParameter('siteUrl', sUrl)
oOutputParameterHandler.addParameter('sThumb', sThumb)
oGui.addLink(SITE_IDENTIFIER, 'showHosters', sDisplayTitle, sThumb, sDesc, oOutputParameterHandler)
oGui.setEndOfDirectory()
def showHosters():
oGui = cGui()
oInputParameterHandler = cInputParameterHandler()
sUrl = oInputParameterHandler.getValue('siteUrl')
sMovieTitle = oInputParameterHandler.getValue('sMovieTitle')
sThumb = oInputParameterHandler.getValue('sThumb')
sHosterUrl = URL_MAIN[:-1] + sUrl
oRequestHandler = cRequestHandler(sHosterUrl)
oRequestHandler.request()
sHosterUrl = oRequestHandler.getRealUrl()
oHoster = cHosterGui().checkHoster(sHosterUrl)
if (oHoster != False):
oHoster.setDisplayName(sMovieTitle)
oHoster.setFileName(sMovieTitle)
cHosterGui().showHoster(oGui, oHoster, sHosterUrl, sThumb)
oGui.setEndOfDirectory()