module Parser.Resume ( parse ) where import Data.Maybe (catMaybes, isJust) import Data.List (find) import Data.Text (Text) import qualified Data.Text as T import Text.HTML.TagSoup import Model.Resume (Resume(Resume)) import Parser.Utils parse :: Text -> [Resume] parse page = case dropWhile (not . hasClass (T.pack "section") (T.pack "tabsContent")) (parseTags page) of [] -> [] sectionTags -> let lbcTags = takeWhile (not . hasClass (T.pack "div") (T.pack "information-immo")) sectionTags in catMaybes . fmap parseResume $ partitions (~== "") lbcTags parseResume :: [Tag Text] -> Maybe Resume parseResume item = do name <- getTagTextAfter "

" item let price = getTagTextAfter "

" item url <- getTagAttribute "" (T.pack "href") item let isPro = isJust . find (~== "") $ item return (Resume name price (T.concat [T.pack "https:", url]) isPro)