DailymotionのムラムラするスクリプトをPythonで
SoftwareDesign4月号のゆーすけべー氏の記事を見て、触発されたのでなんとなくPythonで書いてみた。
Dailymotionの動画を手に入れてムラムラするスクリプト http://yusukebe.com/archives/20130116/003123.html
動画の検索
#!/usr/bin/env python #-*- coding:utf-8 -*- import urllib import json import sys if __name__ == '__main__': if(len(sys.argv) < 2): print 'Usage: $ python %s query' % sys.argv[0] exit() query = '' for i, argv in enumerate(sys.argv): if i > 0: query += argv + ' ' query = query.rstrip() url = 'http://www.dailymotion.com/' #検索実行:jsonを取得 f = urllib.urlopen(url + 'json/relevance/search/' + query) #取得したjsonをデコード movieInfoList = json.loads(f.read()) for i in movieInfoList: print i['title'] print i['embed_url'] + '\n'
検索結果をjsonで取得して、タイトルとパーマリンクのURLだけ表示させている。
動画のダウンロード
#!/usr/bin/env python #-*- coding:utf-8 -*- import urllib import sys import json #ダウンロード時の進捗を表示 def reprthook ( count, size, totalSize): progress = 100.0 * count * size / totalSize downleadedSize = count * size / 1024 totalSize = totalSize / 1024 if progress > 100: sys.stdout.write( '%d / %d KB ( %.2f %% ) \r' % (totalSize, totalSize, 100 )) else: sys.stdout.write( '%d / %d KB ( %.2f %% ) \r' % (downleadedSize , totalSize, progress )) if __name__ == '__main__': if (len(sys.argv) < 2): print 'Usage: python %s URI...' % sys.argv[0] exit() for i, argv in enumerate(sys.argv): if i == 0: continue embedUrl = argv f = urllib.urlopen(embedUrl) content = f.read() movieUrl = u'' fileName = u'blank.mp4' titleIndex = content.find('<title>') + len(u'<title>') fileName = content[titleIndex:] fileName = fileName[:fileName.find('<')] + '.mp4' infoIndex = content.find('var info = ') + len(u'var info = ') infoJson = content[infoIndex:] infoJson = infoJson[:infoJson.find(',\n')] infoDict = json.loads(infoJson) #動画ファイルのURLを取得 movieUrl = infoDict.get('stream_h264_ld_url', infoDict.get('stream_h264_url', '')) print fileName print 'Please wait a moment... ' #ダウンロード開始 urllib.urlretrieve(movieUrl, fileName, reprthook) print '' print 'complete!!\n'
検索時に取得したURLを元に、動画を取得している。
もうちょっときれいにJson受け取れないもんかなぁ。
実行時
$ python getDailyMotionMovie.py <URL> <filename>.mp4 Please wait a moment... 44179 / 44179 KB ( 100.00 % ) complete!!
こんな感じ。
ダウンロード時の進捗については、
http://blog.remora.cx/2010/05/download-progress-in-python.html
http://docs.python.jp/2.5/lib/module-urllib.html
を参考にさせてもらいました。