やってみる

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

GNUのライセンスDBを作る

GitHubのライセンスマスターDBを作るために。

成果物

GitHubGNU.License.Database.Create.201703180758

開発環境

前回まで

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スクレイピングで苦戦しそう。