2016-03-14 85 views
0

我正在編程Phoenix書,我的Wolfram服務沒有按預期工作。編程Phoenix Wolfram Alpha服務返回`[]`而不是結果元組

當我運行在iex -S mix以下命令:

Rumbl.InfoSys.compute("what is the meaning of life?") 

它返回:

[] 

的預期值是這樣的:

[%Rumbl.InfoSys.Result{​backend:​ %Rumbl.User{...}, ​score:​ 95, 
​text:​ ​"​​42\n(according to the book The Hitchhiker"​, ​url:​ nil}] 

這裏是lib/rumbl/info_sys/wolfram.ex內容

defmodule Rumbl.InfoSys.Wolfram do 
    import SweetXml 
    alias Rumbl.InfoSys.Result 

    def start_link(query, query_ref, owner, limit) do 
    Task.start_link(__MODULE__, :fetch, [query, query_ref, owner, limit]) 
    end 

    def fetch(query_str, query_ref, owner, _limit) do 
    query_str 
    |> fetch_xml() 
    |> xpath(~x"/queryresult/pod[contains(@title, 'Result') or 
           contains(@title, 'Definitions')] 
          /subpod/plaintext/text()") 
    |> send_results(query_ref, owner) 
    end 

    defp send_results(nil, query_ref, owner) do 
    send(owner, {:results, query_ref, []}) 
    end 

    defp send_results(answer, query_ref, owner) do 
    results = [%Result{backend: "wolfram", score: 95, text: to_string(answer)}] 
    send(owner, {:results, query_ref, results}) 
    end 

    defp fetch_xml(query_str) do 
    {:ok, {_, _, body}} = :httpc.request(
     String.to_char_list("http://api.wolframalpha.com/v2/query" <> 
     "?appid=#{app_id()}" <> 
     "&input={URI.encode(query_str)}&format=plaintext")) 
    body 
    end 

    defp app_id, do: Application.get_env(:rumbl, :wolfram)[:app_id] 
end 

...和lib/rumbl/info_sys/supervisor.ex

defmodule Rumbl.InfoSys.Supervisor do 
    use Supervisor 

    def start_link() do 
    Supervisor.start_link(__MODULE__, [], name: __MODULE__) 
    end 

    def init(_opts) do 
    children = [ 
     worker(Rumbl.InfoSys, [], restart: :temporary) 
    ] 

    supervise children, strategy: :simple_one_for_one 
    end 
end 

爲什麼我沒有得到在iex正確的返回值?任何幫助表示讚賞 - 請讓我知道,如果你想看到任何其他文件。

+1

是否當你捲曲或Wget的發送相同的查詢工作? – Amiramix

+0

如何使用curl或wget發出請求? –

回答

0

{URI.encode(query_str)}應該是#{URI.encode(query_str)}