aboutsummaryrefslogtreecommitdiffhomepage
path: root/scaffolder/src/Text/Edifact/Fetcher/Composites.hs
diff options
context:
space:
mode:
Diffstat (limited to 'scaffolder/src/Text/Edifact/Fetcher/Composites.hs')
-rw-r--r--scaffolder/src/Text/Edifact/Fetcher/Composites.hs31
1 files changed, 31 insertions, 0 deletions
diff --git a/scaffolder/src/Text/Edifact/Fetcher/Composites.hs b/scaffolder/src/Text/Edifact/Fetcher/Composites.hs
new file mode 100644
index 0000000..8f94cc9
--- /dev/null
+++ b/scaffolder/src/Text/Edifact/Fetcher/Composites.hs
@@ -0,0 +1,31 @@
1{-# LANGUAGE OverloadedStrings #-}
2
3module Text.Edifact.Fetcher.Composites
4 ( fetchComposites
5 , compositesDirectory
6 ) where
7
8import Text.Edifact.Fetcher.Commons
9import Text.Edifact.Scaffolder.Commons
10
11import Text.Edifact.Scaffolder.Composites.Specification (listSimples)
12
13import Data.List as L (nub,
14 sort)
15import Data.Text.Encoding as TE (decodeUtf8)
16import Formatting
17
18compositesDirectory :: FilePath
19compositesDirectory = "composites"
20
21fetchComposites :: ([CompositeCode], [SimpleCode]) -> Fetcher [SimpleCode]
22fetchComposites (composites, segments) =
23 let compactSimpleCodes = L.nub . L.sort . mappend segments . concat
24 in compactSimpleCodes <$> traverse (retry 3 . fetchComposite) composites
25
26fetchComposite :: CompositeCode -> Fetcher [SimpleCode]
27fetchComposite 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)