2009/12/07
青空文庫で特定の著者のZipファイルのURLリストを得て、Kindle 用PDF変換の前準備をするpythonスクリプト
by
seko
—
posted at
2009-12-07 18:54
last modified
2009-12-07 19:09
昨日は、青空キンドル(仮)のサイト を使わせていただいて、岡本綺堂の半七捕物帖の第一話である「お文の魂」をPDFに変換し、Kindleで読んでみました。
でも、岡本綺堂の作品 は226個もあります。
ここは著者を選べば、その作品すべてがPDF化されて、Kindleに転送されるのがよいなと思います。
次のような手順になるでしょうか。
- 著者のURLから、すべての図書カードのリストを作る
- 図書カードのリストからzipファイルのurlリストを得る
- 青空キンドル(仮)のサイト にzipのURLを渡して、PDFをダウンロードする(やったことないです)
- 著者の名前や書名をローマ字に変換して、PDFのファイル名を著者+書名に変更する(できるんでしょうか?)
- KindleのdocumentsフォルダーにPDFを転送して、完了したらデバイスを取り外す
とりあえず、一番目と二番目を行うpythonスクリプトを書いてみました。プログラムを書くのは一年ぶりのような気がします。
# -*- encoding: utf-8 -*-
#-------------------------------------------------------------------------------
# Name: aozoralst.py
# Purpose: 青空文庫で著者のURLを指定すると、公開されている図書カードを見つけ
# て、zipファイルのリストを得る
# Author: seko
#
# Created: 07/12/2009
# Copyright: (c) seko 2009
# Licence: ご自由に
#-------------------------------------------------------------------------------
#!/usr/bin/env python
import urllib2
import re
import urlparse
def get_booklist(url):
"""
青空文庫の著者のURLを指定して、図書カードのURLのリストを得る
"""
booklist=[]
for line in urllib2.urlopen(url):
s = unicode(line, 'euc-jp')
m=re.search('a href="(\S*cards/\S*.html)',s)
try:
booklist.append (m.group(1))
except:
pass
book_url=[]
for book in booklist:
book_url.append ( urlparse.urljoin (url,book))
return book_url
def get_zip_url(url):
"""
図書カードからzipファイルのURLを得る。複数個の場合あり(ルビの有無など)
"""
ziplist=[]
for line in urllib2.urlopen(url):
s = unicode(line, 'euc-jp')
m=re.search('a href="(\S*.zip)"',s)
try:
ziplist.append(urlparse.urljoin(url, (m.group(1))))
except:
pass
return ziplist
### main ###
#岡本綺堂のページ
url="http://www.aozora.gr.jp/index_pages/person82.html"
for book in get_booklist(url):
print book
#get_zip_url("http://www.aozora.gr.jp/cards/000082/card49564.html")
for book in get_booklist(url):
for zip in get_zip_url(book):
print zip
結果
図書カードのリスト :
http://www.aozora.gr.jp/cards/000082/card49564.html http://www.aozora.gr.jp/cards/000082/card45478.html http://www.aozora.gr.jp/cards/000082/card45500.html http://www.aozora.gr.jp/cards/000082/card43042.html http://www.aozora.gr.jp/cards/000082/card49562.html
zipのリスト :
http://www.aozora.gr.jp/cards/000082/files/49564_ruby_33587.zip http://www.aozora.gr.jp/cards/000082/files/45478_ruby_24508.zip http://www.aozora.gr.jp/cards/000082/files/45500_ruby_23134.zip http://www.aozora.gr.jp/cards/000082/files/43042_ruby_16085.zip http://www.aozora.gr.jp/cards/000082/files/49562_ruby_33588.zip http://www.aozora.gr.jp/cards/000082/files/49561_ruby_33578.zip
- The URL to Trackback this entry is:
- http://lightson.dip.jp/blog/seko/2148/tbping