From 9f389a05cc883213327b8d17db6d23c3ff8fb4e1 Mon Sep 17 00:00:00 2001 From: Joris Guyonvarch Date: Sat, 11 Apr 2015 14:06:14 +0200 Subject: Set up a listener that diff new ads and show only the new ones --- src/Main.hs | 56 ++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 46 insertions(+), 10 deletions(-) (limited to 'src/Main.hs') diff --git a/src/Main.hs b/src/Main.hs index f352a43..3f2dd37 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -4,24 +4,60 @@ module Main import Data.List (intersperse) -import Ad (getAds) +import Control.Concurrent (threadDelay) + +import Ad (getResumes) import Model.Ad +import Model.URL +import Model.Resume (getURLs, getNewResumes) -import View.Ad (renderAd) +import View.Ad (renderResume) import Page import Parser.Detail -url :: String +url :: URL url = "http://www.leboncoin.fr/annonces/offres/corse/" main :: IO () -main = do - eitherAds <- getAds url - case eitherAds of - Left error -> +main = initListenToNewResumes + +initListenToNewResumes :: IO () +initListenToNewResumes = do + eitherResumes <- getResumes url + case eitherResumes of + Left error -> do putStrLn error - Right ads -> do - writeFile "result.html" (concat . intersperse "\n\n" . map renderAd $ ads) - putStrLn "Done!" + waitOneMinute + initListenToNewResumes + Right resumes -> + let viewedURLs = getURLs resumes + in do + putStrLn "Initialization complete" + waitOneMinute + listenToNewResumes viewedURLs + +listenToNewResumes :: [URL] -> IO () +listenToNewResumes viewedURLs = do + eitherResumes <- getResumes url + case eitherResumes of + Left error -> do + putStrLn error + waitOneMinute + listenToNewResumes viewedURLs + Right resumes -> + let (newViewdURLs, newResumes) = getNewResumes viewedURLs resumes + newAdsCount = length newResumes + in do + if newAdsCount > 0 + then do + putStrLn ("Got " ++ (show newAdsCount) ++ " new ads.\n") + putStrLn (concat . intersperse "\n\n" . map renderResume $ newResumes) + else + return () + waitOneMinute + listenToNewResumes newViewdURLs + +waitOneMinute :: IO () +waitOneMinute = threadDelay (1000 * 1000 * 60) -- cgit v1.2.3