]> gitweb.michael.orlitzky.com - dead/halcyon.git/blobdiff - src/Twitter/Http.hs
Clean up a bunch of code and comments.
[dead/halcyon.git] / src / Twitter / Http.hs
index 112c2ea2fa293f75aa16382ab7770b07c9607c2f..eec7ab7187c56145ea5cce09603056e659b6c3c2 100644 (file)
@@ -1,19 +1,28 @@
-module Twitter.Http
+module Twitter.Http (
+  get_user_new_statuses,
+  get_user_timeline,
+  http_get )
 where
 
-import qualified Data.ByteString.Lazy as B
-import qualified Data.ByteString.Char8 as BC
-import qualified Data.Conduit as C
-import Data.Conduit.Binary (sinkLbs)
-import Network.HTTP.Conduit
+import qualified Data.ByteString.Lazy as B ( ByteString )
+import qualified Data.ByteString.Char8 as BC ( pack )
+import Network.HTTP.Client (
+  httpLbs,
+  newManager,
+  parseUrl,
+  responseBody )
+import Network.HTTP.Client.TLS ( tlsManagerSettings )
 import Web.Authenticate.OAuth (
   OAuth(..),
   Credential,
   newCredential,
   newOAuth,
-  signOAuth)
+  signOAuth )
 
--- |The API URL of username's timeline.
+import Configuration ( Cfg(..) )
+
+
+-- | The API URL of username's timeline.
 --
 -- See,
 --
@@ -30,69 +39,57 @@ user_timeline_url username =
            "&include_rts=true&",
            "count=10" ]
 
-status_url :: Integer -> String
-status_url status_id =
-  concat [ "https://api.twitter.com/",
-           "1.1/",
-           "statuses/",
-           "show.json?id=",
-           (show status_id) ]
 
 -- | Given username's last status id, constructs the API URL for
 --   username's new statuses. Essentially, 'user_timeline_url' with a
---   "since_id" parameter tacked on.
+--   \"since_id\" parameter tacked on.
+--
 user_new_statuses_url :: String -> Integer -> String
 user_new_statuses_url username last_status_id =
-  concat [ user_timeline_url username,
-           "&since_id=" ++ (show last_status_id) ]
-
-
-get_status :: Integer -> IO B.ByteString
-get_status status_id = do
-  let uri = (status_url status_id)
-  status <- (http_get uri)
-  return status
+  url ++ "&since_id=" ++ since_id
+  where
+    url = user_timeline_url username
+    since_id = show last_status_id
 
 
 -- | Return's username's timeline.
-get_user_timeline :: String -> IO B.ByteString
-get_user_timeline username = do
-  let uri = (user_timeline_url username)
-  timeline <- (http_get uri)
-  return 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 :: String -> Integer -> IO B.ByteString
-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
+--   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 :: String -> IO B.ByteString
-http_get url = do
-  manager <- newManager def
+-- | Retrieve a URL, or crash. The request is signed using all of the
+--   OAuth junk contained in the configuration.
+--
+http_get :: Cfg -> String -> IO B.ByteString
+http_get cfg url = do
+  manager <- newManager tlsManagerSettings
   request <- parseUrl url
-
-  C.runResourceT $ do
-    signed_request <- signOAuth oauth credential request
-    response <- http signed_request manager
-    responseBody response C.$$+- sinkLbs
+  signed_request <- signOAuth oauth credential request
+  response <- httpLbs signed_request manager
+  return $ responseBody response
 
   where
-    consumer_key = BC.pack ""
-    consumer_secret = BC.pack ""
-    access_token = BC.pack ""
-    access_secret = BC.pack ""
+    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
-            }
+              oauthConsumerKey = consumer_key',
+              oauthConsumerSecret = consumer_secret' }
 
     credential :: Credential
-    credential = newCredential access_token access_secret
+    credential = newCredential access_token' access_secret'