module UniProtConvert
( toUniProtAnn
, toUniProtDesc
) where
import Data.Maybe
import Data.List
import qualified Data.Map.Strict as Map
import Data.Monoid
import qualified Data.Text as T
import Network.HTTP
import Types
toUniProtAnn :: UnknownAnn -> IO (Maybe Ann)
toUniProtAnn (UnknownAnn "") = return Nothing
toUniProtAnn query = do
uniProtDesc <- toUniProtDesc (UniProtOther "genes") $ query
return . fmap (Ann . unDesc) $ uniProtDesc
toUniProtDesc :: DescFields -> UnknownAnn -> IO (Maybe Desc)
toUniProtDesc _ (UnknownAnn "") = return Nothing
toUniProtDesc field (UnknownAnn query) = do
let base = "http://www.uniprot.org/uniprot/"
q = "?query="
opts = "&sort=score&columns="
<> T.unpack ((\(UniProtOther x) -> x) field)
<> "&format=tab"
req = base <> q <> T.unpack query <> opts
rsp <- simpleHTTP (getRequest req) >>= getResponseBody
let uniProtDesc = case rsp of
"" -> Nothing
x -> Just . Desc . T.pack . head . drop 1 . lines $ x
return uniProtDesc