- concat [ user_timeline_url username,
- "&since_id=" ++ (show last_status_id) ]
-
-
--- |Return's username's timeline, or 'Nothing' if there was an error.
-get_user_timeline :: String -> IO (Maybe String)
-get_user_timeline username = do
- let uri = (user_timeline_url username)
- timeline <- (http_get uri)
- return timeline
-
-
--- Returns the XML representing all of username's statuses that are
--- newer than last_status_id.
-get_user_new_statuses :: String -> Integer -> IO (Maybe String)
-get_user_new_statuses username last_status_id = do
- let uri = (user_new_statuses_url username last_status_id)
- new_statuses <- (http_get uri)
- return new_statuses
-
-
--- |Uses the CURL API to retrieve uri. Returns 'Nothing' if there was
--- an error.
-http_get :: String -> IO (Maybe String)
-http_get uri = withCurlDo $ do
- resp <- curlGetString uri [CurlTimeout 45]
-
- case resp of
- (CurlOK, body) -> return (Just body)
- (code, _) -> do
- hPutStrLn stderr ("HTTP Error: " ++ (show code))
- return Nothing
+ concat [ user_timeline_url username,
+ "&since_id=" ++ (show last_status_id) ]
+
+
+get_status :: Cfg -> Integer -> IO B.ByteString
+get_status cfg status_id = do
+ let uri = status_url status_id
+ http_get cfg uri
+
+
+-- | Return's username's timeline.
+get_user_timeline :: Cfg -> String -> IO B.ByteString
+get_user_timeline cfg username = do
+ let uri = user_timeline_url username
+ http_get cfg uri
+
+
+-- | Returns the JSON representing all of username's statuses that are
+-- newer than last_status_id.
+get_user_new_statuses :: Cfg -> String -> Integer -> IO B.ByteString
+get_user_new_statuses cfg username last_status_id = do
+ let uri = user_new_statuses_url username last_status_id
+ http_get cfg uri
+
+
+-- | Retrieve a URL, or crash.
+http_get :: Cfg -> String -> IO B.ByteString
+http_get cfg url = do
+ manager <- newManager def
+ request <- parseUrl url
+
+ C.runResourceT $ do
+ signed_request <- signOAuth oauth credential request
+ response <- http signed_request manager
+ responseBody response C.$$+- sinkLbs
+
+ where
+ consumer_key' = BC.pack (consumer_key cfg)
+ consumer_secret' = BC.pack (consumer_secret cfg)
+ access_token' = BC.pack (access_token cfg)
+ access_secret' = BC.pack (access_secret cfg)
+
+ oauth :: OAuth
+ oauth = newOAuth {
+ oauthConsumerKey = consumer_key',
+ oauthConsumerSecret = consumer_secret'
+ }
+
+ credential :: Credential
+ credential = newCredential access_token' access_secret'