スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Google YouTube APIを活用して特定のキーワードのタイトルをがっつり落とす③

最後となりますが、YouTube APIで取得できない情報を個別に情報を取得し、ダウンロードします。
この部分はYouTube APIではないため、YouTubeの仕様変更で書き換えが必要になってくる可能性が高いです。
大まかな部分は変わらないと思われますが、リスクがあることをご承知ください。


Pythonでダウンロードするメリットもあまりないかもしれませんので、URLリストを作成するように改版してもいいかもしれません。
お好みで書き換えるなりしてください。

・タイトル個別ページから情報を取得する

ダウンロードするファイルは、手っ取り早いもっとも高画質なものとしてます。
念のため既にダウンロードしたファイルはチェックしてスキップします。


#ダウンロード事前処理
def get_yt_info(p_obj):

for entry in result_list:

#idページよりフォーマットの種類を取得
fp = urllib2.urlopen(entry['url'])
html = fp.read()
fp.close()

try:
#ダウンロードできるフォーマットタイプ取得
#fmt_list抽出
q = p_obj['fmt_list'].search(html)
fmt_line = q.group(1)
fmt_line = urllib.unquote_plus(fmt_line)
r = p_obj['fmt_type'].findall(fmt_line) #複数マッチを取得

#ダウンロードURL取得
s = p_obj['fmt_url'].search(html)
fmt_type = s.group('fmt_type')
dl_url = s.group('dl_url')
dl_url = urllib.unquote_plus(dl_url)
filename = u'%s%s - %s.%s' % (dl_forder, entry['title'], entry['id'], yt_fmt_tbl[fmt_type])

#ファイル情報取得
fp = urllib2.urlopen(dl_url)
header = fp.info()
#real_url = fp.geturl() #転送された場合のURL表示
fp.close()
content_length = int(header.getheader("content-length"))
file_size = content_length / 1048576.00

#情報表示
print u'######'
print u'タイトル : ' + entry['title']
print u'説明 : ' + entry['desc']
print u'再生URL : ' + entry['url']
print u'時間(秒) : ' + entry['sec']
print u'format : ' + fmt_line
print u'file : ' + filename
print u'size : %.2f MB' % file_size

#重複チェック
if os.path.isfile(filename) and content_length == int(os.path.getsize(filename)):
print u'###### ファイル重複スキップ ######'
else:
print u'###### ダウンロード処理開始 ######'
get_yt_video_file(dl_url, filename)
print u'###### ダウンロード処理終了 ######'

except:
print u'###### url 取得に失敗 ######'
write_err_log(u'url abort', entry['url'])


・ダウンロード

これといって説明の必要なさそうです。


#ダウンロードの進捗表示
def reporthook(count, b_size, t_size):

progress = 100.0 * count * b_size / t_size

if progress > 10:
now_time = int(time.mktime(time.localtime()))
passed_time = now_time - start_time
if passed_time != 0:
bps = t_size * 8 / passed_time / 1024.00 / 1024.00
sys.stdout.write("%.2f %% %.2f Mbps (%d KB) \r" % (progress, bps, t_size / 1024))
else:
sys.stdout.write( "%.2f %% (%d KB)\r" % (progress, t_size / 1024))

#ダウンロード処理
def get_yt_video_file(dl_url, filename):

global start_time
start_time = int(time.mktime(time.localtime()))

try:
urllib.urlretrieve(dl_url, filename, reporthook)
except:
print u'###### ダウンロード中断 ######'
write_err_log(u'dl abort', dl_url)


最後にソースを添付しておきます。
txtをpyに書き換えてご利用ください。

Pythonのソースはご覧の通り見やすく、Portable Python環境をUSBに作成しておけば、どこでもプログラムできますし、実行ができお手軽ですね!
gdata-python-clientは、カレンダーなどいろいろなデータを取り込むことができるので、活用してみてはいかがでしょうか?

APIのページが英語なのが難点ですが・・・><
関連記事
スポンサーサイト

tag : Python Portable gdata

コメント

Secret

プロフィール

cherrypy

Author:cherrypy
四方山話とか、にわかプログラミングなどについて語ります。

カウンター
はてな人気エントリー
最新記事
スポンサードリンク
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。