]> gitweb.michael.orlitzky.com - dead/halcyon.git/blobdiff - src/Twitter/Status.hs
Add the ability to twat a single status (as a debugging tool).
[dead/halcyon.git] / src / Twitter / Status.hs
index 275e89352fea47e02c453404474c5e6041bfd110..59b98761fce86d62ed6fdaab46d8c950c19fb174 100644 (file)
@@ -1,3 +1,4 @@
+-- |Functions and data for working with Twitter statuses.
 module Twitter.Status
 where
 
@@ -7,6 +8,8 @@ import Text.XML.HaXml
 import Twitter.User
 import Twitter.Xml
 
+-- |Represents one Twitter status. We don't care about any of their
+-- other properties.
 data Status = Status { status_id  :: Integer,
                        created_at :: String,
                        text       :: String,
@@ -14,8 +17,7 @@ data Status = Status { status_id  :: Integer,
             deriving (Show, Eq)
 
 
-
-              
+-- |Given some XML content, create a 'Status' from it.
 status_from_content :: Content -> (Maybe Status)
 status_from_content content =
 
@@ -38,22 +40,36 @@ status_from_content content =
                                   case (reads status_id_data :: [(Integer, String)]) of
                                     []   -> Nothing
                                     parseresult:_ -> Just (Status (fst parseresult) created_at_data all_text user_object)
-               
+
     where
       status_ids = (unique_id content)
       first_status_id = get_char_data (status_ids !! 0)
-      
+
       created_ats = (status_created_at content)
-      first_created_at = get_char_data (created_ats !! 0)      
+      first_created_at = get_char_data (created_ats !! 0)
 
       texts = (status_text content)
       all_text = concat $ catMaybes (map get_char_data texts)
-      
+
       users = (status_user content)
-      first_user = user_from_content (users !! 0)      
+      first_user = user_from_content (users !! 0)
 
 
+-- |Takes an XML String as an argument, and returns the
+-- status that was parsed from it. Should only be used
+-- on XML string where a <status> is a top-level element.
+parse_status :: String -> [Status]
+parse_status xml_data =
+    catMaybes maybe_status
+    where
+      (Document _ _ root _) = xmlParse xml_file_name xml_data
+      root_elem = CElem root
+      status_element = (single_status root_elem)
+      maybe_status = map status_from_content status_element
+
 
+-- |Takes an XML String as an argument, and returns the list of
+-- statuses that can be parsed from it.
 parse_statuses :: String -> [Status]
 parse_statuses xml_data =
     catMaybes maybe_statuses
@@ -64,12 +80,14 @@ parse_statuses xml_data =
       maybe_statuses = map status_from_content status_elements
 
 
--- This is a required parameter to the xmlParse function used in
--- error reporting. We're not parsing a function, though, so we
--- leave it blank.
+-- |This is a required parameter to the xmlParse function used in
+-- error reporting. We're not parsing a function, though, so we leave
+-- it blank.
 xml_file_name :: String
 xml_file_name = ""
 
+-- |Returns a nicely-formatted String representing the given 'Status'
+-- object.
 pretty_print :: Status -> String
 pretty_print status =
     concat [ name,
@@ -85,8 +103,10 @@ pretty_print status =
 
 
 
+-- |Given a list of statuses, returns the greatest status_id belonging
+-- to one of the statuses in the list.
 get_max_status_id :: [Status] -> Integer
-get_max_status_id statuses =  
+get_max_status_id statuses =
   maximum status_ids
   where
-    status_ids = map status_id statuses
\ No newline at end of file
+    status_ids = map status_id statuses