丸の内MongoDB勉強会に参加してきた

丸の内MongoDB勉強会 : ATND に参加してきました(17時から開始はさすがに間に合わず30分ほど遅刻...)。
MongoDBは初めて触りましたが、各プラットフォームのバイナリも用意されていて、インストールも展開するだけと簡単。初心者に優しいですね。これなら簡単に勉強を始めれそうだ。実際、プログラミング経験がほとんど無い方も参加されていたのだが、ハンズオンでMongoDBを動かせていたようだし。

しかし私は使用していたPCからネットワークの問題かgemがうまく動かず、MongoDB-Ruby driverを使用したサンプルを動かせず。。。というわけでSphinxビルド用にPythonを入れていたのでそちらで挑戦してみた。

PythonにもRubyのようにクライアントライブラリがあるようで、それを使えばほとんど同じようなコードで書けますね。

import pymongo
import re
import urllib2

title = re.compile(r'<h1>(.*)</h1>')
author = re.compile(r'<tr><td>By:</td><td><b>(.*)</b></td></tr>')
year = re.compile(r'<tr><td>Year:</td><td><b>(.*)</b></td></tr>')
page = re.compile(r'<tr><td>Paperback:</td><td><b>(.*) pages</b></td></tr>')
size = re.compile(r'<tr><td>File size:</td><td><b>(.*)</b></td></tr>')
format = re.compile(r'<tr><td>File format:</td><td><b>(.*)</b></td></tr>')
url = re.compile(r'href=\"/go/(.*?)[\'\"]')

def parse_html(html):
	scan = lambda r: r.search(html).group(1)

	return {
		"title": scan(title),
		"author": scan(author),
		"year": scan(year),
		"page": scan(page),
		"file": {
			"size": scan(size),
			"format": scan(format),
			"url": "http://it-ebooks.info/go/" + scan(url)
		}
	}


conn = pymongo.Connection()
db = conn.bookgetter
coll = db.book
coll.remove()

for i in range(1, 11):
	html = urllib2.urlopen("http://it-ebooks.info/book/%s/" % i).read()

	book_data = parse_html(html)
	# print book_data

	coll.insert(book_data)