スポンサーサイト

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

iTunesで聞けるプレビューの曲をダウンロードするプログラムを書いてみた!

以前書いたYouTubeをダウンロードするコードを流用しつつ、iTunesのリンクからアルバムの全曲落としてくるコードをPythonで書いてみました。

今回は特筆すべき部分というのはないので、コードをぺたっと貼っておくだけです・・・。

使い方は、iTunesのURLをコピーして、引数に渡すだけです。

iTunesからリンクのURLをコピー

> getunes.py http://itunes.apple.com/jp/album/id319775418

こんな感じです。



#! /usr/bin/env python
# -*- coding: utf-8 -*-

"""
【Version】
0.10 2010/06/22 iTunesプレビューダウンロード

【Note】

"""
#import-----------------------------------------------------------------------
import sys, os, time
import re
import urllib, urllib2

#define-----------------------------------------------------------------------
app_name = 'iTunes-Download-Helper'
app_ver = '0.10'

#DLフォルダ
dl_forder = u'D:\\itunes\\'

#function---------------------------------------------------------------------
#UTF-8からUnicodeへ変換
def uni_conv(s):

try:
u_text = unicode(s, 'utf-8')
except:
u_text = s

return u_text

#ファイル名に使えない文字列書き換え
def conv_filename(filename):
filename = filename.replace('\\', ' ')
filename = filename.replace('<', ' ')
filename = filename.replace('>', ' ')
filename = filename.replace(':', ' ')
filename = filename.replace('"', ' ')
filename = filename.replace('/', ' ')
filename = filename.replace('|', ' ')
filename = filename.replace('?', ' ')
filename = filename.replace('*', ' ')

return filename

#正規表現をあらかじめコンパイルしておく関数
def create_re_obj():

precompile = {}

precompile['music'] = re.compile(u'\saudio-preview-url="(?P.*?)" preview-album="(?P.*?)".*?$\s*\s*(?P.*?)<\/span>', re.MULTILINE)

return precompile

#ダウンロードの進捗表示
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
print "%.2f %% %.2f Mbps (%d KB) \r" % (progress, bps, t_size / 1024),
else:
print "%.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, dl_forder + filename, reporthook)
except:
print u'###### ダウンロード中断 ######'

#ダウンロード事前処理
def dl_file(dl_list):

for (preview_url, preview_album, preview_title) in dl_list:

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

filename = u'%s %s.m4a' % (uni_conv(preview_album), uni_conv(preview_title))

#ファイル名に使えない文字列書き換え
filename = conv_filename(filename)

#情報表示
print u'######'
print u'タイトル : ' + uni_conv(preview_title)
print u'再生URL : ' + preview_url
print u'file : ' + filename
print u'size : %.2f MB' % file_size

print u'###### ダウンロード処理開始 ######'
get_yt_video_file(preview_url, filename)
print u'###### ダウンロード処理終了 ######\a'

except:
print u'###### ダウンロード処理失敗 ######'

def create_dl_list(p_obj, itunes_url):

fp = urllib2.urlopen(itunes_url)
html = fp.read()
fp.close()

try:
music_all = p_obj['music'].findall(html)

except:
print u'###### dl list 取得に失敗 ######'

return music_all

#main関数
def main():

print app_name + ' - ' + app_ver
print u'Ctrl + C で強制終了!'

#正規表現のプリコンパイル
p_obj = create_re_obj()

#引数取得(URL)
try:
itunes_url = unicode(sys.argv[1], 'sjis', "ignore")
except:
print u'Usage : getunes.py iTunesURL'
raw_input(u'Press Enter Key')
exit()

#ダウンロードリストを作成
dl_list = create_dl_list(p_obj, itunes_url)

#ダウンロード処理
dl_file(dl_list)

#test-------------------------------------------------------------------------
if __name__ == '__main__':

main()



getunes.py ソースコード
関連記事
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

tag : Python iPhone

コメント

Secret

プロフィール

cherrypy

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

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

この人とブロともになる

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