Código
#!/usr/bin/env python # -*- coding: utf-8 -*- # WS Downloader.py - v0.1 (Beta) # Autor(es): .:WindHack:. & swik # www.daw-labs.com | www.cibernodo.net # Registrado en SafeCreative # Licencia: Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 # 17/11/2010 import sys, urllib, os # # @Charset # Char = ['%3A','%2F','%26','%2C','%3D','%252C','%253A','%7C','%3F'] By = [':','/','&',',','=',',',':','<begin>','?'] # # URLDecode(sURL) # Descifra la URL teniendo en cuenta el Charset. # def URLDecode(sURL): for i in range(len(Char)): sURL = sURL.replace(Char[i],By[i]) return sURL # # GetSourceCode(sURL) # Obtiene el código de fuente del vídeo (sitio). # def GetSourceCode(sURL): try: URL = urllib.urlopen(sURL) sSource = URL.read() URL.close() return sSource except: print 'Error de conexión.' exit() # # GetIndexVideo(sSource,Tags) # Obtiene la posición de un "Tag" o etiqueta. # def GetIndexVideo(sSource,Tags): return sSource.find(Tags) # # GetVideoTitle(sSource) # Obtiene el título del vídeo. # def GetVideoTitle(sSource): sSource = sSource[2000:5500] Begin = GetIndexVideo(sSource,'<meta name="title" content="')+28 sSource = sSource[Begin:] End = GetIndexVideo(sSource,'>')-1 sSource = sSource[:End] if ' ' in sSource: sSource = sSource.replace(' ','_') return sSource # # GetVideoURL(sSource) # Obtiene la URL de descarga del vídeo. # def GetVideoURL(sSource): sSource = sSource[9000:30000] Begin = GetIndexVideo(sSource,'<begin>')+7 sSource = sSource[Begin:] End = GetIndexVideo(sSource,'id=')+19 sSource = sSource[:End]+'&title=Video(WS_Downloader)' return sSource # # GetSavePath(Title) # Obtiene la ruta en la cual se guardará el vídeo, teniendo en cuenta # el sistema operativo. # def GetSavePath(Title): if os.name == 'posix': return os.getenv('HOME')+'/'+Title+'.flv' if os.name == 'nt': return os.getenv('HOMEDRIVE')+'\\'+Title+'.flv' # # DownloadStatus(Bloque, Tamano, Total) # Muestra el estado de la descarga. # def DownloadStatus(Bloque, Tamano, Total): Cantidad = Bloque * Tamano / 1024000.0 Total = Total / 1024000.0 print 'Cantidad descargada: %s MB de %s MB ...' % (round(Cantidad,1),round(Total,1)) if Cantidad >= Total: print 'Descarga finalizada.' # # DownloadVideo(sURL, sName, sStatus) # Descarga el vídeo de los servidores de YouTube. # def DownloadVideo(sURL, sName, sStatus): try: Download = urllib.urlretrieve(sURL, sName, sStatus) return Download[0] except: print 'Error el descargar.' exit() def __main__(): __Help__ = ''' __ ______ ____ _ _ \ \ / / ___| | _ \ _____ ___ __ | | ___ __ _ __| | ___ _ __ \ \ /\ / /\___ \ | | | |/ _ \ \ /\ / / '_ \| |/ _ \ / _` |/ _` |/ _ \ '__| \ V V / ___) | | |_| | (_) \ V V /| | | | | (_) | (_| | (_| | __/ | \_/\_/ |____/ |____/ \___/ \_/\_/ |_| |_|_|\___/ \__,_|\__,_|\___|_| © Cibernodo & DaW - Labs Uso: ./WS_Downloader.py <Opción> <Id> Opciones: -D : Descargar video directamente. -G : Obtener URL de descarga. -help : Ver Ayuda. ''' try: Opt = sys.argv[1] if Opt == '-help': print __Help__ if len(sys.argv) > 2: Id = URLDecode(GetSourceCode('http://www.youtube.com/watch?v='+sys.argv[2])) Title = GetSavePath(GetVideoTitle(Id)) URL = GetVideoURL(Id) if Opt == '-G': print '======== Video URL ========\n',URL elif Opt == '-D': DownloadVideo(URL,Title,DownloadStatus) except: print __Help__ if __name__ == "__main__": __main__()
Más Información:
DaW - Labs | WS Downloader: ¡Descarga vídeos de YouTube!
Cibernodo | WS Downloader: ¡Descarga vídeos de YouTube!