最近画像の保管場所に、Tumblrをよく使っています。

i*mage*s

普通であればTumblrはTumblrで完結し、そこの中でコミュニケーションを行うことで色々と満足すべき…なんでしょうが、僕個人的な感覚としては「画像単位でブックマークできるサービス」程度の位置づけなので、やっぱりその収集結果を取得したいなと思えてきてしまいます。で、それをBlogに載せたいと。


TumblrのAPIがFlickr並みに優秀であればそれも十分可能なんですが、TumblrにはごくわずかなAPIしか用意されていなくて、APIだけで望みのデータを引っ張ってくることは出来ません。出来れば、任意の日付の任意のタグが付いたデータを引っ張ってきたいんですけど、出来るのは最大で50件最新のポストを引っ張ってくることだけです。

API | Tumblr - /api/read

コレではとりあえずAPIだけで何とかするのは無理…というわけで、だったらローカルにデータとして蓄積すればいいんじゃね?と。以前はてなブックマークのAPIが不調になってやり始めたのと同じ理屈です。

はてなブックマークのAtomの仕様が変わってる件。 - NOBODY:PLACE - MUTTER
素案としてはまず、さくらインターネットのルールに従って1時間に1回cronを回してAPI経由で最新ポスト50件を取得します。で、そのうちの画像エントリ(postのtypeがphotoのもの)だけをピックアップし、そのIDや画像URL、投稿時間やキャプション、タグなどをDBに保存します。以前、はてなブックマークを対象に同じことをやったときにはMySqlでやりましたが、今回は汎用性(というか引っ越ししやすさ?)を考えてSqliteを使おうかなと思ってます。多分それほど複雑にならないしサイズも小さいと思うので。
引っ越ししやすさとディスク容量を考慮して画像ファイルそのものについては基本的に取得しない方向で。一部DIY RSSで画像をローカルに保存しているんですが(リファラの関係でRSSに書き出すと読めなくなるので)、結構重いし移動できなくて難儀してるので。Tumblrのサーバがダウンし続けるようであればローカルに保存していく方が良いんでしょうけど、まぁ別に良いかなと。Flickrだって同じことだし。やろうと思えば、画像URLからローカルに保存するのは簡単だし。

で、あとは1日1回エントリを上げるとか、まとめエントリを書くときに使うツールを作成するとか(4月の画像の中でタグ「18+」が付いたものだけをピックアップするとかね。クエリ叩くだけだし)、そんな感じに使用します。そこの所はなんか適当にAPI的なものをでっち上げてもいいわけだしね。自分用に。


問題はタグに関する部分でして、実は僕、タグに関する実装をやったことがありません。理論だけはWEB+DBの何号だかでかじった気がするんですが…どうやるんでしたっけ?多分、ページを記録したテーブル(例えばt_posts)とタグだけを記録したテーブル(例えばt_tags)を作成し、その2つのidを関連づけるテーブル(例えばt_post_tag)を作ってJOINするなりすれば良いと思うんですが…そんな単純なので良いんだったかなぁ。それ以外無いか。何かぼろが出てきそうな気がしないでもないですが、とりあえずなにがしか作ってみてから悩むことにしたいと思います。

ま、誰得?っていうか俺得な話なんですが、とりあえずはメモ代わりってことで。メモだけでも書かないとやろうとしないので。スクレイピングじゃなくてAPIだけで済む話なんで、Sqliteではまりさえしなければ何時間かで書けるんじゃないかなーまたそのうち気分転換にでも。



追記

クエリ叩くだけで思ったけど、MobavleTypeだって結局クエリ叩くだけなんだよな…検索はともかくとしてタグ一覧とか、特定タグの付いたエントリとか。ま、このエントリには関係ない話なんですが。