module Web.VKHS.API
( api
, envcall
) where
import Control.Monad
import Control.Monad.Trans
import Control.Monad.Writer
import Control.Monad.Error
import Data.Label
import qualified Data.ByteString.Char8 as BS
import Network.Curlhs.Core
import Network.Protocol.Http
import Network.Protocol.Uri
import Network.Protocol.Uri.Query
import Text.Printf
import Web.VKHS.Types
import Web.VKHS.Curl
envcall :: String -> Env CallEnv
envcall at = mkEnv (CallEnv at)
api :: Env CallEnv
-> String
-> [(String, String)]
-> IO (Either String String)
api e mn mp =
let uri = BS.pack $ showUri $ (\f -> f $ toUri $ printf "https://api.vk.com/method/%s" mn) $
set query $ bw params (("access_token",(access_token . sub) e):mp)
in runErrorT $ do
r <- ErrorT $ vk_curl e (tell [CURLOPT_URL uri])
(_,b) <- ErrorT $ return $ parseResponse r
return b