Commit 684651bd authored by Alexandre Delanoë's avatar Alexandre Delanoë

Merge remote-tracking branch 'origin/dev-openalex' into dev-merge

parents 23892d1d 725c2ca4
......@@ -80,10 +80,24 @@ instance FromHttpApiData Lang
instance ToHttpApiData Lang where
toUrlPiece = pack . show
instance Hashable Lang
instance Arbitrary Lang where
arbitrary = arbitraryBoundedEnum
-- | https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
toISO639Lang :: Lang -> Maybe Text
toISO639Lang All = Nothing
toISO639Lang DE = Just "de"
toISO639Lang EL = Just "el"
toISO639Lang EN = Just "en"
toISO639Lang ES = Just "es"
toISO639Lang FR = Just "fr"
toISO639Lang IT = Just "it"
toISO639Lang PL = Just "pl"
toISO639Lang PT = Just "pt"
toISO639Lang RU = Just "ru"
toISO639Lang UK = Just "uk"
toISO639Lang ZH = Just "zh"
allLangs :: [Lang]
allLangs = [minBound .. maxBound]
......
......@@ -57,7 +57,7 @@ get externalAPI la q mPubmedAPIKey limit = do
Left err -> pure $ Left $ InvalidInputQuery q (T.pack err)
Right corpusQuery -> case externalAPI of
OpenAlex -> first ExternalAPIError <$>
OpenAlex.get (fromMaybe "" Nothing {- email -}) q limit
OpenAlex.get (fromMaybe "" Nothing {- email -}) q la limit
PubMed -> first ExternalAPIError <$>
PUBMED.get (fromMaybe "" mPubmedAPIKey) corpusQuery limit
--docs <- PUBMED.get q default_limit -- EN only by default
......
......@@ -11,6 +11,7 @@ module Gargantext.Core.Text.Corpus.API.OpenAlex where
import Conduit
import qualified Data.Text as T
import Gargantext.Core (Lang, toISO639Lang)
import Gargantext.Core.Text.Corpus.Query as Corpus
import Gargantext.Database.Admin.Types.Hyperdata (HyperdataDocument(..))
import Protolude
......@@ -21,11 +22,14 @@ import Servant.Client (ClientError)
get :: Text
-> Corpus.RawQuery
-> Lang
-> Maybe Limit
-> IO (Either ClientError (Maybe Integer, ConduitT () HyperdataDocument IO ()))
get _email q _l = do
eRes <- OA.fetchWorksC Nothing Nothing $ Just $ Corpus.getRawQuery q
pure $ (\(len, docsC) -> (len, docsC .| takeC 1000 .| mapC toDoc)) <$> eRes
get _email q lang mLimit = do
let limit = getLimit $ fromMaybe 10000 mLimit
let mFilter = (\l -> "language:" <> l) <$> toISO639Lang lang
eRes <- OA.fetchWorksC Nothing mFilter $ Just $ Corpus.getRawQuery q
pure $ (\(len, docsC) -> (len, docsC .| takeC limit .| mapC toDoc)) <$> eRes
toDoc :: OA.Work -> HyperdataDocument
toDoc (OA.Work { .. } ) =
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment