# -*- 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">([^<]+)' else: sPattern = '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 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 = "
.+?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".+?>([^<]+) ....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 = '
([^<]+)' 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()