Sky Watch

Youtube Video URL Extractor in Python

By mw @

看到了 Cheng Meng 的那个 Youtube downloader,由于对 Ruby 的无知,一点也看不懂,所以就参考 DownloadYoutube video with GAWK 用 python 自己写了一个。与 Cheng Meng 那个不同,我这个只负责把视频文件 url 打印出来。用法是 youtube-url.py video-id 所以要下载 id为 qNKtKm3SXvs 的视频,可以用这个命令

wget -O video.flv youtube-url.py qNKtKm3SXvs

youtube-url.py 的代码:

#!/usr/bin/env python # Time-stamp: <corsair 2007-07-28 16:16:38> # Corsair <chris.corsair@gmail.com> # Usage: youtube-url video-id import sys import urllib2 import getopt

def main(): # Options parsing, fake for now. try: Options, Args = getopt.gnu_getopt(sys.argv[1:], "", []) except getopt.GetoptError: # print help information and exit: pass

if len(sys.argv) == 1:
    print "Pleas specify a video-id."
    sys.exit(1)

VideoID = sys.argv[1]
WatchPage = urllib2.urlopen(
    "".join(["http://youtube.com/watch?v=", VideoID]))

HtmlLine = ""
while HtmlLine.find("SWFObject") == -1:
    HtmlLine = WatchPage.readline()
UrlOriginal = HtmlLine[HtmlLine.find("BASE_YT_URL")+12:]
UrlOriginal = '?'.join(["http://www.youtube.com/get_video",
                        UrlOriginal[:UrlOriginal.find('\"')].
                        partition('&')[2]])

# Redirect

RedirectOpener = urllib2.build_opener( urllib2.HTTPRedirectHandler) Request = urllib2.Request(UrlOriginal) UrlReal = RedirectOpener.open(Request).url print UrlReal

if name == "main": main()