GitHubのライセンスマスターDBを作るために。
成果物
GNU.License.Database.Create.201703180758
開発環境
- Linux Mint 17.3 MATE 32bit
- SQLite 3.8.2
- Python 3.4.3
前回まで
http://ytyaru.hatenablog.com/entry/2017/08/25/000000
http://ytyaru.hatenablog.com/entry/2017/08/26/000000
http://ytyaru.hatenablog.com/entry/2017/08/31/000000
背景
GitHubのライセンスのマスターDBを作りたい。しかし、以下の問題がある。
- 一覧取得APIでは全件取得できない(各個取得APIなら取得できるのに一覧取得では得られないものがある)
- リポジトリのライセンスでマスターDBにないとき、各個取得APIで問い合わせてマスターDBを補完していく
- マスターDBを喪失したとき、再現できなくなる(IDが揃わなくなる。保管した順序を完全再現しない限り。)
仕方ないので外部サイトからライセンス一覧を取得し、そこからGitHubにおけるキー名を推測し、DBを埋めていこうと考えた。
今回
GNUサイトにあるライセンス一覧を参考にしようと考えた。Webスクレイピングで抽出してDBを作る。
まずはDBファイルとテーブルを作成した。
DB
GNU.Licenses.sqlite3
ファイルに以下2テーブルを作る。
create table Licenses( Id integer primary key, Name text unique not null, Url text, HeaderId text, ColorId integer, Target text check(Target='software' or Target='document' or Target='other' or Target='other.font' or Target='other.opinion' or Target='other.design'), Description text, foreign key(ColorId) references Colors(Id) );
drop table Colors; create table Colors( Id integer primary key, Key text not null, Description text );
気になる点
Targetの値をマスターDBにすべきかどうか迷った。微妙に木構造なので1対1にしづらいから今回のような微妙な形になった。
所感
Webスクレイピングで苦戦しそう。