# -*- coding: utf-8 -*- # vStream https://github.com/Kodi-vStream/venom-xbmc-addons import re import xbmc 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 QuoteSafe SITE_IDENTIFIER = 'otakufr_com' SITE_NAME = 'OtakuFR' SITE_DESC = 'OtakuFR animés en streaming et téléchargement' URL_MAIN = 'http://otakufr.com/' ANIM_NEWS = (URL_MAIN + 'latest-episodes/', 'showMovies') ANIM_ANIMS = ('http://', 'load') ANIM_POPULAR = (URL_MAIN + 'anime-list/all/any/most-popular/', 'showMovies') ANIM_VOSTFRS = (URL_MAIN + 'anime-list-all/', 'showAlpha') URL_SEARCH = (URL_MAIN + 'anime-list/search/', 'showMovies') URL_SEARCH_SERIES = (URL_SEARCH[0], 'showMovies') FUNCTION_SEARCH = 'showMovies' def load(): oGui = cGui() oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', 'siteUrl') oGui.addDir(SITE_IDENTIFIER, 'showSearch', 'Recherche', 'search.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', ANIM_NEWS[0]) oGui.addDir(SITE_IDENTIFIER, ANIM_NEWS[1], 'Animes (Derniers ajouts)', 'news.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', ANIM_POPULAR[0]) oGui.addDir(SITE_IDENTIFIER, ANIM_POPULAR[1], 'Animés (Populaire)', 'animes.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', ANIM_VOSTFRS[0]) oGui.addDir(SITE_IDENTIFIER, ANIM_VOSTFRS[1], 'Animés (VOSTFR)', 'vostfr.png', oOutputParameterHandler) oGui.setEndOfDirectory() def showSearch(): oGui = cGui() sSearchText = oGui.showKeyBoard() if (sSearchText != False): sUrl = URL_SEARCH[0] + sSearchText showMovies(sUrl) oGui.setEndOfDirectory() return def showMovies(sSearch=''): oGui = cGui() if sSearch: sUrl = sSearch.replace(' ', '+') else: oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() oParser = cParser() if '/latest-episodes/' in sUrl: sPattern = '[^<]+.+?(.+?)' # news else: sPattern = '

([^<]+)

.+?>>[/COLOR]', oOutputParameterHandler) if not sSearch: oGui.setEndOfDirectory() def showAlpha(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() oParser = cParser() sPattern = '([A-Z#])' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: sLetter = aEntry[1] Link = aEntry[0] oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', URL_MAIN + Link) oOutputParameterHandler.addParameter('AZ', sLetter) oGui.addDir(SITE_IDENTIFIER, 'showAZ', 'Lettre - [COLOR coral]' + sLetter + '[/COLOR]', 'animes.png', oOutputParameterHandler) oGui.setEndOfDirectory() def showAZ(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') dAZ = oInputParameterHandler.getValue('AZ') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() oParser = cParser() sPattern = '
  • ([^<]+)
  • ' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: if aEntry[1].upper()[0] == dAZ or aEntry[1][0].isdigit() and dAZ == '#': sUrl = aEntry[0] sTitle = aEntry[1] sDisplayTitle = sTitle + ' (' + 'VOSTFR' + ')' oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oGui.addDir(SITE_IDENTIFIER, 'showEpisodes', sDisplayTitle, 'animes.png', oOutputParameterHandler) oGui.setEndOfDirectory() def __checkForNextPage(sHtmlContent): oParser = cParser() sPattern = '
  • Next
  • ' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): return aResult[1][0] return False def showEpisodes(): oGui = cGui() oParser = cParser() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') # sThumb = oInputParameterHandler.getValue('sThumb') # sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() # thumb et syno sThumb = '' sDesc = '' try: sPattern = 'Synopsis:
    ([^<]+)

    ' aResult = oParser.parse(sHtmlContent, sPattern) if aResult[0]: sThumb = aResult[1][0][0] sDesc = aResult[1][0][1] except: pass # vire les non épisode sPattern = '' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in reversed(aResult[1]): p = re.search(r'(\d+)[ +](\d+)', aEntry[1]) if p: sTitle = re.sub(r'(\d+)[ +](\d+)', p.group(1) + '-' + p.group(2), aEntry[1]) else: sTitle = aEntry[1] iliste = ['Ep-', '-Vostfr', 'Vostfr-', '-Non-Censure', 'VF-', ' -'] for item in iliste: if item in aEntry[1]: sTitle = sTitle.replace(item, '') sUrl = aEntry[0] sThumb = sThumb.replace(' ', '%20') sTitle = sTitle.replace('Episode SP', '[ Episode Spécial ] episode').replace(' + ', '-')\ .replace('Episode New-', 'Episode').replace('Episode ONA', '[ Episode ONA ] episode')\ .replace('Episode OVA', '[ Episode OVA ] episode').replace('Episode NC', 'Episode') oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sDesc', sDesc) oGui.addEpisode(SITE_IDENTIFIER, 'showLinks', sTitle, 'animes.png', sThumb, sDesc, oOutputParameterHandler) oGui.setEndOfDirectory() def showLinks(): 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() sHtmlContent = oParser.abParse(sHtmlContent, '