+{-# LANGUAGE NoMonomorphismRestriction #-}
+
-- | Functions and data for working with Twitter statuses.
module Twitter.Status
where
import Control.Applicative ((<$>), (<*>))
import Control.Monad (liftM)
import Data.Aeson ((.:), FromJSON(..), Value(Object))
-import Data.Maybe (catMaybes, isJust)
+import Data.Maybe (fromMaybe, mapMaybe, isJust)
import Data.Monoid (mempty)
import Data.String.Utils (join, splitWs)
import Data.Text (pack)
import Test.HUnit
import Text.Regex (matchRegex, mkRegex)
+import Html (replace_entities)
import StringUtils (listify)
import Twitter.User
(t .: id_field) <*>
liftM isJustInt (t .: in_reply_to_status_id_field) <*>
(t .: retweeted_field) <*>
- (t .: text_field) <*>
+ liftM replace_entities (t .: text_field) <*>
(t .: user_field)
where
-- The typechecker flips out without this.
show_created_at :: Maybe TimeZone -> Status -> String
show_created_at mtz =
- (maybe "" id) . (fmap $ utc_time_to_rfc822 mtz) . created_at
+ (fromMaybe "") . (fmap $ utc_time_to_rfc822 mtz) . created_at
-- | Returns a nicely-formatted String representing the given 'Status'
-- object.
-- | Parse all usernames of the form \@username from a status.
parse_usernames_from_status :: Status -> [String]
parse_usernames_from_status status =
- catMaybes (map parse_username status_words)
+ mapMaybe parse_username status_words
where
status_words = splitWs (text status)