はじめに
-
Elixir楽しんでいますか
- ErlangのhttpcモジュールでHTTP通信を楽しんでみたいとおもいます
- この記事は2021/09/04(土) 00:00〜2021/09/06(月) 23:59開催の純粋なもくもく会「autoracex #44」の成果物です
背景
- ふつうはHTTPoison等のElixir製のHexを使ったほうが書きやすいとおもいますし、使えばよいとおもいます
- ただしHTTPoison等のHexをどうしても追加できない(できないというよりもしたくない)条件下においては必要となるテクニックだとおもいます
- たとえばNerves Livebook
- 自分でファームウェアをビルドすればよいのですが、友達にファームウェアを焼き込むツールfwupだけインストールすればいいよと教えた手前、Nerves開発に必要なあれこれをインストールしてもらうのには忍びないとか
- 2021/09/04時点の最新版v0.2.17では、Elixirは
1.12.2-otp-24
なのですが、Nerves LivebookではMix.install/2を使って新たにHexを追加することはできないことになっています1
HTTP Get
- httpcここをよく読みましょう
- 以下、サンプルです
HTTP Get 例①
:inets.start
:ssl.start
{:ok, {status, headers, body}} = :httpc.request("https://www.nerves-project.org/")
body |> List.to_string() |> IO.puts()
HTTP Get 例②
:inets.start
:ssl.start
{:ok, {_status, _headers, body}} = :httpc.request("https://qiita.com/api/v2/items?query=elixir")
body
|> List.to_string()
|> Jason.decode!()
|> Enum.map(& Map.take(&1, ["title", "url"]))
- Jasonは、素のNerves Livebookのファームウェアに入っているのでありがたく使っています
HTTP Post
- 今度もhttpcをよく読みましょう
- 以下、サンプルです
:inets.start
:ssl.start
hum = 79.4
temp = 27.3
{:ok, datetime} = DateTime.now("Etc/UTC")
time = datetime |> DateTime.to_unix()
json = Jason.encode!(%{value: %{temperature: temp, humidity: hum, time: time}}) |> String.to_charlist()
request = {'https://<your host>/api/values', [], 'application/json', json}
:httpc.request(:post, request, [], [])
Wrapping Up 



-
HTTPoison等のHexをどうしても追加できない(できないというよりもしたくない)条件ということに出くわすことがほとんどないような気がしますが、未来の自分へ向けて調べたことを記事にしておきます
- 記事を書くにあたり、Erlangのプログラム例を参考にしました2
- Enjoy Elixir
-
autoracex #44開催中
-
そのうちNerves Livebookにおいても、Mix.install/2は対応されるような気もします ↩
-
ElixirをやっているとなんとなくErlangが読めるようになるという話を聞いたことがあるのですが、確かになんとな〜くですが読めるようになりつつあることを少し感じました ↩