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

341 lines
13 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- coding: utf-8 -*-
# vStream https://github.com/Kodi-vStream/venom-xbmc-addons
# Makoto
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
from resources.lib.util import cUtil
SITE_IDENTIFIER = 'otaku_attitude'
SITE_NAME = 'Otaku-Attitude'
SITE_DESC = 'Animes, Drama et OST en DDL et Streaming'
URL_MAIN = 'http://www.otaku-attitude.net/'
OST_MAIN = 'https://forum.otaku-attitude.net/musicbox/playlists/'
URL_SEARCH_SERIES = (URL_MAIN + 'recherche.html?cat=1&q=', 'showAnimes')
URL_SEARCH_DRAMAS = (URL_MAIN + 'recherche.html?cat=2&q=', 'showAnimes')
FUNCTION_SEARCH = 'showAnimes'
ANIM_ANIMS = ('http://', 'load')
ANIM_VOSTFRS = (URL_MAIN + 'liste-dl-animes.php', 'showAnimes')
SERIE_DRAMAS = (URL_MAIN + 'liste-dl-dramas.php', 'showAnimes')
OST_ANIME =(True, 'showGenres')
def load():
oGui = cGui()
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', URL_SEARCH_SERIES[0])
oGui.addDir(SITE_IDENTIFIER, 'showSearch', 'Recherche (Animés)', 'search.png', oOutputParameterHandler)
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', URL_SEARCH_DRAMAS[0])
oGui.addDir(SITE_IDENTIFIER, 'showSearch', 'Recherche (Dramas)', 'search.png', oOutputParameterHandler)
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', ANIM_VOSTFRS [0])
oGui.addDir(SITE_IDENTIFIER, ANIM_VOSTFRS [1], 'Animés (VOSTFR)', 'animes.png', oOutputParameterHandler)
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', SERIE_DRAMAS[0])
oGui.addDir(SITE_IDENTIFIER, SERIE_DRAMAS[1], 'Dramas (VOSTFR)', 'dramas.png', oOutputParameterHandler)
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', OST_ANIME[0])
oGui.addDir(SITE_IDENTIFIER, OST_ANIME[1], 'Musicbox (OST)', 'music.png', oOutputParameterHandler)
oGui.setEndOfDirectory()
def showGenres():
oGui = cGui()
liste = []
liste.append(['Animés', OST_MAIN + '1-anime/'])
liste.append(['Dramas', OST_MAIN + '6-drama/'])
liste.append(['Jeux Vidéo', OST_MAIN + '7-jeu-vidéo/'])
for sTitle, sUrl in liste:
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', sUrl)
oGui.addDir(SITE_IDENTIFIER, 'showOst', sTitle, 'music.png', oOutputParameterHandler)
oGui.setEndOfDirectory()
def showSearch():
oGui = cGui()
oInputParameterHandler = cInputParameterHandler()
sUrl = oInputParameterHandler.getValue('siteUrl')
sSearchText = oGui.showKeyBoard()
if (sSearchText != False):
sUrl = sUrl + sSearchText.replace(' ', '+')
showAnimes(sUrl)
oGui.setEndOfDirectory()
return
def showAnimes(sSearch=''):
oGui = cGui()
if sSearch:
sUrl = sSearch
else:
oInputParameterHandler = cInputParameterHandler()
sUrl = oInputParameterHandler.getValue('siteUrl')
# On memorise le lien de base ce qui permet d'avoir un nextpage fonctionnel sans modif et peut importe la categorie
if not sSearch:
if not 'scroll' in sUrl:
MemorisedUrl = sUrl
Page = 1
else:
MemorisedUrl = oInputParameterHandler.getValue('MemorisedUrl')
Page = oInputParameterHandler.getValue('Page')
oRequestHandler = cRequestHandler(sUrl)
sHtmlContent = oRequestHandler.request()
oParser = cParser()
if sSearch:
sPattern = 'href="([^"]+)" class="liste_dl"><img src="([^"]+)".+?alt=".+?strong>([^<]+)<.+?all">([^<]+)</.+?>'
else:
sPattern = 'href="([^"]+)".+?><img src="([^"]+)".+?alt=".+?strong>([^<]+)<.+?all">([^<]+)<br.+?>'
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
sUrl2 = URL_MAIN + aEntry[0]
sThumb = aEntry[1]
sTitle = aEntry[2].replace('-...', '').replace('...', '').replace('!', ' !')
sDesc = aEntry[3]
# filtre search
if sSearch and total > 5:
if cUtil().CheckOccurence(sSearch, sTitle) == 0:
continue
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', sUrl2)
oOutputParameterHandler.addParameter('sMovieTitle', sTitle)
oOutputParameterHandler.addParameter('sThumb', sThumb)
oOutputParameterHandler.addParameter('sDesc', sDesc)
oGui.addAnime(SITE_IDENTIFIER, 'showEpisodes', sTitle, '', sThumb, sDesc, oOutputParameterHandler)
progress_.VSclose(progress_)
if not sSearch:
Page = int(Page) + 1
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', MemorisedUrl + '?&scroll=' + str(Page))
# On renvoi l'url memoriser et le numero de page pour l'incrementer a chaque fois
oOutputParameterHandler.addParameter('MemorisedUrl', MemorisedUrl)
oOutputParameterHandler.addParameter('Page', Page)
oGui.addNext(SITE_IDENTIFIER, 'showAnimes', '[COLOR teal]Page ' + str(Page) + ' >>>[/COLOR]', oOutputParameterHandler)
oGui.setEndOfDirectory()
def showOst():
oGui = cGui()
oInputParameterHandler = cInputParameterHandler()
sUrl = oInputParameterHandler.getValue('siteUrl')
if not 'page' in sUrl:
MemorisedUrl = sUrl
Page = 1
else:
MemorisedUrl = oInputParameterHandler.getValue('MemorisedUrl')
Page = oInputParameterHandler.getValue('Page')
oRequestHandler = cRequestHandler(sUrl)
sHtmlContent = oRequestHandler.request()
oParser = cParser()
sPattern = "<div class='plWrapper'>.+?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
sUrl2 = aEntry[0]
sTitle = aEntry[1].replace('- Artiste non défini', '')
sThumb = aEntry[2]
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', sUrl2)
oOutputParameterHandler.addParameter('sMovieTitle', sTitle)
oOutputParameterHandler.addParameter('sThumb', sThumb)
oGui.addAnime(SITE_IDENTIFIER, 'showMusic', sTitle, '', sThumb, '', oOutputParameterHandler)
progress_.VSclose(progress_)
Page = int(Page) + 1
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', MemorisedUrl + '?page=' + str(Page))
# On renvoi l'url memoriser et le numero de page pour l'incrementer a chaque fois
oOutputParameterHandler.addParameter('MemorisedUrl', MemorisedUrl)
oOutputParameterHandler.addParameter('Page', Page)
oGui.addNext(SITE_IDENTIFIER, 'showOst', '[COLOR teal]Page ' + str(Page) + ' >>>[/COLOR]', 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()
# On recupere l'id de l'anime dans l'url
serieID = re.search('fiche-.+?-(\d+)-.+?.html', sUrl).group(1)
sPattern = 'class="(?:download cell_impaire|download)" id="([^"]+)".+?(\d+).+?class="cell".+?>([^<]+)</td'
aResult = oParser.parse(sHtmlContent, sPattern)
if (aResult[0] == False):
oGui.addText(SITE_IDENTIFIER)
if (aResult[0] == True):
for aEntry in sorted(aResult[1], key=lambda aResult: aResult[1]):
sQual = aEntry[2]
# Changemement de formats ...x... -> ....P
if '1920×' in sQual or '1440×' in sQual or '1904×' in sQual:
sQual = re.sub('(\d+×\d+)px', '[1080P]', sQual)
elif '1728×' in sQual:
sQual = re.sub('(\d+×\d+)px', '[800P]', sQual)
elif '1280×' in sQual:
# VSlog(sQual)
sQual = re.sub('(\d+×\d+)px', '[720P]', sQual)
elif '1024×' in sQual:
sQual = re.sub('(\d+×\d+)px', '[600P]', sQual)
elif '480×' in sQual:
sQual = re.sub('(\d+×\d+)px', '[360P]', sQual)
else:
sQual = re.sub('(\d+×\d+)px', '[480P]', sQual)
sTitle = 'E' + aEntry[1] + ' ' + sMovieTitle + ' ' + sQual
idEpisode = aEntry[0]
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('sMovieTitle', sTitle)
oOutputParameterHandler.addParameter('siteUrl', sUrl)
oOutputParameterHandler.addParameter('sThumb', sThumb)
oOutputParameterHandler.addParameter('serieID',serieID)
oOutputParameterHandler.addParameter('idEpisode', idEpisode)
oGui.addEpisode(SITE_IDENTIFIER, 'showHosters', sTitle, '', sThumb, sDesc, oOutputParameterHandler)
oGui.setEndOfDirectory()
def showMusic():
oGui = cGui()
oInputParameterHandler = cInputParameterHandler()
sUrl = oInputParameterHandler.getValue('siteUrl')
sThumb = oInputParameterHandler.getValue('sThumb')
oParser = cParser()
oRequestHandler = cRequestHandler(sUrl)
sHtmlContent = oRequestHandler.request()
sPattern = '<div data-track-file="([^"]+)".+?data-track-name="([^"]+)".+?"><span.+?>([^<]+)</span>'
aResult = oParser.parse(sHtmlContent, sPattern)
if (aResult[0] == False):
oGui.addText(SITE_IDENTIFIER)
if (aResult[0] == True):
for aEntry in aResult[1]:
sTitle = aEntry[2] + ' ' + aEntry[1]
mp3Url = aEntry[0]
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('sMovieTitle', sTitle)
oOutputParameterHandler.addParameter('mp3Url', mp3Url)
oOutputParameterHandler.addParameter('sThumb', sThumb)
oGui.addEpisode(SITE_IDENTIFIER, 'showMp3', sTitle, '', sThumb, '', oOutputParameterHandler)
oGui.setEndOfDirectory()
def showMp3():
oGui = cGui()
oInputParameterHandler = cInputParameterHandler()
mp3Url = oInputParameterHandler.getValue('mp3Url')
sMovieTitle = oInputParameterHandler.getValue('sMovieTitle')
sThumb = oInputParameterHandler.getValue('sThumb')
# if 'mp3' in mp3Url:
# sHosterUrl = mp3Url
oHoster = cHosterGui().checkHoster('m3u8')
if (oHoster != False):
oHoster.setDisplayName(sMovieTitle)
oHoster.setFileName(sMovieTitle)
cHosterGui().showHoster(oGui, oHoster, mp3Url, sThumb)
oGui.setEndOfDirectory()
def showHosters():
oGui = cGui()
oInputParameterHandler = cInputParameterHandler()
sUrl = oInputParameterHandler.getValue('siteUrl')
sMovieTitle = oInputParameterHandler.getValue('sMovieTitle')
sThumb = oInputParameterHandler.getValue('sThumb')
serieID = oInputParameterHandler.getValue('serieID')
idEpisode = oInputParameterHandler.getValue('idEpisode')
if 'fiche-anime' in sUrl:
sHosterUrl = URL_MAIN + 'launch-download-1-' + serieID + '-ddl-' + idEpisode + '.html'
elif 'fiche-drama' in sUrl:
sHosterUrl = URL_MAIN + 'launch-download-2-' + serieID + '-ddl-' + idEpisode + '.html'
oHoster = cHosterGui().checkHoster('m3u8')
if (oHoster != False):
oHoster.setDisplayName(sMovieTitle)
oHoster.setFileName(sMovieTitle)
cHosterGui().showHoster(oGui, oHoster, sHosterUrl, sThumb)
oGui.setEndOfDirectory()