やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

はてなAPIで取得したXMLから記事データを取得しDBに保存する

ついに本題。ブログの記事データをDBに入れる。

成果物

GitHub

開発環境

はてなフォトライフAtomAPI - Hatena Developer Center

なお、使用させていただいたPythonライブラリは以下のライセンスである。感謝。

Library License Copyright
xmltodict MIT Copyright © 2012 Martin Blech and individual contributors.
requests_oauthlib ISC Copyright © 2014 Kenneth Reitz.
bs4 MIT Copyright © 1996-2011 Leonard Richardson,参考
dataset MIT Copyright © 2013, Open Knowledge Foundation, Friedrich Lindenberg, Gregor Aisch

前回まで

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で使える文字

はてなのIDに使用可能な文字は? - XXXannex

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)

はてなのIDに使用可能な文字は? - XXXannex

思いつき

いつもメモするとき、ファイルでなく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)という機能を使うらしい。

ものすごく難易度が高そう。でも、ぜひやってみたい。ローカルで自分の溜めた情報に全文検索かけれたら嬉しい。もう忘れてもOK。ネットなくてもOK

所感

保存だけはできた。こうなると欲が出るもので、いろいろやりたくなってきた。

WindowsXPのときは秀丸grepを使っていた。あれはすごく良かった。ああいうことがしたい。でも、今はバックアップすることだけに専念する。形にするために。欲張らず、でも忘れぬよう、やりたいことのメモだけ残しておく。