やってみる

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

はてなフォトライフDBを作る

SQLite3で。

開発環境

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

成果物

GitHub

前回

http://ytyaru.hatenablog.com/entry/2017/06/26
http://ytyaru.hatenablog.com/entry/2017/06/30
http://ytyaru.hatenablog.com/entry/2017/07/01
http://ytyaru.hatenablog.com/entry/2017/07/02

データベース

SQLite3で管理する。以下のファイルとして作成する。

  • Hatena.PhotoLife.Images.{HatenaId}.sqlite3
  • Hatena.PhotoLife.Movies.{HatenaId}.sqlite3

はてなの仕様でアカウント毎に毎月300MBまで。動画は1ファイルだけでも重いので別にする。

テーブル

Contents

create table Contents(
    Id                  integer primary key,
    ItemId              text unique not null,
    Title               text,
    ContentType         text,
    Content             blob,
    Subject             text,
    Url                 text,
    SmallUrl            text,
    Issued              text
);

もしくはID以外のメタデータを削除したのが以下。

create table Contents(
    Id                  integer primary key,
    ItemId              text unique not null,
    FileExtention       text not null,
    Content             blob
);

FileExtentionは直リンURLについている拡張子をそのまま保存する。git,png,jpg,jpegになると思われる。それ以外の形式や大文字小文字がアップロード後にどう変化するのかは未調査。

URLはHatenaId,ItemId,FileExtentionがあればあとはテンプレートで再現できる。

ItemId

<id>tag:hatena.ne.jp,2005:fotolife-naoya-XXXXXXXXXXXXXX</id>のうちXXXXXXXXXXXXXXがItemId。

URL

http://cdn-ak.f.st-hatena.com/images/fotolife/{HatenaIdの先頭1文字目}/{HatenaId}/{ItemIdの年月日部分}/{ItemId}.{FileExtention}
http://cdn-ak.f.st-hatena.com/images/fotolife/y/ytyaru/20170228/20170228130132.gif
http://cdn-ak.f.st-hatena.com/images/fotolife/y/ytyaru/20170228/20170228130132_m.jpg
http://cdn-ak.f.st-hatena.com/images/fotolife/y/ytyaru/20170228/20170228130132_120.jpg

はてなシンタックス

f:id:{HatenaId}:{ItemId}{FileExtentionの1文字目}:image
f:id:ytyaru:20170228130132g:image

EditUrl

列にはないがItemIdがあれば作成できる。

http://f.hatena.ne.jp/atom/edit/XXXXXXXXXXXXXX

参照URL

列にはないがHatenaIdとItemIdがあれば作成できる。

http://f.hatena.ne.jp/{HatenaId}/XXXXXXXXXXXXXX

アップロードツール名

のテキストノード値はアップロードツール名。

アップロード先ディレクトリ名

<dc:subject xmlns:dc="http://purl.org/dc/elements/1.1/">YYYYYY</dc:subjetct>

YYYYYYがアップロード先ディレクトリ名。

Title

<title>のテキストノード値。はてなブログからアップロードしたらItemIdと同じ値になる。

Url

<hatena:imageurl>http://f.hatena.ne.jp/images/fotolife/n/naoya/XXXXXXXX/XXXXXXXXXXXXXX.jpg</hatena:imageurl>

直リンクできるURL。ふつう欲しいのはこれなので、Urlという名前に割り当てる。

種類 URL
フォトライフ参照URL http://f.hatena.ne.jp/{HatenaId}/{ItemId}
フォトライフ編集URL http://f.hatena.ne.jp/atom/edit/{ItemId}
直リンク http://f.hatena.ne.jp/images/fotolife/n/{HatenaId}/XXXXXXXX/{ItemId}.jpg
縮小 http://f.hatena.ne.jp/images/fotolife/n/{HatenaId}/XXXXXXXX/{ItemId}_m.gif

縮小画像URL

<hatena:imageurlsmall>http://f.hatena.ne.jp/images/fotolife/n/naoya/XXXXXXXX/XXXXXXXXXXXXXX_m.gif</hatena:imageurlsmall>

勝手に作られるようだ。

はてなシンタックス

<hatena:syntax>f:id:naoya:XXXXXXXXXXXXXX:image</hatena:syntax>

はてな内だけで通じる記法。毎回ブログで書くとき、勝手にこれにされてしまう。ほかのブログからは解釈できない。

課題

http://ytyaru.hatenablog.com/entry/2017/06/29

  • データを一括ダウンロードするための実装が必要
  • ダウンロード後はどうやってDBに保存するか

DBに保存する形式をどうするか。

実用性を考えると以下も課題。

  • DB内にある画像データを閲覧できるようにしたい

所感

課題が多い。ファイルサイズの問題もあるし、フォトライフDBは心配。