0

私は Elixir と Phoenix を学んでおり、Github の API を照会する必要があるサイド プロジェクトを構築しています。

これは呼び出しを実行するモジュールです

defmodule Github do

  use HTTPoison.Base

  def process_url(url) do
    "https://api.github.com/" <> url
  end

  def process_response_body(body) do
    body
    |> Poison.decode!
    |> Enum.map(fn({k, v}) -> {String.to_atom(k), v} end)

  end

end

これは、「/api/github/search」の GET に応答するコントローラーです。

defmodule MyApp.GithubController do

  use MyApp.Web, :controller
  require Github

  def search(conn, _params) do
    json conn, search_repositories
  end

  def search_repositories() do

    url = "search/repositories?q=language:javascript&sort=stars&order=desc"
    Github.get! url
  end

end

Phoenix から上部にエラー ページが表示されます

値をエンコードできません: {:total_count, 2389278}

何かが機能しているので、実際にGithubのAPIを呼び出していますが、何らかの理由でステップがありません。ここの例に従いましたhttps://github.com/edgurgel/httpoison#wrapping-httpoisonbase

ヘルプ/ヒントは大歓迎です!

4

1 に答える 1

2

期待される結果はわかりませんが、コントローラーから Github からの完全な応答を JSON として返したいだけだと思います。Poison にデコードを処理させるだけで、それ以上処理する必要はありません。

def process_response_body(body) do
  body
  |> Poison.decode!
end

あなたの不足している部分は、得るという事実です !JSON は返されませんが、ここの最初の使用例で見られるように %HTTPoison.Response 構造体https://github.com/edgurgel/httpoison

構造体には、処理された本文、ヘッダー、およびステータス コードが含まれます。パターン マッチングを使用して json を抽出し、それを返すことができます。

def search_repositories() do
  url = "search/repositories?q=language:javascript&sort=stars&order=desc"
  %HTTPoison.Response{:body => json, :headers => headers, :status_code => code} = Github.get! url
  IO.inspect headers
  IO.inspect code
  json
end
于 2016-07-08T01:24:58.243 に答える