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

269 lines
10 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.util import urlEncode
from resources.lib.comaddon import progress
SITE_IDENTIFIER = 'planet_streaming'
SITE_NAME = 'Planet Streaming'
SITE_DESC = 'Films en Streaming complet VF HD'
URL_MAIN = 'https://wvw.planet-streaming1.com/'
MOVIE_MOVIE = (True, 'load')
MOVIE_NEWS = (URL_MAIN + 'films/', 'showMovies')
MOVIE_TOP = (URL_MAIN + 'exclu/', 'showMovies')
MOVIE_HD = (URL_MAIN + 'xfsearch/hd/', 'showMovies')
MOVIE_GENRES = (URL_MAIN, 'showGenres')
URL_SEARCH = (URL_MAIN + 'index.php?do=search', 'showMovies')
URL_SEARCH_MOVIES = (URL_SEARCH[0], 'showMovies')
FUNCTION_SEARCH = 'showMovies'
UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0'
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', MOVIE_NEWS[0])
oGui.addDir(SITE_IDENTIFIER, MOVIE_NEWS[1], 'Films (Derniers ajouts)', 'news.png', oOutputParameterHandler)
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', MOVIE_TOP[0])
oGui.addDir(SITE_IDENTIFIER, MOVIE_TOP[1], 'Films (Top exclu)', 'star.png', oOutputParameterHandler)
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', MOVIE_HD[0])
oGui.addDir(SITE_IDENTIFIER, MOVIE_HD[1], 'Films (HD)', 'hd.png', oOutputParameterHandler)
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', MOVIE_GENRES[0])
oGui.addDir(SITE_IDENTIFIER, MOVIE_GENRES[1], 'Films (Genres)', 'genres.png', oOutputParameterHandler)
oGui.setEndOfDirectory()
def showSearch():
oGui = cGui()
sSearchText = oGui.showKeyBoard()
if (sSearchText != False):
showMovies(sSearchText)
oGui.setEndOfDirectory()
return
def showGenres():
oGui = cGui()
oInputParameterHandler = cInputParameterHandler()
sUrl = oInputParameterHandler.getValue('siteUrl')
liste = []
liste.append(['Action', sUrl + 'action/'])
liste.append(['Animation', sUrl + 'animation/'])
liste.append(['Arts Martiaux', sUrl + 'arts-martiaux/'])
liste.append(['Aventure', sUrl + 'aventure/'])
liste.append(['Biopic', sUrl + 'biopic/'])
liste.append(['Comédie', sUrl + 'comedie/'])
liste.append(['Comédie Dramatique', sUrl + 'comedie-dramatique/'])
liste.append(['Comédie Musicale', sUrl + 'comedie-musicale/'])
liste.append(['Documentaire', sUrl + 'documentaire/'])
liste.append(['Drame', sUrl + 'drame/'])
liste.append(['Epouvante Horreur', sUrl + 'epouvante-horreur/'])
liste.append(['Espionnage', sUrl + 'espionnage/'])
liste.append(['Famille', sUrl + 'famille/'])
liste.append(['Fantastique', sUrl + 'fantastique/'])
liste.append(['Guerre', sUrl + 'guerre/'])
liste.append(['Historique', sUrl + 'historique/'])
liste.append(['Musical', sUrl + 'musical/'])
liste.append(['Péplum', sUrl + 'peplum/'])
liste.append(['Policier', sUrl + 'policier/'])
liste.append(['Romance', sUrl + 'romance/'])
liste.append(['Science Fiction', sUrl + 'science-fiction/'])
liste.append(['Thriller', sUrl + 'thriller/'])
liste.append(['Western', sUrl + 'western/'])
for sTitle, sUrl in liste:
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', sUrl)
oGui.addDir(SITE_IDENTIFIER, 'showMovies', sTitle, 'genres.png', oOutputParameterHandler)
oGui.setEndOfDirectory()
def showMovies(sSearch=''):
oGui = cGui()
oParser = cParser()
oInputParameterHandler = cInputParameterHandler()
Nextpagesearch = oInputParameterHandler.getValue('Nextpagesearch')
sUrl = oInputParameterHandler.getValue('siteUrl')
if Nextpagesearch:
sSearch = sUrl
if sSearch:
if URL_SEARCH[0] in sSearch:
sSearch = sSearch.replace(URL_SEARCH[0], '')
if Nextpagesearch:
query_args = (('do', 'search'), ('subaction', 'search'), ('search_start', Nextpagesearch), ('story', sSearch))
else:
query_args = (('do', 'search'), ('subaction', 'search'), ('story', sSearch))
data = urlEncode(query_args)
oRequestHandler = cRequestHandler(URL_SEARCH[0])
oRequestHandler.setRequestType(cRequestHandler.REQUEST_TYPE_POST)
oRequestHandler.addParametersLine(data)
oRequestHandler.addParameters('User-Agent', UA)
sHtmlContent = oRequestHandler.request()
sHtmlContent = oRequestHandler.request()
else:
sUrl = oInputParameterHandler.getValue('siteUrl')
oRequestHandler = cRequestHandler(sUrl)
sHtmlContent = oRequestHandler.request()
if sSearch:
sPattern = '<div class="fullstream fullstreaming">.+?<img src="([^"]+)".+?<h3 class="mov-title"><a href="([^"]+)" >([^<]+)</a>.+?<strong>(?:Qualit|Version).+?">(.+?)</a>.+?<\/*strong>'
else:
sPattern = '<div class="fullstream fullstreaming">\s*<img src="([^"]+)".+?alt="([^"]+).+?<strong>(?:Qualit|Version).+?">(.+?)</a>.+?<\/*strong>.+?xfsearch.+?">([^<]+).+?<div itemprop="description".+?;">([^<]+).+?<a href="([^"]+)"'
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
if sSearch:
sThumb = aEntry[0]
if sThumb.startswith('/'):
sThumb = URL_MAIN[:-1] + sThumb
siteUrl = re.sub('www\.', '', aEntry[1])
sTitle = aEntry[2]
sQual = aEntry[3]
sQual = sQual.replace(':', '').replace(' ', '').replace(',', '/')
sYear = ''
sDesc = ''
else:
sThumb = aEntry[0]
if sThumb.startswith('/'):
sThumb = "https:" + sThumb
sTitle = aEntry[1]
sQual = aEntry[2]
sQual = sQual.replace(':', '').replace(' ', '').replace(',', '/')
#Certain film n'ont pas de date.
try:
sYear = re.search('(\d{4})', aEntry[3]).group(1)
except:
pass
sDesc = aEntry[4]
siteUrl = re.sub('www\.', '', aEntry[5])
sDisplayTitle = '%s [%s]' % (sTitle, sQual)
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', siteUrl)
oOutputParameterHandler.addParameter('sMovieTitle', sTitle)
oOutputParameterHandler.addParameter('sThumb', sThumb)
oOutputParameterHandler.addParameter('sYear', sYear)
oGui.addMovie(SITE_IDENTIFIER, 'showHosters', sDisplayTitle, 'films.png', sThumb, sDesc, oOutputParameterHandler)
progress_.VSclose(progress_)
if sSearch:
sPattern = '<a name="nextlink" id="nextlink" onclick="javascript:list_submit\(([0-9]+)\); return\(false\)" href="#">Suivant'
aResult = oParser.parse(sHtmlContent, sPattern)
if (aResult[0] == True):
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', sSearch)
oOutputParameterHandler.addParameter('Nextpagesearch', aResult[1][0])
number = re.search('([0-9]+)', aResult[1][0]).group(1)
oGui.addNext(SITE_IDENTIFIER, 'showMovies', '[COLOR teal]Page ' + number + ' >>>[/COLOR]', oOutputParameterHandler)
else:
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 Nextpagesearch:
oGui.setEndOfDirectory()
if not sSearch:
oGui.setEndOfDirectory()
def __checkForNextPage(sHtmlContent):
sPattern = '<a href="([^"]+)">Suivant &#8594;<\/a>'
oParser = cParser()
aResult = oParser.parse(sHtmlContent, sPattern)
if (aResult[0] == True):
return re.sub('www\.', '', aResult[1][0])
return False
def showHosters():
oGui = cGui()
oParser = cParser()
oInputParameterHandler = cInputParameterHandler()
sUrl = oInputParameterHandler.getValue('siteUrl')
sMovieTitle = oInputParameterHandler.getValue('sMovieTitle')
sThumb = oInputParameterHandler.getValue('sThumb')
oRequestHandler = cRequestHandler(sUrl)
sHtmlContent = oRequestHandler.request()
sPattern = '<i class="fa fa-play-circle-o"></i>([^<]+)</div>|<a href="([^"]+)" title="([^"]+)" target="seriePlayer"'
aResult = oParser.parse(sHtmlContent, sPattern)
if (aResult[0] == True):
for aEntry in aResult[1]:
if aEntry[0]:
oGui.addText(SITE_IDENTIFIER, '[COLOR red]' + aEntry[0] + '[/COLOR]')
continue
sHosterUrl = aEntry[1]
oHoster = cHosterGui().checkHoster(sHosterUrl)
if (oHoster != False):
oHoster.setDisplayName(sMovieTitle)
oHoster.setFileName(sMovieTitle)
cHosterGui().showHoster(oGui, oHoster, sHosterUrl, sThumb)
oGui.setEndOfDirectory()