Elixir製の小説家になろうAPIラッパーをリリースしました


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

最後に一言。


シャンフロはいいぞおじさん「シャンフロはいいぞ。」