ついに本題。ブログの記事データをDBに入れる。
成果物
開発環境
- Linux Mint 17.3 MATE 32bit
- SQLite 3.8.2
- Python 3.4.3
はてなフォトライフAtomAPI - Hatena Developer Center
なお、使用させていただいたPythonライブラリは以下のライセンスである。感謝。
前回まで
http://ytyaru.hatenablog.com/entry/2017/06/23
http://ytyaru.hatenablog.com/entry/2017/06/30
http://ytyaru.hatenablog.com/entry/2017/07/01
http://ytyaru.hatenablog.com/entry/2017/07/02
Server Error
http://ytyaru.hatenablog.com/entry/2017/07/04
http://ytyaru.hatenablog.com/entry/2017/07/05
今回
XML文書からSQLite3ファイルに挿入する。
まだ最新の10件分しか取得できない。
ファイルサイズ比較
APIで取得したXMLをSQLite3に入れると以下のようにサイズが小さくなった。
形式 | サイズ |
---|---|
XML | 647.9KB |
SQLite3 | 436.2KB |
タグや重複部分の一部除去をしたため軽量化された。エスケープ(サニタイズ)を元に戻したのも関係ありそう。
これは10件分の記事データである。MarkdownとHTMLの両方の形式を保存しているためかサイズが大きい。
気になったこと
はてなIDで使える文字
EntryId取得
<id>tag:blog.hatena.ne.jp,2013:blog-{HatenaId}-{HatenaBlogId}-{EntryId}</id>
はてなIDにハイフンが使えるのでblog-*-[0-9]+-[0-9]+-
のような正規表現ではダメ。
entry_id = re.sub(r'blog-*-[0-9]+-[0-9]+-', "", entry.find('id').string)
思いつき
いつもメモするとき、ファイルでなくDBに保存できないか。
変換
たとえばMarkdownだけ保存すれば自動的にHTMLなどに変換してくれる。
アップロード
任意の指定先にアップロードする。URLをDBに保存する。
全文検索
せっかく知識の宝庫なのに全文検索できないと意味がない。
sqlite3 全文検索で検索したら以下がヒット。感謝。
Sqlite で全文検索 - Qiita SQLiteの全文検索を使ってみる : mwSoft blog SQLite3 (PDO) を使った全文検索 (FTS) 入門 – セルティスラボ sqlite3 全文検索の謎を追求: Script SQLite3の全文検索機能"FTS"をつかってみる その1:導入 - Bye Bye Moore SQLiteで高速全文検索〜日本語編〜 // Speaker Deck 超高速データベース 全文検索(1) sqlite3 - itでの開発ノウハウ
SQLiteのFTS(Full Text Search)という機能を使うらしい。
- FTSのバージョンを決める
- SQLite3の再コンパイルが必要である
- CREATE VIRTUAL TABLE tbl USING fts3(content TEXT);のようにテーブルを作成せねばならない
- トークナイザーを実装する必要がある(C言語。MeCabで形態素解析(N-gram))
ものすごく難易度が高そう。でも、ぜひやってみたい。ローカルで自分の溜めた情報に全文検索かけれたら嬉しい。もう忘れてもOK。ネットなくてもOK。
所感
保存だけはできた。こうなると欲が出るもので、いろいろやりたくなってきた。
WindowsXPのときは秀丸のgrepを使っていた。あれはすごく良かった。ああいうことがしたい。でも、今はバックアップすることだけに専念する。形にするために。欲張らず、でも忘れぬよう、やりたいことのメモだけ残しておく。