begin process at 2012 02 08 12:07:03
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseau & internet

 > TELECHARGEUR DE VIDEO (YOUTUBE)

TELECHARGEUR DE VIDEO (YOUTUBE)


 Information sur la source

Note :
8,5 / 10 - par 4 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Réseau & internet Classé sous :youtube, telecharger, url, regexp, string Niveau :Débutant Date de création :13/05/2007 Date de mise à jour :20/05/2007 21:15:10 Vu / téléchargé :36 251 / 487

Auteur : sheorogath

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (25)
Ajouter un commentaire et/ou une note


 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

  • 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"
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

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

13 mai 2007 19:03:39 :
correction d'un commentaire
20 mai 2007 21:15:10 :
ajout du zip

 Sources du même auteur

LISTER DES FICHIER ET ECRIRE LE RESULTAT DANS UN FICHIER

 Sources de la même categorie

SOCKET MULTITHREAD SIMPLE par Guillamue06
TRANSFERT DE FICHIER PAR SOCKET par Guillamue06
Source avec une capture AUTO-FOLLOW/UNFOLLOW [TWITTER] EN [PERL] UTILISANT NET::TWIT... par GeroXXXX
Source avec Zip PINGEUR RÉSEAU par jeanbleo44
Source avec Zip Source avec une capture LISTING ET LOGS DES CONNEXIONS ET DECONNEXIONS DE MACHINES Q... par saigneurdushi

 Sources en rapport avec celle ci

TÉLCHARGEUR YOUTUBE par rezuz
RECHERCHE DE CARACTERE DANS UNE PHRASE par cloud21

Commentaires et avis

Commentaire de econs le 14/05/2007 15:44:17 administrateur CS

Difficile d'être plus clair. Code et commentaires sont limpides.
Puisque tu récupéres le header 'content-length', pourquoi n'en ferais-tu pas quelque chose ? Un p'tit print ?

Sur cette ligne, j'aurai plutôt testé l'égalité avec 1
if len(sys.argv) > 1:

car celui qui rentrerait 2 arguments verrait le code s'exécuter avec comme source le 1er argument. Si cet argument est une URL YouTube => OK, sinon, il va avoir des soucis et ne comprendra pas ce qui se passe.

Commentaire de sheorogath le 15/05/2007 20:37:13 administrateur CS

merci pour ce commentaire

heu je comprend pas trop pour les arguments si je recupere le second agument sachant que sys.argv[0] represente le nom de fichier ... non ?

le header serviras a gerer l'avancement du telechargement

sinon encore merci pour ton commentaire !

Commentaire de econs le 16/05/2007 13:47:15 administrateur CS

Ce que je voulais dire, c'est que si quelqu'un met 6 arguments dans la ligne de commande (va savoir pourquoi !), tu ne l'avertis pas de l'erreur de format puisque, de toutes façons, tu ne downloaderas que argv[1].

Avec
if len(sys.argv) == 1:

tu ne traiteras QUE les commandes bien formatées. Ceux qui mettront 6 arguments devront se résoudre à n'en passer qu'un seul.

Commentaire de aera group le 20/05/2007 16:59:43

Peux tu mêtre un exemple d'utilisation, je n'ai pas très bien compris comment fonctionne le script

Commentaire de sheorogath le 20/05/2007 18:02:04 administrateur CS

exmple avec la video a l'adresse : http://www.youtube.com/watch?v=ms_9iuGxyQA

dans un shell : python Main.py http://www.youtube.com/watch?v=ms_9iuGxyQA

tu remplace Main.py par le nom de fichier ou tu as mis mon script

Commentaire de krusty24 le 21/05/2007 11:14:03

J'ai testé ton programme avec une video choisie au hasard sur youtube. Le résultat est que je me retrouve avec un fichier portant le nom de la video ayant une taille de 0KB. Est-ce nomal? Si oui, que dois-je faire avec se fichier?

Je suis desoler de t'embarraser avec mais question mais il c'est parce que ton programme me semble trés intéressant.

Commentaire de Zaltez le 28/05/2007 22:16:26

J'ai teste, le programme marche nikel sous windows le plus simple est de creer un fichier .bat et d'ecrire ceci : D:\Main.py http://www.youtube.com/watch?v=ms_9iuGxyQA
D:\Main.py (le chemin d'acces du fichier Main.py)
suivie de : http://www.youtube.com/watch?v=ms_9iuGxyQA (l'argument de la fonction ici l'url de la video)

Commentaire de sheorogath le 12/06/2007 18:48:10 administrateur CS

krusty quel est l'url de la video que tu as essaye de telecharger ?

Commentaire de krusty24 le 12/06/2007 21:01:37

je ne sais plus, mais j ai essayé avec d'autre video et sa a marché sans probleme. Tu as fait du bon boulot continue comme sa

Commentaire de lvga31 le 15/08/2007 21:29:02

Help pour un néophyte qui découvre python.

bon j'ai python version 2.5 sous un pc sous xp et j'utilise IDLE(python GUI)

je charge le fichier Main.py , je lance le programme en cliquant sur "Run" puis "run module"

comment lancer la commande Main.py http:www.youtube.com/watch?v=ms_9iuGxyQA ?


j'ai pensé la taper après >>>

Après avoir lancer Main.py
voila ce que j'obtiens:
>>> ================================ RESTART ================================
>>>
usage:
python Main.py url

url : l'adresse de la video
>>> Main.py http://www.youtube.com/watch?v=ms_9iuGxyQA (que je tape)

SyntaxError: invalid syntax (message que j'obtiens!!)
>>>



J'obtiens systematiquement le message "SyntaxError: invalid syntax"
Pouvez vous m'expliquer comment il faut s'y prendre pour lancer ce programme avec son argument

Commentaire de sheorogath le 15/08/2007 22:10:44 administrateur CS

nan ^^
tu fais un bat avec ca dedans :

cmd

ensuite tu place le bat dans a cote de main.py

ensuite tu le demarre
dans la fenetre noire tu entre:  python Main.py http://www.youtube.com/watch?v=ms_9iuGxyQA

Commentaire de aera group le 02/09/2007 12:21:01

Bonjour :

il y a un bug ; Qaund j'excécute ton script à l'aide d'un fichier bat contenant

**************************
"C:\Python24\Python.exe" "C:\Python24\main.py" "http://www.youtube.com/watch?v=ms_9iuGxyQA"
Pause
**************************

(Pause permet de garder la fenêtre DOS ouverte)
j'obtien cette erreur :

**************************
File "C:\Python24\main.py", line 33 in getVariable
indsvid = var.index("video_id=");
ValueError: substring not found
**************************

Il semblerait que "video_id=" ne soit pas la bonne variable. De plus, pourquoi à tu mis un point-virgule ";" à la fin de la ligne ?

Commentaire de aera group le 02/09/2007 12:22:10

J'ai oublier de te demander si tu utilisé Python 2.5 (moi je suis encore à Python 2.4).
Merci de tes réponses

Commentaire de PCPT le 02/09/2007 15:36:49 administrateur CS

salut,

arf çà m'aurait bien intéressé çà....


j'ai également une erreur :(


ton code placé dans "C:\TEST\youtube.py"
le batch dans le même rep contenant :
C:\TEST\youtube.py http://www.youtube.com/watch?v=ms_9iuGxyQA
Pause


la connexion se fait bien mais hop =>


C:\TEST>C:\TEST\youtube.py http://www.youtube.com/watch?v=ms_9iuGxyQA
sys:1: DeprecationWarning: Non-ASCII character '\xe0' in file C:\TEST\youtube.py
on line 48, but no encoding declared; see http://www.python.org/peps/pep-0263.h
tml for details
telechargement de la video a l'adresse : http://www.youtube.com/watch?v=ms_9iuGx
yQA
telechargement de : YouTube - kung fu
Traceback (most recent call last):
  File "C:\TEST\youtube.py", line 80, in ?
    getVariable()
  File "C:\TEST\youtube.py", line 33, in getVariable
    indsvid = var.index("video_id=");
ValueError: substring not found

C:\TEST>Pause
Appuyez sur une touche pour continuer...



une idée sheorogath?
(ligne 48 et 80 ?)
++ ;)

Commentaire de Zaltez le 04/09/2007 17:19:40

Salut,
je pense que le code ne marche plus car la page html de youtube a été restructurée.
Et étant donné que le code parse du html sa ne marche plus.

A modifier juste la fonction def getVariable()
Début de modification a effectuer : a partir de la ligne 28
remplacer vs = src.find('var fo = ') par var vs = src.find('swfArgs = ')

Après il faut simplement récuperer la chaine en changeant les paramètres de découpe de la chaine.

Commentaire de sheorogath le 05/09/2007 18:03:25 administrateur CS

merci je m'en occupe des que j'ai le temps

je me doutais bien que ca arriverais lol

Commentaire de aera group le 05/09/2007 18:07:17

J'ai fait quelques recherche. J'ai déja trouvé deux modifications :

"indsvid = var.index("video_id=");" ==> indsvid = var.index("video_id:");
"indst = var.index("t=");" ==> indst = var.index("t:");

Dans les deux cas, la variable est suivi de deux points (":") et non un égale ("=")

Commentaire de sheorogath le 07/09/2007 01:15:10 administrateur CS

sympa merci bcp je my penche des que je peux ^^

Commentaire de V4mp le 25/09/2007 21:36:20

Le programme bug chez moi... .

Commentaire de sheorogath le 26/09/2007 10:43:06 administrateur CS

avec le nouvelle version de youtube mon programme ne marche pas
j'ai pas encore eut le temps de le mettre a jour

je pense que d'ici dimanche ca sera fait

Commentaire de V4mp le 26/09/2007 11:39:53

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

je noterais aprés :)!

Commentaire de skone007 le 10/02/2008 21:10:46

Il y a eu une MAJ sur DailyMotion et ca ne marche plus :(

Commentaire de sheorogath le 10/02/2008 21:48:25 administrateur CS

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

Commentaire de ehadrien le 10/03/2008 12:04:38 5/10

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.

Commentaire de Saros le 11/08/2008 01:31:26

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

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Telecharger fichier a partir d'url [ par sheorogath ] bonjour a tous ,je voudrais avoir une piste de recherche quant a telecharger un fichier a partir d'une url connu : peut recuperer comme en java le flu Définir une liste de string [ par Mr.X ] Mon problème est que dans ma classe une fonction execute une instruction du type : self.lst[i] = bufferet python me renvoi que self.lst n'est pas défi Probleme de "Package" [ par elnabo ] Bonjour, voila comme vous avez peut-être vu j'ai codé une petite calculatrice basique (code, ici: [url=http://www.pythonfrance.com/codes/CALCULATRICE- FTP - conversion string/entier [ par nordier ] Bonjour, Je suis connecté en mode FTP sur un répertoire qui contient des fichiers de ce type: +_bouillant_pierre_1837.png # analyse des fichiers p Équivalent de VideoCapture [ par daviddubois ] Bonjour tout le monde, Je cherche un équivalent à VideoCapture : [url=http://videocapture.sourceforge.net/]Tapez le texte de l'url ici.[/url] Avec V Dev plugin Blender [ par neodante ] NeodanteNeodante<img src=/imgs2/smile_big.gif border=0 align="absmiddle" Enlever des espaces dans un string [ par jean_adimp_ch ] Bonjour, &nbsp;&nbsp; J'aimerais pouvoir enlever des espaces dans un string. Est-ce qu'il existe une fonction python simple qui puisse effectuer cette string -> integer [ par Nightfighter ] Bon, je vais passer pour un naab.C'est pas grave, alors, je sais pas somment convertir une string en integer.Ca y est je passs pour un naabVive Le Met


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,780 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales