2 Module : Gargantext.Core.Text.Corpus.API.Hal
3 Description : Pubmed API connection
4 Copyright : (c) CNRS, 2017
5 License : AGPL + CECILL v3
6 Maintainer : team@gargantext.org
7 Stability : experimental
12 module Gargantext.Core.Text.Corpus.API.Hal
18 import Data.Text (Text, pack, intercalate)
19 import Servant.Client (ClientError)
21 import Gargantext.Core (Lang(..))
22 import Gargantext.Database.Admin.Types.Hyperdata (HyperdataDocument(..))
23 import qualified Gargantext.Defaults as Defaults
24 import Gargantext.Prelude
25 import qualified Gargantext.Core.Text.Corpus.Parsers.Date as Date
26 import qualified HAL as HAL
27 import qualified HAL.Client as HAL
28 import qualified HAL.Doc.Corpus as HAL
30 get :: Lang -> Text -> Maybe Int -> IO [HyperdataDocument]
32 eDocs <- HAL.getMetadataWith q (Just 0) (fromIntegral <$> ml)
33 either (panic . pack . show) (\d -> mapM (toDoc' la) $ HAL._docs d) eDocs
35 getC :: Lang -> Text -> Maybe Int -> IO (Either ClientError (Maybe Integer, ConduitT () HyperdataDocument IO ()))
37 eRes <- HAL.getMetadataWithC q (Just 0) (fromIntegral <$> ml)
38 pure $ (\(len, docsC) -> (len, docsC .| mapMC (toDoc' la))) <$> eRes
40 -- Left err -> panic $ pack $ show err
41 -- Right (len, docsC) -> pure (len, docsC .| mapMC (toDoc' la))
43 toDoc' :: Lang -> HAL.Corpus -> IO HyperdataDocument
44 toDoc' la (HAL.Corpus i t ab d s aus affs struct_id) = do
45 (utctime, (pub_year, pub_month, pub_day)) <-
46 Date.dateSplit la (maybe (Just $ pack $ show Defaults.year) Just d)
47 pure HyperdataDocument { _hd_bdd = Just "Hal"
48 , _hd_doi = Just $ pack $ show i
50 , _hd_uniqId = Nothing
51 , _hd_uniqIdBdd = Nothing
53 , _hd_title = Just $ intercalate " " t
54 , _hd_authors = Just $ foldl (\x y -> x <> ", " <> y) "" aus
55 , _hd_institutes = Just $ foldl (\x y -> x <> ", " <> y) "" $ affs <> map (cs . show) struct_id
56 , _hd_source = Just $ maybe "Nothing" identity s
57 , _hd_abstract = Just $ intercalate " " ab
58 , _hd_publication_date = fmap (pack . show) utctime
59 , _hd_publication_year = pub_year
60 , _hd_publication_month = pub_month
61 , _hd_publication_day = pub_day
62 , _hd_publication_hour = Nothing
63 , _hd_publication_minute = Nothing
64 , _hd_publication_second = Nothing
65 , _hd_language_iso2 = Just $ (pack . show) la }