269 lines
10 KiB
Python
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 →<\/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()
|