Commit ed6f6bcb authored by Przemyslaw Kaminski's avatar Przemyslaw Kaminski

[searx] fetching searx json page works now

parent 22e2da48
Pipeline #1682 passed with stage
in 30 minutes and 55 seconds
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TemplateHaskell #-}
module Gargantext.API.Node.Corpus.Searx where module Gargantext.API.Node.Corpus.Searx where
...@@ -10,7 +11,8 @@ import GHC.Generics (Generic) ...@@ -10,7 +11,8 @@ import GHC.Generics (Generic)
import Network.HTTP.Client import Network.HTTP.Client
import Network.HTTP.Client.TLS import Network.HTTP.Client.TLS
import Protolude (encodeUtf8, Text) import qualified Prelude as Prelude
import Protolude (encodeUtf8, Text, Either)
import Gargantext.Prelude import Gargantext.Prelude
import Gargantext.Prelude.Config import Gargantext.Prelude.Config
...@@ -25,7 +27,7 @@ import Gargantext.Database.Prelude (hasConfig) ...@@ -25,7 +27,7 @@ import Gargantext.Database.Prelude (hasConfig)
data SearxResult = SearxResult data SearxResult = SearxResult
{ _sr_url :: Text { _sr_url :: Text
, _sr_title :: Text , _sr_title :: Text
, _sr_content :: Text , _sr_content :: Maybe Text
, _sr_engine :: Text , _sr_engine :: Text
, _sr_score :: Double , _sr_score :: Double
, _sr_category :: Text , _sr_category :: Text
...@@ -50,6 +52,33 @@ data SearxResponse = SearxResponse ...@@ -50,6 +52,33 @@ data SearxResponse = SearxResponse
$(deriveJSON (unPrefix "_srs_") ''SearxResponse) $(deriveJSON (unPrefix "_srs_") ''SearxResponse)
data FetchSearxParams = FetchSearxParams
{ _fsp_manager :: Manager
, _fsp_pageno :: Int
, _fsp_query :: Text
, _fsp_url :: Text
}
fetchSearxPage :: FetchSearxParams -> IO (Either Prelude.String SearxResponse)
fetchSearxPage (FetchSearxParams { _fsp_manager
, _fsp_pageno
, _fsp_query
, _fsp_url }) = do
-- searx search API:
-- https://searx.github.io/searx/dev/search_api.html?highlight=json
req <- parseRequest $ T.unpack _fsp_url
let request = urlEncodedBody
[ --("category_general", "1")
("q", encodeUtf8 _fsp_query)
, ("pageno", encodeUtf8 $ T.pack $ show _fsp_pageno)
--, ("time_range", "None")
--, ("language", "en-US") -- TODO
, ("format", "json")
] req
res <- httpLbs request _fsp_manager
let dec = Aeson.eitherDecode $ responseBody res :: (Either Prelude.String SearxResponse)
pure dec
triggerSearxSearch :: (MonadBase IO m, FlowCmdM env err m) triggerSearxSearch :: (MonadBase IO m, FlowCmdM env err m)
=> CorpusId => CorpusId
-> API.Query -> API.Query
...@@ -64,19 +93,15 @@ triggerSearxSearch cid q l = do ...@@ -64,19 +93,15 @@ triggerSearxSearch cid q l = do
let surl = _gc_frame_searx_url cfg let surl = _gc_frame_searx_url cfg
printDebug "[triggerSearxSearch] surl" surl printDebug "[triggerSearxSearch] surl" surl
res <- liftBase $ do manager <- liftBase $ newManager tlsManagerSettings
manager <- newManager tlsManagerSettings res <- liftBase $ fetchSearxPage $ FetchSearxParams { _fsp_manager = manager
req <- parseRequest $ T.unpack surl , _fsp_pageno = 1
let request = urlEncodedBody [ ("category_general", "1") , _fsp_query = q
, ("q", encodeUtf8 q) , _fsp_url = surl }
, ("pageno", "1")
, ("time_range", "None") printDebug "[triggerSearxSearch] res" res
, ("language", "en-US") -- TODO
, ("format", "json")] req
httpLbs request manager
let dec = Aeson.decode $ responseBody res :: (Maybe SearxResponse)
printDebug "[triggerSearxSearch] dec" dec
pure () pure ()
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