Telechargeur de video (youtube)

Soyez le premier à donner votre avis sur cette source.

Vue 43 367 fois - Téléchargée 969 fois

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

Ajouter un commentaire

Commentaires

Messages postés
921
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
23 septembre 2010

VLC lit très bien les flv, pas besoin de changer d'extension.

Et je confirme pour la ligne 28, on peut récupérer les infos via le lien fullscreen
Messages postés
1
Date d'inscription
mercredi 1 novembre 2000
Statut
Membre
Dernière intervention
10 mars 2008

Bonjour,

Tout d'abord, un petit pb de forme. Python n'aime pas le "à" ligne 48
Ligne 28, il faut remplacer 'var fo ' par "var fullscreenUrl "

Enfin, pour les utilisateurs de Linux, pour lequel il n'y a pas, à ma connaissance, de lecteur fvl, on peut remplacer fvl ligne 54 par swf, et utiliser vlc pour lire le fichier

Et j'apprécie beaucoup ce script, très utile. Merci.
Messages postés
2448
Date d'inscription
samedi 21 février 2004
Statut
Modérateur
Dernière intervention
29 janvier 2010
12
oui je n'ai pas encore eut le courage de faire la maj
ca marchais sur youtube
dailymotion je n'ai jamais fais la portabilite
Messages postés
166
Date d'inscription
mercredi 24 avril 2002
Statut
Membre
Dernière intervention
23 juin 2009

Il y a eu une MAJ sur DailyMotion et ca ne marche plus :(
Messages postés
21
Date d'inscription
samedi 22 septembre 2007
Statut
Membre
Dernière intervention
30 septembre 2007

ok ok j'attend avec impatience mais ton code est bien et l'utilisté aussi !

je noterais aprés :)!
Afficher les 25 commentaires

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.