diff --git a/Download.hs b/Download.hs index 4147c2a..d3b6ac3 100644 --- a/Download.hs +++ b/Download.hs @@ -1,15 +1,28 @@ -module Download (downloadHtmlDef) where +module Download (downloadHtmlAvailableDef, downloadHtmlDef) where import Data.ByteString.Lazy import Network.HTTP.Simple baseUrl = "http://www.cnrtl.fr/definition/" -downloadHtmlDef :: String -> IO ByteString -downloadHtmlDef w = do - request <- getRequest w - response <- httpLBS (request) +downloadHtmlAvailableDef :: String -> IO ByteString +downloadHtmlAvailableDef w = do + request <- getAvailableDefRequest w + downloadFromRequest request + +downloadHtmlDef :: String -> String -> IO ByteString +downloadHtmlDef n w = do + request <- getDefRequest n w + downloadFromRequest request + +downloadFromRequest :: Request -> IO ByteString +downloadFromRequest r = do + response <- httpLBS r return (getResponseBody response) -getRequest :: String -> IO Request -getRequest w = parseRequest (baseUrl ++ w) + +getAvailableDefRequest :: String -> IO Request +getAvailableDefRequest w = parseRequest (baseUrl ++ w) + +getDefRequest :: String -> String -> IO Request +getDefRequest n w = parseRequest (baseUrl ++ w ++ "/" ++ n) diff --git a/Main.hs b/Main.hs index 7731d5b..53971c0 100644 --- a/Main.hs +++ b/Main.hs @@ -4,9 +4,20 @@ import System.Environment import Download import ParseHtml import qualified Data.Text.Lazy.Encoding as E +import qualified Data.ByteString.Lazy.Char8 as L + main :: IO () -main = do - args <- getArgs - htmlResult <- downloadHtmlDef (head args) - printDifferentDef (E.decodeUtf8 htmlResult) +main = getArgs >>= parse + +parse [] = usage +parse ("-d":[]) = usage +parse ("-d":n:[]) = usage +parse ("-d":n:fs) = do + htmlResult <- downloadHtmlDef n (head fs) + printDef (E.decodeUtf8 htmlResult) +parse fs = do + htmlResult <- downloadHtmlAvailableDef (head fs) + printDifferentDef (E.decodeUtf8 htmlResult) + +usage = putStrLn "Usage: dictfr [options] [word]\n\nOPTIONS:\n-d id the definition id for the word" diff --git a/ParseHtml.hs b/ParseHtml.hs index 62a92bf..3629d72 100644 --- a/ParseHtml.hs +++ b/ParseHtml.hs @@ -1,39 +1,23 @@ -module ParseHtml (printDifferentDef, differentDefTags, parseDefTags) where +module ParseHtml (printDef, printDifferentDef) where import Text.HTML.TagSoup import Prelude +import WordDef import qualified Data.Text.Lazy as T -data WordDefHeader = WordDefHeader WordName WordType -data WordName = WordName String -data WordType = WordType String printDifferentDef :: T.Text -> IO () printDifferentDef x = putStrLn (getDifferentDef x) - getDifferentDef :: T.Text -> String getDifferentDef x = getDifferentDefMessages (length xs) ++ renderWordList xs where xs = (parseDefTags . differentDefTags) x -renderWordList :: [WordDefHeader] -> String -renderWordList [] = "" -renderWordList (x:xs) = (renderString x) ++ "\n" ++ (renderWordList xs) - getDifferentDefMessages :: Int -> String getDifferentDefMessages 0 = "Aucune définition disponible." getDifferentDefMessages 1 = "Une définition disponible : \n" getDifferentDefMessages _ = "Plusieurs définitions disponibles : \n" -renderString :: WordDefHeader -> String -renderString (WordDefHeader n t) = (getNameString n) ++ (getTypeString t) - -getNameString :: WordName -> String -getNameString (WordName s) = s - -getTypeString :: WordType -> String -getTypeString (WordType s) = s - parseDefTags :: [Tag String] -> [WordDefHeader] parseDefTags [] = [] parseDefTags xs = @@ -52,3 +36,18 @@ differentDefTags :: T.Text -> [Tag String] differentDefTags = filter (~== TagText "") . (takeWhile (~/= "