SQLite3で。
開発環境
- Linux Mint 17.3 MATE 32bit
- SQLite 3.8.2
はてなブログAtomPub - Hatena Developer Center
成果物
Hatena.Blog.API.Database.Create.Accounts.201703010822
前回
http://ytyaru.hatenablog.com/entry/2017/06/26
結局、DBは以下の4つに分けることにした。
DB | 分けた理由 |
---|---|
Accounts | プライベート情報のため。 |
Blogs | Accountsに入れるには公開情報なので不一致。Entriesに入れるには特定ブログでなく自分が所持する全アカウントの全ブログなので不一致。データ量が少ないが仕方なく分けた。 |
Entries.{BlogId} | 特定ブログの全記事を管理したいため。 |
PhotoLife.Images.{HatenaId} | ファイルサイズが大きいため。特定アカウントの全画像データを管理したいため。 |
PhotoLife.Movies.{HatenaId} | ファイルサイズが大きいため。特定アカウントの全動画データを管理したいため。 |
PhotoLifeはバイナリデータでサイズも大きいため別ファイルにする。はてなの仕様でアカウントごとに毎月300MBまでなのでアカウント別に管理する。
懸念
ファイルサイズの最大値を超えないか心配。32bit版OSの場合、Windowsだと1ファイルの最大サイズが4GBだった。
ext4だと16TiBまで可能らしい。それなら十分足りるだろう。ext4でフォーマットしたはずだからそうだと思うが、試していないので本当にそうなのか不明。
Linuxファイルシステムをまとめてみました - Qiita
http://ips.nekotype.com/988/
データベース
SQLite3で管理する。以下のファイルとして作成する。
- Hatena.Accounts.sqlite3
テーブル
Accounts
create table Accounts( Id integer primary key, HatenaId text unique not null, Password text not null, MailAddress text unique not null, Nickname text not null, Created text );
- HatenaIdとMailAddressは重複不可と思われる
- Nicknameは重複可かもしれないが未調査。念の為DB上では重複可とする
OAuthApplications
create table OAuthApplications( Id integer primary key, AccountId integer not null, Name text not null, Description text, Url text not null, Logo blob, Icon blob, ConsumerKey text not null, ConsumerSecret text not null, AccessToken text, AccessTokenSecret text, Scopes text, CreateAt text, Status integer not null default 1 check(Status = 0 or Status = 1), NumberOfCertifiers integer not null default 0, FOREIGN KEY (AccountId) REFERENCES Accounts(Id) );
Accountsの子テーブルなので外部キーを設定する。
- Nameのデフォルト値ははてなID。
- URLのデフォルト値はhttps://www.hatena.ne.jp/{はてなID}/
- Scopesの値は、read_public、write_public、read_private、write_privateをカンマ区切りにした組合せ。ないときはNULLまたは空文字。
- AccessTokenは取得手順を踏む必要がある
APIを使うだけなら不要な値も多いが、とりあえず管理ページにある値を含めておく。無理に使わなくてもいい。項目の順序も管理ページに従っている。
デフォルト値はDBの制約だけでは設定できない。データを挿入するときにどうにかするしかない。
所感
はてなAPIの細かい仕様やファイルシステムなどわかっていないことが多い。とりあえずざっくり作ってしまう。
アカウント情報を取得するAPIはないと思う。手動でDBに挿入するしかない。面倒。