import Network.Curl
import System.IO (hPutStrLn, stderr)
+-- |The API URL of username's timeline.
--
--- http://dev.twitter.com/doc/get/statuses/user_timeline
+-- See,
+--
+-- <http://dev.twitter.com/doc/get/statuses/user_timeline>
--
user_timeline_url :: String -> String
user_timeline_url username =
"&include_rts=true",
"&count=10" ]
+status_url :: Integer -> String
+status_url status_id =
+ concat [ "http://api.twitter.com/1/statuses/show/",
+ (show status_id),
+ ".xml" ]
+
+-- |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.
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 (Maybe String)
+get_status status_id = do
+ let uri = (status_url status_id)
+ status <- (http_get uri)
+ return status
+
+
+-- |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)
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)
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]