Current section
Files
Jump to
Current section
Files
lib/pinboard.ex
defmodule Pinboard do
def all(auth_token, options \\ []) do
HTTPotion.start
http_response = HTTPotion.get "https://api.pinboard.in/v1/posts/all?results=#{options[:limit]}&auth_token=#{auth_token}&format=json",[timeout: 10_000]
Enum.map(elem(JSX.decode(http_response.body),1), fn(value) -> value["href"] end)
end
def broken(auth_token, options \\ []) do
url_chunks = Enum.chunk(all(auth_token, options), 20)
tasks = Enum.map(url_chunks, &Pinboard.Internal.check_urls/1)
status = List.flatten(Enum.map(tasks, &Pinboard.Internal.result/1))
IO.inspect status
not_ok = Enum.filter(status, &Pinboard.Internal.not_ok/1)
end
defmodule Internal do
def check_urls(urls) do
HTTPotion.start
check = fn(url) ->
try do
IO.puts "check url= #{url}"
{url, HTTPotion.get(url, [timeout: 60_000]).status_code}
rescue
error -> {url, error.message}
end
end
Task.async(fn -> Enum.map(urls, check) end)
end
def result(task) do
Task.await(task, 120_000)
end
def not_ok({url, status}) do
status >= 300 && status < 200
end
end
end