Skip to content

Instantly share code, notes, and snippets.

@matteodepalo
Created October 16, 2015 13:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save matteodepalo/29282a1787eba8d297bc to your computer and use it in GitHub Desktop.
Save matteodepalo/29282a1787eba8d297bc to your computer and use it in GitHub Desktop.
defmodule GosugamersParser do
use Hound.Helpers
require Logger
def start do
events_urls
|> Enum.map(&Task.async(fn -> fetch_tournaments(&1) end))
|> Enum.map(&Task.await(&1, 100000))
|> List.flatten
|> Enum.map(&IO.puts/1)
end
defp fetch_tournaments(url) do
within_new_session fn ->
Logger.info "Navigating to #{url}"
navigate_to(url)
tournament_urls = find_all_elements(:css, "h3 a")
|> Enum.map(&attribute_value(&1, "href"))
Logger.info "Found tournament urls: #{IO.inspect tournament_urls}"
tournament_urls
|> Enum.map(&fetch_title/1)
end
end
defp fetch_title(url) do
within_new_session fn ->
Logger.info "Navigating to #{url}"
navigate_to(url)
tournament_title = find_element(:css, "h1")
|> visible_text
Logger.info "Found tournament title: #{tournament_title}"
tournament_title
end
end
defp within_new_session(func) do
Hound.start_session
value = func.()
Hound.end_session
value
end
defp events_urls do
[
"http://www.gosugamers.net/hearthstone/events/",
"http://www.gosugamers.net/dota2/events"
]
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment