-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,
- user :: User,
- reply :: Bool,
- retweet :: Bool }
- deriving (Show, Eq)
-
-
--- |Given some XML content, create a 'Status' from it.
-status_from_content :: Content i -> Maybe Status
-status_from_content content =
- if (length status_ids) == 0
- || (length created_ats) == 0
- || (length texts) == 0
- || (length users) == 0
- || (length retweeteds) == 0
- then
- Nothing
- else do
- first_status_id <- get_char_data (status_ids !! 0)
- integer_status_id <- parse_status_id first_status_id
- first_created_at <- get_char_data (created_ats !! 0)
- first_user <- user_from_content (users !! 0)
- first_retweeted <- get_char_data (retweeteds !! 0)
-
- let is_reply = case (length reply_to_status_ids) of
- 0 -> False
- _ -> True
-
- let is_retweet = case first_retweeted of
- "true" -> True
- _ -> False
-
- return (Status
- integer_status_id
- first_created_at
- all_text
- first_user
- is_reply
- is_retweet)
- where
- status_ids = (unique_id content)
- created_ats = (status_created_at content)
- texts = (status_text content)
- users = (status_user content)
- retweeteds = (status_retweeted content)
- reply_to_status_ids = (status_reply_to_status_id content)
-
- all_text = concat $ catMaybes (map get_char_data texts)
-
- parse_status_id :: String -> Maybe Integer
- parse_status_id s =
- case (reads s) of
- [] -> Nothing
- parseresult:_ -> Just (fst parseresult)
-
--- |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 noPos
- status_element = (single_status root_elem)
- maybe_status = map status_from_content status_element