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)