Replit上で、ElixirのHexに登録されているライブラリをインストールして利用する
ReplitのテンプレートでElixirを選択して、Create Repl
を実行する。
すると、テンプレートを元にプロジェクトが出来上がるが、exs
ベースでの作成となる。
※ファイルもmain.exs
が一つあるのみ
この時、Hex上のライブラリを利用したい場合、一旦実行環境へライブラリのインストールをしておく必要がある。
Elixirのv1.12以降であれば、Mix.install/2
を利用して、exs上でHexのライブラリをインストールしておける。
Shell
欄でElixirのバージョンを確認してみると、Elixir 1.13.4 (compiled with Erlang/OTP 24)
であった。
なので、Mix.install/2
が利用できる。
exs上で、HTTPでJsonデータを返すAPIにアクセスする前提とする。
利用するライブラリは、「httpoison
」と「jason
」の2つ。
main.exs
の先頭にMix.install/2
でこの二つをインストールするように対応。
バージョンの指定は、それぞれのHexDocに記載してあったバージョンで記述。
## Mix.install/2を利用して、exs上でhttpoisonとjasonを利用する
Mix.install([
{:httpoison, "~> 2.0"},
{:jason, "~> 1.4"}
])
IO.puts("done Mix.install/2") # ←これは、実行を確認するために用意したもので、特に必要ではない
一通りコードを記載したら、画面上の「▶️Run」をクリック。
都度、Shall I install Hex?
やShall I install feber3?
と聞かれるので、「Y
」を入力してEnterクリックでインストールを進めていく。
Could not find Hex, which is needed to build dependency :httpoison
Shall I install Hex? (if running non-interactively, use "mix local.hex --force") [Yn] Y
* creating /home/runner/ReptitElixirGetConnpassEvents/.mix/archives/hex-2.0.6
Resolving Hex dependencies...
Resolution completed in 0.145s
New:
certifi 2.9.0
hackney 1.18.1
httpoison 2.1.0
idna 6.1.1
jason 1.4.0
metrics 1.0.1
mimerl 1.2.0
parse_trans 3.3.1
ssl_verify_fun 1.1.6
unicode_util_compat 0.7.0
* Getting httpoison (Hex package)
* Getting jason (Hex package)
* Getting hackney (Hex package)
* Getting certifi (Hex package)
* Getting idna (Hex package)
* Getting metrics (Hex package)
* Getting mimerl (Hex package)
* Getting parse_trans (Hex package)
* Getting ssl_verify_fun (Hex package)
* Getting unicode_util_compat (Hex package)
Could not find "rebar3", which is needed to build dependency :parse_trans
I can install a local copy which is just used by Mix
Shall I install rebar3? (if running non-interactively, use "mix local.rebar --foYn] Y
* creating /home/runner/ReptitElixirGetConnpassEvents/.mix/rebar
* creating /home/runner/ReptitElixirGetConnpassEvents/.mix/rebar3
===> Analyzing applications...
===> Compiling parse_trans
===> Analyzing applications...
===> Compiling mimerl
===> Analyzing applications...
===> Compiling metrics
===> Analyzing applications...
===> Compiling unicode_util_compat
===> Analyzing applications...
===> Compiling idna
==> jason
Compiling 10 files (.ex)
Generated jason app
==> ssl_verify_fun
Compiling 7 files (.erl)
Generated ssl_verify_fun app
===> Analyzing applications...
===> Compiling certifi
===> Analyzing applications...
===> Compiling hackney
==> httpoison
Compiling 3 files (.ex)
Generated httpoison app
done Mix.install/2
インストールを進めていくと、左側位なるFiles
の箇所で、.hex
や.mix
のディレクトリが作られているのがわかる。
connpassの公開APIを利用して、データを取得、および出力を確認するようにする。
connpassの公開APIの仕様はこちら
で、肝心のソースコードはこちら
## Mix.install/2を利用して、exs上でhttpoisonとjasonを利用する
Mix.install([
{:httpoison, "~> 2.0"},
{:jason, "~> 1.4"}
])
base_request_url = "https://connpass.com/api/v1/event/?"
url = Enum.join([base_request_url,
"/api/v1/event/?",
"ym=202305&",
"keyword=elixir&",
"order=2&",
"count=10"], "")
IO.puts("url : #{url}")
# エラーは一旦無視して、レスポンスがただしい場合のみを想定する
# エラーも考慮するときは、HTTPoison.getを利用。
response = HTTPoison.get!(url)
result = response
|> Map.get(:body)
|> Jason.decode!()
"results_available: #{result["results_available"]}"
|> IO.puts()
"results_returned: #{result["results_returned"]}"
|> IO.puts()
result["events"]
|> Enum.map(fn(m) -> %{title: m["title"], url: m["series"]["url"]} end)
|> IO.inspect()
んで、実行結果はこちら。
以下はコンソールの実行結果はこちら。
url : https://connpass.com/api/v1/event/?/api/v1/event/?ym=202305&keyword=elixir&order=2&count=10
results_available: 953
results_returned: 10
[
%{
title: "LiveViewJP#17:画像識別AIや音声識別AI、お絵描きAIをLivebookでハンズオン",
url: "https://liveviewjp.connpass.com/"
},
%{
title: "piyopiyo.ex #16:スライド1枚から3枚まで!げきよわLT会!",
url: "https://piyopiyoex.connpass.com/"
},
%{
title: "ElixirMobile#2:ElixirDesktopスマホアプリ作成ハンズオン",
url: "https://fukuokaex.connpass.com/"
},
%{
title: "NervesJP #39 Build a Weather Station を読む会 7回目",
url: "https://nerves-jp.connpass.com/"
},
%{title: "OkazaKirin.beam #103", url: "https://okazakirin-beam.connpass.com/"},
%{
title: "LiveViewJP#16:LiveViewでリアルタイムWeb/SPAを開発する",
url: "https://liveviewjp.connpass.com/"
},
%{title: "OkazaKirin.beam #102", url: "https://okazakirin-beam.connpass.com/"},
%{
title: "ElixirImp#30:Livebookの機能を使い倒そう",
url: "https://fukuokaex.connpass.com/"
},
%{
title: "ElixirImpオフ会:都心で焼肉ゥッ(日付は変動するかもだけどそれでも良ければ)",
url: "https://fukuokaex.connpass.com/"
},
%{title: "OkazaKirin.beam #101", url: "https://okazakirin-beam.connpass.com/"}
]
Interactive Elixir (1.13.4) - press Ctrl+C to exit (type h() ENTER for help)