« Pythonでmixiにアクセス |Main| 日記 »

« Pythonでmixiにアクセス | Python | QuickSort祭り(一人) »

Bootcampの最新記事とMP3を保存するPythonスクリプト

実行するとカレントフォルダに例えば「StoringYourDigitalMediaOnline_30-Jun-2006_2049.html」と「StoringYourDigitalMediaOnline_30-Jun-2006_2049.mp3」というファイルが生成されます。 もちろんlinks[0]と最初のリンクだけ取得して実行しているのをすべてのリンクについてforで回すようにすれば一気に全部取得できますが、全部聞きもしないのに全部取得するのは迷惑がかかるのでおすすめしません。だいたい1日1個ずつ増えるので、毎日1個ずつ取得して聞いていくつもりで作ったスクリプトですので。

技術的にはurlopenで開いて正規表現で切り出しているだけなのでさほど目新しいことはしていませんね。findallを使わなくてもいいのでは?という疑問を持たれた方には、もちろんsearchしてgroupsを使う方法でも何ら問題ない、と答えておきましょう。

#
# get bootcamp
#

from urllib import urlopen
from re import findall

ROOT_URL = "http://www.bootcamp.com/"
data = urlopen(ROOT_URL + "archives.jsp").read()

PAT_LINK = r"""
<a\shref='(report\.jsp\?reportId=(.+?))'>
<span\sclass='reportitem'>([^<>]+?)</span></a>
"""

links = findall(PAT_LINK, data, re.VERBOSE)

(url, index, date) = links[2]

data = urlopen(ROOT_URL + url).read()

PAT_TITLE = "<span class='reporttitle'>(.+?)</span>"
PAT_MP3 = "<a href='(sendAudio.jsp\?reportAudioFileId=\d+)'>in MP3 format</a>"
PAT_CONTENTS = "<span class='reporttext'>(.*?)</span>"

title = findall(PAT_TITLE, data)[0]
mp3url = findall(PAT_MP3, data)[0]
contents = findall(PAT_CONTENTS, data, re.DOTALL)[0]

filename = title.replace(" ", "").replace(".", "") + "_" + date + "_" + index
contents = "<h1>" + title + "</h1>" + contents

data = urlopen(ROOT_URL + mp3url).read()
data = urlopen(data.strip()).read()
file(filename + ".mp3", "wb").write(data)
file(filename + ".html", "w").write(contents)

トラックバック(Trackback)

Trackback URL: http://www.nishiohirokazu.org/mt/mt-tb.cgi/158

ご意見・ご感想をお送りください(フィードバック)

(フィードバックはメールで送信され、基本的に表示されませんが、内容によっては公開させていただくこともございます。ご了承ください。Your comment doesn't appear the page immediately. If the comment has value to other people, it will be put on the page or subsequent entries. Thank you.)

上の情報は、いずれも未記入でかまいません。 All of above questions are optional.