毎日Learning

学んだことを共有します

Youtubeの動画をPythonでダウンロードする

Pythonのurllib2やBeautifulSoupを使って、Youtubeの動画をダウンロードするスクリプトを作った。

Youtubeの動画ファイルのURLがどこに隠されているのか、解析するために、Youtubeのソースをじーっと見続けたら、以下のスクリプトで取得できた。

作った後にググったら、PHPで行う動画変換(後編) (2/3):CodeZineに載ってた…。

ま、まあ、良いや。

以下のスクリプト。

import re
import simplejson
import urllib2

import BeautifulSoup

URLS = [
    "http://www.youtube.com/", # ここにダウンロードしたいYoutubeのサイトURLを指定
]

if __name__ == "__main__":
    p = re.compile("var swfConfig = ({.*?});") # このパターンでscriptから取得

    def __get(url):
        bs = BeautifulSoup.BeautifulSoup(urllib2.urlopen(url).read())
        f_name = bs.findAll("span", id="eow-title")[0].get("title") # Youtubeのサイトに書いてるtitleを取得
        f_flv = "%s.flv" % f_name # 取得したタイトルをファイル名に使用
        for s in bs.findAll("script"):
            m = p.search(s.string) if s.string else None
            if m:
                j = simplejson.loads(m.group(1).replace("\\ ", "\\"))
                w = open(f_flv, "wb")
                w.write(urllib2.urlopen(j["args"]["fmt_url_map"].split("|")[-1]).read())
                w.close()
                break

    for url in URLS:
        try:
            print "Begin: [%s]" % url
            __get(url)
            print "End  : [%s]" % url
        except Exception, e:
            print "ERROR: [%s]\t%s" % (url, e)

開始、終了のプリントしてたり、エラーをお知らせする程度の制御案内しかしてないが、まあ十分かな。

以上。