Add local search
This commit is contained in:
parent
c663cb0d3c
commit
4f497ae881
38
Main.hs
38
Main.hs
@ -1,16 +1,24 @@
|
||||
{-# LANGUAGE RecordWildCards #-}
|
||||
{-# LANGUAGE RecordWildCards, OverloadedStrings #-}
|
||||
|
||||
import Network.Wreq (get, responseBody)
|
||||
import System.Console.ArgParser
|
||||
import Network.Wreq (get, responseBody)
|
||||
import Data.Aeson (decode, toJSON)
|
||||
import Data.Maybe (fromJust)
|
||||
import Data.HashMap.Strict (delete)
|
||||
import Control.Monad (when)
|
||||
import Control.Lens
|
||||
import Data.Aeson
|
||||
|
||||
import qualified Data.ByteString.Lazy.Char8 as C
|
||||
import System.Console.ArgParser
|
||||
import System.Process
|
||||
import Json
|
||||
|
||||
|
||||
data Name = Name
|
||||
{ name :: String
|
||||
, url :: String
|
||||
, local :: Bool
|
||||
, raw :: Bool
|
||||
, block :: Bool
|
||||
, raw :: Bool
|
||||
} deriving (Show)
|
||||
|
||||
parser :: ParserSpec Name
|
||||
@ -18,6 +26,7 @@ parser = Name
|
||||
`parsedBy` reqPos "name" `Descr` "Namecoin name id"
|
||||
`andBy` optPos "http://dns.dnschain.net/" "url" `Descr` "Use custom dnschain API url"
|
||||
`andBy` boolFlag "local" `Descr` "Use local namecoind db"
|
||||
`andBy` boolFlag "block" `Descr` "Show blockchain data (require local connecton)"
|
||||
`andBy` boolFlag "raw" `Descr` "Print raw JSON data"
|
||||
|
||||
main :: IO ()
|
||||
@ -25,10 +34,23 @@ main = mkApp parser >>= flip runApp exec
|
||||
|
||||
exec :: Name -> IO ()
|
||||
exec args@Name{..} =
|
||||
if local then putStrLn "to do"
|
||||
if local
|
||||
then do
|
||||
out <- readProcess "namecoind" ["name_show", name] ""
|
||||
case decode $ C.pack out of
|
||||
Just res -> do
|
||||
putStrLn $ repr value
|
||||
when block $ putStrLn (repr extra)
|
||||
where
|
||||
value = fromJust . decode . C.pack $ res |: "value"
|
||||
extra = toJSON $ delete "value" res
|
||||
Nothing -> putStrLn "Error parsing data"
|
||||
else do
|
||||
req <- get (url ++ name)
|
||||
if raw then print $ req ^. responseBody
|
||||
else case decode (req ^. responseBody) of
|
||||
print args
|
||||
let body = req ^. responseBody
|
||||
if raw
|
||||
then print body
|
||||
else case decode body of
|
||||
Just res -> putStrLn $ repr res
|
||||
Nothing -> putStrLn "Error parsing data"
|
||||
|
Loading…
Reference in New Issue
Block a user