Elixirでの小説家になろうAPIラッパーがなかったので作成しました。
Elixirらしく書けるようにするために、パイプオペレータでクエリを実行できるようにしました
インストール
mix.exs
# Elixirのバージョンは1.10以上必要
def deps do
[
{:narou, git: "https://github.com/harukikubota/narou.git"}
]
end
使い方
小説検索
iex> use Narou
iex> Narou.init(%{type: :novel})
|> select([:t, :w])
|> where(ncode: "n2267be")
|> Narou.run!
{
:ok,
1,
[
%{
title: => "Re:ゼロから始める異世界生活",
writer: => "鼠色猫/長月達平"
}
]
}
ランキング検索
こちらは日付とランキングタイプを指定して、作品毎のポイントを取得します。
iex> use Narou
iex> Narou.init(%{type: :rank})
|> where(y: 2020, m: 03, d: 31, t: :d)
|> Narou.run!
{
:ok,
[
%{"ncode" => "N7378GC", "pt" => 4450, "rank" => 1},
%{"ncode" => "N7529GB", "pt" => 4280, "rank" => 2},
%{"ncode" => "N2361GC", "pt" => 3698, "rank" => 3},
%{...},
...
}
殿堂入り検索
こちらは作品を指定して、いつ、どのランキングに入ったか検索します。
iex> use Narou
iex> Narou.init(%{type: :rankin})
|> where(ncode: "n2267be")
|> Narou.run!
{:ok,
[
%{pt: 90, rank: 103, rtype: "20130501-d"},
%{pt: 4739, rank: 72, rtype: "20130501-m"},
%{pt: 9947, rank: 86, rtype: "20130501-q"},
%{...},
...
}
ユーザ検索
iex> use Narou
iex> Narou.init(%{type: :user})
|> select([:userid, :name, :yomikata])
|> where(userid: 235132)
|> Narou.run!
{
:ok,
1,
[
%{
name: "鼠色猫/長月達平",
userid: 235132,
yomikata: "ネズミイロネコ/ナガツキタッペイ"
}
]
}
その他細かい機能
細かい使い方などは iex
からモジュールヘルプで参照できるようにしています。iex> h Narou
Narou
APIの種類と、初期パラメータを設定します。
lib/narou/api_struct/
にinit/1
の戻り値構造体が定義されてます。
Narou.Query
select
, where
, order
を定義しています。
Narou.ApiKeyNameConverter
select
句で指定するキー名のテーブルを確認できます。
あとがき
筆者はElixirの勉強を始めてからまだ一週間ですが、ここまでのものを無事リリースできました。
Rubyでのライブラリ開発の経験も大きいんですが、Elixirの言語機能が強力なおかげで楽に書けてますw
最後に一言。
シャンフロはいいぞおじさん「シャンフロはいいぞ。」