Descargando videos en formato flv desde youtube.

Realmente no puedo entender cómo YouTube sirve videos, pero he estado leyendo lo que puedo, parece que el antiguo método get_video ahora es obsoleto y ya no se puede usar más, por lo que pregunto si hay otro tipo de letra python y simple. Método para coleccionar videos de youtube.

Podrías tener algo de suerte con youtube-dl

http://rg3.github.com/youtube-dl/documentation.html

No estoy seguro de si hay una buena API, pero está escrita en Python, así que teóricamente podrías hacer algo un poco mejor que Popen 🙂

Aquí hay un script rápido de Python que descarga un video de Youtube. Sin campanas y silbidos, solo elimina las URL necesarias, golpea la URL generar_204 y luego transmite los datos a un archivo:

import lxml.html import re import sys import urllib import urllib2 _RE_G204 = re.compile('"(http:.+.youtube.com.*\/generate_204[^"]+")', re.M) _RE_URLS = re.compile('"fmt_url_map": "(\d*[^"]+)",.*', re.M) def _fetch_url(url, ref=None, path=None): opener = urllib2.build_opener() headers = {} if ref: headers['Referer'] = ref request = urllib2.Request(url, headers=headers) handle = urllib2.urlopen(request) if not path: return handle.read() sys.stdout.write('saving: ') # write result to file with open(path, 'wb') as out: while True: part = handle.read(65536) if not part: break out.write(part) sys.stdout.write('.') sys.stdout.flush() sys.stdout.write('\nFinished.\n') def _extract(html): tree = lxml.html.fromstring(html) res = {'204': _RE_G204.findall(html)[0].replace('\\', '')} for script in tree.findall('.//script'): text = script.text_content() if 'fmt_url_map' not in text: continue # found it, extract the urls we need for tmp in _RE_URLS.findall(text)[0].split(','): url_id, url = tmp.split('|') res[url_id] = url.replace('\\', '') break return res def main(): target = sys.argv[1] dest = sys.argv[2] html = _fetch_url(target) res = dict(_extract(html)) # hit the 'generate_204' url first and remove it _fetch_url(res['204'], ref=target) del res['204'] # download the video. now i grab the first 'download' url and use it. first = res.values()[0] _fetch_url(first, ref=target, path=dest) if __name__ == '__main__': main() 

Ejecutandolo

 python youdown.py 'http://www.youtube.com/watch?v=Je_iqbgGXFw' stevegadd.flv saving: ........................... finished. 

Recomendaría escribir su propio analizador usando urllib2 o beautifulsoup. Puedes ver el código fuente de DownThemAll para ver cómo ese complemento encuentra la url del video