Telechargeur de video (youtube)

Description

Bonsoir a tous
ceci est mon second code python
il permet de telecharger une video sur youtube
il montre comment utiliser des regexp en python (pas tres evoluer malgre tout) , comment decouper des chaines de caractere , de rechercher un peu dedans
enfin que des methodes toutes betes mais qui misent bout a bout ont une utilité
en gros pas besoin d'etre une bete pour faire un programme utile :p

sinon ya aussi le passage pour telecharger le fichier qui peut etre interressant
je n'ai pas encore implmenter de GUI mais ca pourrais venir si je me le sens
la progression est facilement implementable mais je ne l'ai pas fait pour ne pas surcharger la console

Source / Exemple :


import sys
import urllib2
import re

# fonction permettant de recuperer le contenu de la page
def getSrcPage(url):
        #la sourc html a une portee globale
        global src 
        #on y met le contenu de la page
        src = urllib2.urlopen(url, None).read()
#methode pour recuperer le titre de la video
def getTitle():
    #on met le titre en global
    global titre
    #on cherche la balise <title> de l'html pour recuperer le titre
    titre = re.findall('<title>+[^\"]+</title>', src, re.IGNORECASE)
    #il n'y en a qu'un normalement donc indice 0
    titre = (titre[0])
    #on nettois les balise <title> et </title>
    titre = titre[7:len(titre)-8]
    print "telechargement de : %s" % titre
    
#on recupere ce qui est necessaire a la recuperation de la video
def getVariable():
    #futur adresse de la video
    global urlvideo
    #on cherche dans le code ou sont les vatiable
    vs = src.find('var fo = ')
    ve = src.find('"', vs + 30)
    #on garde que la ligne interressante
    var = src[vs:ve]
    #on r'ecupere l'id de la video
    indsvid = var.index("video_id=");
    indevid = var.index("&", indsvid);
    #on decoupe
    videoid = var[indsvid:indevid]
    #la variable t
    indst = var.index("t=");
    indet = var.index("&", indst);
    #on decoupe
    t = var[indst:indet]
    #url de telechargement
    urlvideo = "http://youtube.com/get_video?" +videoid +"&"+t
    print urlvideo

#methode pour telecharger le fichier
def getFile():
    #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(urlvideo, None, headers)
    vid = urllib2.urlopen(req)
    #on cree le fichier en mode ajout et ppour des donnees de type binaire
    file = open(titre +".flv" , "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
        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()
    
if len(sys.argv) > 1:
    print "telechargement de la video a l'adresse : %s" % sys.argv[1]
    getSrcPage(sys.argv[1])
    getTitle()
    getVariable()
    getFile()
else:
    print "usage:\n\t\tpython Main.py url\n\n\turl : l'adresse de la video"

Conclusion :


voila j'espere avoir des commentaires constructif sur la maniere d'ameliorer et optimiser le code .

je compte restructurer le programme pour utiliser les mecanisme de l'OO avec Thread eventuellement pour le telechargement

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.