58 lines
1.7 KiB
Haskell
58 lines
1.7 KiB
Haskell
{-# LANGUAGE RecordWildCards #-}
|
|
{-# LANGUAGE OverloadedStrings #-}
|
|
module MyLib (someFunc) where
|
|
import System.Environment (lookupEnv)
|
|
import Control.Monad.Trans.Maybe (MaybeT(..))
|
|
import Network.AMQP
|
|
import qualified Data.Text as T
|
|
import Data.Text (Text)
|
|
import Control.Exception (bracket)
|
|
import Control.Concurrent (newEmptyMVar, readMVar)
|
|
import Control.Monad (void)
|
|
|
|
import Control.Lens
|
|
import Data.Aeson.Lens
|
|
import Transformer
|
|
import Data.ByteString.Lazy (ByteString)
|
|
import Control.Category ((>>>))
|
|
import Control.Arrow (arr, (&&&))
|
|
import Tags (parseTags)
|
|
|
|
data AMQP = AMQP
|
|
{ host :: String
|
|
, vhost :: Text
|
|
, username :: Text
|
|
, password :: Text
|
|
}
|
|
|
|
getAMQP :: IO (Maybe AMQP)
|
|
getAMQP = runMaybeT $
|
|
AMQP <$> lookupEnvM "AMQP_HOST" <*> lookupEnvMText "AMQP_VHOST" <*> lookupEnvMText "AMQP_USER" <*> lookupEnvMText "AMQP_PASS"
|
|
where
|
|
lookupEnvM = MaybeT . lookupEnv
|
|
lookupEnvMText = fmap T.pack . lookupEnvM
|
|
|
|
tagTransformer :: Transformer IO ByteString ()
|
|
tagTransformer =
|
|
arrOpt (preview (key "content" . key "title" . _String))
|
|
>>> arr id &&& arr parseTags
|
|
>>> liftTransformer print
|
|
|
|
someFunc :: IO ()
|
|
someFunc = do
|
|
Just AMQP{..} <- getAMQP
|
|
let rabbitConnect = openConnection host vhost username password
|
|
bracket rabbitConnect closeConnection $ \conn -> do
|
|
chan <- openChannel conn
|
|
qos chan 0 1 False
|
|
declareQueue chan newQueue {queueName="reddit_tags"}
|
|
bindQueue chan "reddit_tags" "reddit_posts" "key"
|
|
consumeMsgs chan "reddit_tags" Ack $ \(msg, env) -> do
|
|
void $ runTransformer tagTransformer (msgBody msg)
|
|
-- let body = msgBody msg
|
|
-- let title = body ^? key "content" . key "title"
|
|
-- print title
|
|
-- print $ parseTags title
|
|
ackEnv env
|
|
void getLine
|