astrXbian/.install/.kodi/addons/plugin.video.vstream/resources/lib/ba.py

142 lines
4.5 KiB
Python

# -*- coding: utf-8 -*-
# vStream https://github.com/Kodi-vStream/venom-xbmc-addons
try: # Python 2
import urllib2
except ImportError: # Python 3
import urllib.request as urllib2
import ssl
import re
from resources.hosters.youtube import cHoster
from resources.lib.handler.requestHandler import cRequestHandler
from resources.lib.gui.guiElement import cGuiElement
from resources.lib.player import cPlayer
from resources.lib.comaddon import addon, dialog
from resources.lib.tmdb import cTMDb
from resources.lib.util import QuotePlus
try:
import json
except:
import simplejson as json
SITE_IDENTIFIER = 'cBA'
SITE_NAME = 'BA'
class cShowBA:
def __init__(self):
self.sTrailerUrl = '' # fournie par les metadata
self.search = ''
self.year = ''
self.metaType = 'movie'
self.key = 'AIzaSyC5grY-gOPMpUM_tn0sfTKV3pKUtf9---M'
def SetSearch(self, search):
self.search = search
def SetYear(self, year):
if year:
self.year = year
def SetTrailerUrl(self, sTrailerUrl):
if sTrailerUrl:
try:
trailer_id = sTrailerUrl.split('=')[1]
self.sTrailerUrl = 'http://www.youtube.com/watch?v=' + trailer_id
except:
pass
def SetMetaType(self, metaType):
self.metaType = str(metaType).replace('1', 'movie').replace('2', 'tvshow').replace('3', 'movie').replace('4', 'tvshow')
def SearchBA_old(self):
url = 'https://www.googleapis.com/youtube/v3/search?part=id,snippet&q=%s&maxResults=1&relevanceLanguage=fr&key=%s' % (self.search, self.key)
req = urllib2.Request(url)
try:
gcontext = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
response = urllib2.urlopen(req, context=gcontext)
except:
response = urllib2.urlopen(req)
sHtmlContent = response.read()
result = json.loads(sHtmlContent)
response.close()
try:
ids = result['items'][0]['id']['videoId']
url = 'http://www.youtube.com/watch?v=%s' % ids
hote = cHoster()
hote.setUrl(url)
api_call = hote.getMediaLink()[1]
if not api_call:
return
oGuiElement = cGuiElement()
oGuiElement.setSiteName(SITE_IDENTIFIER)
oGuiElement.setTitle(self.search.replace('+', ' '))
oGuiElement.setMediaUrl(api_call)
oGuiElement.setThumbnail(oGuiElement.getIcon())
oPlayer = cPlayer()
oPlayer.clearPlayList()
oPlayer.addItemToPlaylist(oGuiElement)
oPlayer.startPlayer()
except:
dialog().VSinfo(addon().VSlang(30204))
return
return
def SearchBA(self, window=False):
sTitle = self.search + ' - Bande Annonce'
# Le lien sur la BA est déjà connu
urlTrailer = self.sTrailerUrl
# Sinon recherche de la BA officielle dans TMDB
if not urlTrailer:
meta = cTMDb().get_meta(self.metaType, self.search, year=self.year)
if 'trailer' in meta and meta['trailer']:
self.SetTrailerUrl(meta['trailer'])
urlTrailer = self.sTrailerUrl
# Sinon recherche dans youtube
if not urlTrailer:
urlTrailer = 'https://www.youtube.com/results?q=' + QuotePlus(sTitle) + '&sp=EgIYAQ%253D%253D'
oRequestHandler = cRequestHandler(urlTrailer)
sHtmlContent = oRequestHandler.request()
listResult = re.findall('"url":"\/watch\?v=([^"]+)"', sHtmlContent)
if listResult:
# Premiere video trouvée
urlTrailer = 'http://www.youtube.com/watch?v=' + listResult[0]
# BA trouvée
if urlTrailer:
hote = cHoster()
hote.setUrl(urlTrailer)
api_call = hote.getMediaLink()[1]
if not api_call:
return
oGuiElement = cGuiElement()
oGuiElement.setSiteName(SITE_IDENTIFIER)
oGuiElement.setTitle(sTitle)
oGuiElement.setMediaUrl(api_call)
oGuiElement.setThumbnail(oGuiElement.getIcon())
oPlayer = cPlayer()
oPlayer.clearPlayList()
oPlayer.addItemToPlaylist(oGuiElement)
oPlayer.startPlayer(window)
return