検索の Web API

「全文検索」と「和歌を探す」は、ほかのサイトのページやプログラムからも使えます。結果は JSON で返します。ほかのサイトのブラウザから直接呼べるように、どの送り元からの呼び出しも許しています(CORS)。登録や鍵は要りません。

引数を入れて試せる画面: api/docs/(Swagger UI)。定義(OpenAPI 3.1): api/openapi.json。定義を読み込めば、クライアントを自動で作ったり、Postman などに取り込んだりできます。

作品の本文(散文の段落と作中歌)と訳から探します。作品ごとにまとめて返します。

引数意味
q探す言葉(必須)
w作品 ID で絞る(例: kt-kokin)。作品 ID は作品のページの URL の work= の値です
cat分類で絞る(例: 物語・日記・歌合)
q2・near一緒に出る言葉と、その近さ(字数。0 は同じ段落のどこか。100 まで)
yaku=0訳を探さない(既定は訳も探す)
fuzzy=0あいまい検索(ゆるい仮名遣いと、かなと漢字の言い換え)をしない
conj=0活用した形をまとめて探さない(既定は 待つ → 待た・待ち… も探す)
modern=1近代歌集(明治以降)も探す(既定は外す)
lemma語彙素を 1 つに決める(例: 思う)。平安〜室町の散文を形態素解析した索引で探します(conj=0 のときは効きません)
pos・cf品詞・活用形で絞る(前方一致。例: 動詞・連体形)。選択肢は /api/search/morph が返します
offset何作品目から返すか。1 回に 30 作品まで、1 作品で 20 か所までを返します

応答: {total, works_total, offset, works: [{work_id, work, category, count, hits: [{id, field, by, pre, key, post}]}], facets}。facets は語彙素の索引で当たったときの、当たった語の語彙素・品詞ごとの数(多い順に 12 まで)です。total は当たった数、works_total は当たった作品の数、count はその作品で当たった数です。hits の id は段落 ID、field は本文か訳か、by は何で当たったか、pre・key・post は当たった所の前・当たった字・後です。

curl 'https://informanellica.com/kumoi-no-fumigura/api/search?q=%E6%9C%88%E5%BD%B1&cat=%E6%97%A5%E8%A8%98'

和歌を探す /api/uta

勅撰集・私家集・歌合と、作品の中の歌から、1 首ずつ返します。

引数意味
q探す言葉
modepart(部分一致。既定)・head(歌の頭から)・no(作品ごとの通し番号。12 や 1-20)
w・cat集・作品の ID、分類で絞る
au作者で絞る
q2・near一緒に出る言葉と、その近さ(字数。0 は同じ欄のどこか)
yaku=1訳も返す
fuzzy=0・conj=0・modern=1全文検索と同じ
offset・limit何首目から何首返すか(limit は既定 200、500 まで)
format=csv当たった全首を CSV(BOM 付き UTF-8)で返す(5 万首まで)

応答: {total, offset, rows: [{work_id, work, cat, no, id, kotobagaki, author, text, kana, field, pos, len, by, url}]}。text は歌、kana は読み(あるとき)、field・pos・len は当たった欄と位置(字数)、url はこのサイトで読むページ(https://informanellica.com/kumoi-no-fumigura/ からの相対)です。

/api/uta/works は、集・作品の一覧(works: [ID, 名前, 分類] の並び)と、全体の首数(poems)を返します。

const r = await fetch('https://informanellica.com/kumoi-no-fumigura/api/uta?' + new URLSearchParams({ q: '春霞', mode: 'part', limit: 20 }));
const { total, rows } = await r.json();

まとめて使うとき

本文と訳をまとめて使うときは、検索 API を何度も呼ぶより、作品ごとのデータ(github.com/kumoi-no-fumigura)を取ってください。和歌は format=csv でも一度に取れます。