urllib2 et interface graphique
bonjour :)
aprés avoir eu de nombreux "problemme" avec les 72 minutes de limitation vidéo de MEGAVIDEO, j'ai décidé de faire un programme qui se sert d'un Thread pour télécharger la vidéo. de cette façon, des le debut du programme il est possible de regarder la vidéo avec le media player de notre choix pendant son téléchargement. et donc ainsi plus de souci de limitation :ccool:
mon problemme est le suivant :
j'ai donc voulut faire une interface graphique a mon programme pour en faire un executable pour mon frere et des amis qui comprenne rien en programmation et qui seraient pas capable de changer une ligne dans un code :lol:
du coup le telechargement est trés lent, voir inexistant et surtout il s'arrete des que l'on lance la video. problemme qui n'apparais pas dans le programme sans interface.
je vais mettre les deux codes : (pour que vous puissiez les utilisers pour megavideo et ^^ qui vous puissiez resoudre ce problemme
code avec interface graphique
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
# -*- coding: utf-8 -*-"
from threading import Thread
import urllib2
import Tkinter
import sys
import os
titre = "ma video temporaire.avi"
class Interface(Tkinter.Frame):
def __init__(self):
Tkinter.Frame.__init__(self)
self.master.title("visionneur")
Tkinter.Button(self, text = "lancer", fg = "blue", command = self.lancer).grid(row = 2, column = 1)
Tkinter.Button(self, text = "Annuler", fg = "red", command = self.Annuler).grid(row = 2, column = 2)
self.entreeAdresse = Tkinter.Entry(self, width = 150, fg = "grey")
self.entreeAdresse.grid(row = 1, column = 1, columnspan = 2)
self.entreeAdresse.insert(Tkinter.END, "coller l'adresse de la video a visioner/telecharger")
self.grid()
def lancer(self):
url = self.entreeAdresse.get()
Th = Thread_telecharge(url)
Th.start()
def Annuler(self):
self.master.destroy()
def clean(self, evt):
self.entreeAdresse.delete(0, Tkinter.END)
self.entreeAdresse.configure(fg = "black")
class Thread_telecharge(Thread):
def __init__(self, URL_video):
Thread.__init__(self)
self.URL_video = URL_video
def run(self):
titre ="ma video temporaire.avi"
#header pour nous faire passer comme un navigateur normal (inutile mais sait on jamaisà)
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent' : user_agent }
req = urllib2.Request(self.URL_video, None, headers)
vid = urllib2.urlopen(req)
#on cree le file fichier en mode ajout et pour des donnees de type binaire
file = open(titre , "a+b")
#on recupere la taille du fichier
lg = vid.headers.get('content-length')
# on la converti en entier
lg = int(lg)
# "buffer"
data = ''
#tant que ...
while True :
#lire les 4096 octet suivant soit 4 Ko
data = vid.read(4096)
#... le buffer n'est pas null apres une lecture
if not data: break
#on ecris les donnees dans le ffichier
file.write(data)
#on vide le buffer
data = None
#histoire de finalise l'ecriture
file.flush()
#on ferme le fichier
file.close()
print "télécharger"
if __name__ == "__main__":
App = Interface()
App.entreeAdresse.bind("<Button-1>", App.clean)
App.mainloop() |
et le code sans interface graphique
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
# -*- coding: utf-8 -*-"
from threading import Thread
import urllib2
import Tkinter
import sys
import os
"""
titre = "ma video temporaire.avi"
class Interface(Tkinter.Frame):
def __init__(self):
Tkinter.Frame.__init__(self)
self.master.title("visionneur")
Tkinter.Button(self, text = "lancer", fg = "blue", command = self.lancer).grid(row = 2, column = 1)
Tkinter.Button(self, text = "Annuler", fg = "red", command = self.Annuler).grid(row = 2, column = 2)
self.entreeAdresse = Tkinter.Entry(self, width = 150, fg = "grey")
self.entreeAdresse.grid(row = 1, column = 1, columnspan = 2)
self.entreeAdresse.insert(Tkinter.END, "coller l'adresse de la video a visioner/telecharger")
self.grid()
def lancer(self):
url = self.entreeAdresse.get()
Th = Thread_telecharge(url)
Th.start()
def Annuler(self):
self.master.destroy()
def clean(self, evt):
self.entreeAdresse.delete(0, Tkinter.END)
self.entreeAdresse.configure(fg = "black")
"""
class Thread_telecharge(Thread):
def __init__(self):
Thread.__init__(self)
self.URL_video = "http://www697.megaupload.com/files/465ee85072e01802793703c4731d4b2f/FlashForward.S01E19.VOSTFR.HDTV.XviD.avi"
def run(self):
titre ="ma video temporaire.avi"
#header pour nous faire passer comme un navigateur normal (inutile mais sait on jamaisà)
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent' : user_agent }
req = urllib2.Request(self.URL_video, None, headers)
vid = urllib2.urlopen(req)
#on cree le file fichier en mode ajout et pour des donnees de type binaire
file = open(titre , "a+b")
#on recupere la taille du fichier
lg = vid.headers.get('content-length')
# on la converti en entier
lg = int(lg)
# "buffer"
data = ''
#tant que ...
while True :
#lire les 4096 octet suivant soit 4 Ko
data = vid.read(4096)
#... le buffer n'est pas null apres une lecture
if not data: break
#on ecris les donnees dans le ffichier
file.write(data)
#on vide le buffer
data = None
#histoire de finalise l'ecriture
file.flush()
#on ferme le fichier
file.close()
print "télécharger"
"""
if __name__ == "__main__":
App = Interface()
App.entreeAdresse.bind("<Button-1>", App.clean)
App.mainloop()
"""
Th = Thread_telecharge()
Th.start() |
voila, comme vous pouvez le constater ce sont a peu de chose prés les même codes 8O