下午好,我有一个模块可以从链接中获取域名。我有一个模块,从链接中获取域名。
defmodule URIparser do
defstruct domains: []
def make_domain(uri) do
case URI.parse(uri) do
%URI{authority: nil} -> URI.parse("http://#{uri}")
%URI{authority: _} -> URI.parse(uri)
end
end
end
之后我使用管道,得到我需要的域名。
links = ["https://www.google.com/search?newwindow=1&sxsrf", "https://stackoverflow.com/questions/ask", "yahoo.com"]
Enum.each(links, fn(x) -> URIparser.make_domain(x) |> Map.take([:authority]) |> Map.values |> IO.inspect end)
这就是最后发生的事情。
["google.com"]
["stackoverflow.com"]
["yahoo.com"]
:ok
请告诉我们如何补充流水线 并把所有域名放到一个列表里 也可以采用其他的解决方案。
举个例子。
%{domains: ["google.com", "stackoverflow.com", "yahoo.com"]}
而不是 Enum.each
和 Map.take
,使用 Enum.map
和 Map.get
Enum.map(links, fn x ->
x
|> URIparser.make_domain()
|> Map.get(:authority)
end)