get_currency() ->
URL = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20(%22GBPEUR%22)&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys",
{Result, Info} = httpc:request(URL),
case Result of
error ->
{Result, Info};
ok ->
{{_Protocol, Code, _CodeStr}, _Attrs, WebData} = Info,
WebData
end.
extract_text(Content) ->
Item = hd(Content),
case element(1, Item) of
xmlText -> Item#xmlText.value;
_ -> ""
end.
analyze_info(WebData) ->
ToFind = [rate],
Parsed = element(1, xmerl_scan:string(WebData)),
Children = Parsed#xmlElement.content,
ElementList = [{El#xmlElement.name, extract_text(El#xmlElement.content)} || El <- Children, element(1, El) == xmlElement],
lists:map(fun(Item) -> lists:keyfind(Item, 1, ElementList) end, ToFind).
以上是用于尝试从网址http://query.yahooapis.com/v1/public/yql?q=select%20 *%20从%20yahoo.finance.xchange%20 where%20pair%20in%20(%22GBPEUR%22)中提取标记内容的代码&安培; ENV =商店%3A%2F%2Fdatatables.org%2Falltableswithkeys
这是我在shell中所做的。
inets:start().
XML = scrapetest:get_currency().
scrapetest:analyze_info(XML).
我得到的回报简直就是&#34;假&#34;。我不确定我做错了什么。
答案 0 :(得分:0)
只需在代码中添加一些日志即可。
EG。添加io:format("~p~n", [ElementList]),
- 会向您显示ElementList仅包含result
标记,您应该在列表推导中更深入一级,以获取名为rate
的标记
这是常见的建议。
在你的情况下,似乎更好的决定是递归查找功能(如果你想写一些代码)
或使用一些电池,如xmerl_xpath
只是另一个analyze_info
的示例:
analyze_info(WebData) ->
Parsed = element(1, xmerl_scan:string(WebData)),
xmerl_xpath:string("//Rate/text()", Parsed).
这将返回:
[{xmlText,[{'Rate',2},{rate,1},{results,1},{query,1}],
1,[],"1.1813",text}]