スポンサーリンク

2015年7月3日

[Elixir]HTTPoisonからIdobataAPIへアクセスする

目的

HTTPoisonのサンプルを試す。
HTTPoisonを使ってIdobataのAPIへアクセスする。

実行環境

OS: Windows8.1
Erlang: Eshell V6.4, OTP-Version 17.5
Elixir: v1.0.4
HTTPoison: v0.7

始める前に

HTTPoison(毒)かHTTPotion(薬)かどちらを使うか迷った。
でも、できることは同じ。
最近は薬(Elixir)ばかり飲んでるから、たまには毒(HTTPoison)の方を選びます。
(結局、薬じゃないかって?気にしたら負けw)

目次

  1. HTTPoisonを準備してみる
  2. サンプルを試してみる
  3. IdobataAPIにアクセスしてみる

1. HTTPoisonを準備してみる

README.md内に以下のような記述がある・・・
引用:
If you’re on Ubuntu
Make sure you have erlang-dev installed before using httpoison. You can do so by running:
apt-get install erlang-dev
あれ?もしかしてWindowsで使えないのだろうか?
でも多分これって、Erlangの環境ないとだめだよ?って言ってるだけな気がする。
とりあえず試すか・・・
mix.exsへ以下の記述を追加する。
def deps do
  ...
  [{:httpoison, "~> 0.7"}]
  ...
end
def application do
  ...
  [applications: [:httpoison]]
  ...
end
>mix deps.get
>mix deps.compile
コンパイルまでは問題なしだな。
続いてサンプルへ・・・

2. サンプルを試してみる

HTTPoison(Github)のREADME.mdにあるサンプルを試してみます。
iexを起動。
>iex -S mix
まずはstartさせる。
iex(1)> HTTPoison.start
{:ok, []}
サンプル通りにget!を実行。
iex(2)> HTTPoison.get! "http://httparrot.herokuapp.com/get"
...
...status_code: 200}
post!を試してみる。
(httpotionの例を参考にしました)
iex(3)> HTTPoison.post! "http://httparrot.herokuapp.com/post", "hello=world", %{"User-Agent": "Test"}
...
...status_code: 200}
サンプルも実行できるしWindowsでも大丈夫そうだね。
とりあえずは問題なしですね。
ここからが本番!!

3. IdobataAPIにアクセスしてみる

HTTPoisonを使ってIdobataにメッセージを送ってみましょう。
注意!!
あらかじめ、Hookは作成しておいて下さい!
では始めましょう~
どうせ失敗して何回も叩くことになるだろうから・・・
iex(4)> url = "HookのEndpoint URL"
Endpoint URL
iex(5)> msg = URI.encode_query(%{source: "hello world from httpoison", format: "html"})
"format=html&source=hello+world+from+httpoison"
それでは早速先ほど成功したpostで試してみよう。
一発で成功するわけもないが・・・(確信)
iex(6)> HTTPoison.post! url, msg, %{"User-Agent": "Test"}
...
...status_code: 500}
ほら、エラーコード返ってきたよ・・・
何が悪いのか一つずつ考えてみる・・・(問題の分割大事~大事~)
使う関数が間違っている?いや、ドキュメント見る限りはこれで大丈夫なはず・・・これは大丈夫そうだ。
第一引数: URL部分・・・そもそもURLが間違ってたら帰ってくるのは500エラーじゃない・・・これは大丈夫そうだ。
第二引数: body部分・・・Elixirの関数使ってるし値が間違っているならまず、その関数でエラーが出る・・・これは大丈夫そうだ。
第三引数: header部分・・・こいつ怪しい・・・とりあえずこいつに焦点を合わせて色々試してみる。
この間、試すこと数回・・・冗長なので飛ばします。
iex(10)> HTTPoison.post! url, msg, [{"Content-Type", "application/x-www-form-urlencoded"}]
...
...status_code: 200}
キタ━━゚+.ヽ(≧▽≦)ノ.+゚━━ ッ !!!
これでElixirからidobataにメッセージを送れる。

管理人の独り言~

HTTPヘッダに関しての知識を忘れてる・・・orz
学習し直さないと、この先でもきっと問題が起こるな。

参考文献

人気の投稿