1 {-# LANGUAGE OverloadedStrings #-}
3 module Text.Edifact.Fetcher.Composites
8 import Text.Edifact.Fetcher.Commons
9 import Text.Edifact.Scaffolder.Commons
11 import Text.Edifact.Scaffolder.Composites.Specification (listSimples)
13 import Data.List as L (nub,
15 import Data.Text.Encoding as TE (decodeUtf8)
18 compositesDirectory :: FilePath
19 compositesDirectory = "composites"
21 fetchComposites :: ([CompositeCode], [SimpleCode]) -> Fetcher [SimpleCode]
22 fetchComposites (composites, segments) =
23 let compactSimpleCodes = L.nub . L.sort . mappend segments . concat
24 in compactSimpleCodes <$> traverse (retry 3 . fetchComposite) composites
26 fetchComposite :: CompositeCode -> Fetcher [SimpleCode]
27 fetchComposite code = do
28 say ("Fetching composite " % fCompositeCode) code
29 url <- getUrl ("/trcd/trcd" % fCompositeCodeLower % ".htm") code
30 outputFile <- getOutputFile (fCompositeCodeLower % ".txt") compositesDirectory code
31 htmlToFileWithParser url TE.decodeUtf8 outputFile (snd <$> listSimples)