{-# OPTIONS_HADDOCK hide #-}
module Text.HTML.Scalpel.Internal.Scrape.URL (
URL
, scrapeURL
) where
import Text.HTML.Scalpel.Internal.Scrape
import Control.Applicative
import qualified Network.Curl.Download as Curl
import qualified Text.StringLike as TagSoup
type URL = String
-- | The 'scrapeURL' function downloads the contents of the given URL and
-- executes a 'Scraper' on it.
scrapeURL :: TagSoup.StringLike str => URL -> Scraper str a -> IO (Maybe a)
scrapeURL url scraper = (eitherToMaybeA . toStr) <$> Curl.openAsTags url
where eitherToMaybeA = either (const Nothing) (scrape scraper)
toStr = (((TagSoup.castString <$>) <$>) <$>)