150 lines
5.1 KiB
Python
150 lines
5.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Vstream https://github.com/Kodi-vStream/venom-xbmc-addons
|
|
#
|
|
# Pour l'utiliser
|
|
# from resources.lib.captcha import Captcha_Get_Reponse
|
|
#
|
|
|
|
try:
|
|
import urllib2
|
|
|
|
except ImportError:
|
|
import urllib.request as urllib2
|
|
|
|
import xbmcvfs
|
|
import xbmc
|
|
import xbmcgui
|
|
|
|
from resources.lib.comaddon import dialog
|
|
|
|
NewMethod = True
|
|
dialogs = dialog()
|
|
|
|
|
|
def Captcha_Get_Reponse(img, cookie):
|
|
|
|
# on telecharge l'image
|
|
# PathCache = xbmc.translatePath(xbmcaddon.Addon("plugin.video.vstream").getAddonInfo("profile"))
|
|
# filename = os.path.join(PathCache, "Captcha.raw").decode("utf-8")
|
|
filename = "special://home/userdata/addon_data/plugin.video.vstream/Captcha.raw"
|
|
|
|
headers2 = {
|
|
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0",
|
|
# "Referer": url ,
|
|
"Host": "protect.ddl-island.su",
|
|
"Accept": "image/png,image/*;q=0.8,*/*;q=0.5",
|
|
"Accept-Language": "fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4",
|
|
"Accept-Encoding": "gzip, deflate",
|
|
# "Content-Type": "application/x-www-form-urlencoded",
|
|
}
|
|
|
|
if cookie:
|
|
headers2["Cookie"] = cookie
|
|
|
|
try:
|
|
req = urllib2.Request(img, None, headers2)
|
|
image_on_web = urllib2.urlopen(req)
|
|
if image_on_web.headers.maintype == "image":
|
|
buf = image_on_web.read()
|
|
# downloaded_image = file(filename, "wb")
|
|
downloaded_image = xbmcvfs.File(filename, "wb")
|
|
downloaded_image.write(buf)
|
|
downloaded_image.close()
|
|
image_on_web.close()
|
|
else:
|
|
return ""
|
|
except:
|
|
return ""
|
|
|
|
# on affiche le dialogue
|
|
solution = ""
|
|
|
|
if NewMethod:
|
|
# nouveau captcha
|
|
try:
|
|
# affichage du dialog perso
|
|
class XMLDialog(xbmcgui.WindowXMLDialog):
|
|
# """
|
|
# Dialog class for captcha
|
|
# """
|
|
def __init__(self, *args, **kwargs):
|
|
xbmcgui.WindowXMLDialog.__init__(self)
|
|
pass
|
|
|
|
def onInit(self):
|
|
# image background captcha
|
|
self.getControl(1).setImage(filename.encode("utf-8"), False)
|
|
# image petit captcha memory fail
|
|
self.getControl(2).setImage(filename.encode("utf-8"), False)
|
|
self.getControl(2).setVisible(False)
|
|
# Focus clavier
|
|
self.setFocus(self.getControl(21))
|
|
|
|
def onClick(self, controlId):
|
|
if controlId == 20:
|
|
# button Valider
|
|
solution = self.getControl(5000).getLabel()
|
|
xbmcgui.Window(10101).setProperty("captcha", str(solution))
|
|
self.close()
|
|
return
|
|
|
|
elif controlId == 30:
|
|
# button fermer
|
|
self.close()
|
|
return
|
|
|
|
elif controlId == 21:
|
|
# button clavier
|
|
self.getControl(2).setVisible(True)
|
|
kb = xbmc.Keyboard(self.getControl(5000).getLabel(), "", False)
|
|
kb.doModal()
|
|
|
|
if kb.isConfirmed():
|
|
self.getControl(5000).setLabel(kb.getText())
|
|
self.getControl(2).setVisible(False)
|
|
else:
|
|
self.getControl(2).setVisible(False)
|
|
|
|
def onFocus(self, controlId):
|
|
self.controlId = controlId
|
|
|
|
def _close_dialog(self):
|
|
self.close()
|
|
|
|
def onAction(self, action):
|
|
# touche return 61448
|
|
if action.getId() in (9, 10, 11, 30, 92, 216, 247, 257, 275, 61467, 61448):
|
|
self.close()
|
|
|
|
path = "special://home/addons/plugin.video.vstream"
|
|
wd = XMLDialog("DialogCaptcha.xml", path, "default", "720p")
|
|
wd.doModal()
|
|
del wd
|
|
finally:
|
|
|
|
solution = xbmcgui.Window(10101).getProperty("captcha")
|
|
if solution == "":
|
|
dialogs.VSinfo("Vous devez taper le captcha")
|
|
|
|
else:
|
|
# ancien Captcha
|
|
try:
|
|
img = xbmcgui.ControlImage(450, 0, 400, 130, filename.encode("utf-8"))
|
|
wdlg = xbmcgui.WindowDialog()
|
|
wdlg.addControl(img)
|
|
wdlg.show()
|
|
# xbmc.sleep(3000)
|
|
kb = xbmc.Keyboard("", "Tapez les Lettres/chiffres de l'image", False)
|
|
kb.doModal()
|
|
if kb.isConfirmed():
|
|
solution = kb.getText()
|
|
if solution == "":
|
|
dialogs.VSinfo("Vous devez taper le captcha")
|
|
else:
|
|
dialogs.VSinfo("Vous devez taper le captcha")
|
|
finally:
|
|
wdlg.removeControl(img)
|
|
wdlg.close()
|
|
|
|
return solution
|