packages feed

twitter-types 0.7.2.2 → 0.8.0

raw patch · 6 files changed

+140/−64 lines, 6 filesdep −ghc-primdep −old-localedep ~basedep ~time

Dependencies removed: ghc-prim, old-locale

Dependency ranges changed: base, time

Files

Web/Twitter/Types.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE OverloadedStrings, DeriveDataTypeable, RecordWildCards, DeriveGeneric, CPP #-}+{-# LANGUAGE OverloadedStrings, DeriveDataTypeable, RecordWildCards, DeriveGeneric #-}  module Web.Twitter.Types        ( UserId@@ -21,6 +21,8 @@        , List(..)        , Entities(..)        , EntityIndices+       , ExtendedEntities(..)+       , ExtendedEntity(..)        , Entity(..)        , HashTagEntity(..)        , UserEntity(..)@@ -39,18 +41,14 @@        where  import Control.Applicative+import Control.Monad import Data.Aeson import Data.Aeson.Types (Parser) import Data.Data import Data.HashMap.Strict (HashMap, fromList, union) import Data.Text (Text, unpack, pack) import GHC.Generics-#if MIN_VERSION_time(1, 5, 0) import Data.Time-#else-import Data.Time-import System.Locale-#endif  newtype TwitterTime = TwitterTime { fromTwitterTime :: UTCTime } @@ -83,16 +81,12 @@  instance FromJSON TwitterTime where     parseJSON = withText "TwitterTime" $ \t ->-#if MIN_VERSION_time(1, 5, 0)         case parseTimeM True defaultTimeLocale twitterTimeFormat (unpack t) of-#else-        case parseTime defaultTimeLocale twitterTimeFormat (unpack t) of-#endif             Just  d -> pure $ TwitterTime d             Nothing -> fail $ "Could not parse twitter time. Text was: " ++ unpack t  instance ToJSON TwitterTime where-    toJSON t = String $ pack $ formatTime defaultTimeLocale twitterTimeFormat $ fromTwitterTime t +    toJSON t = String $ pack $ formatTime defaultTimeLocale twitterTimeFormat $ fromTwitterTime t  instance FromJSON StreamingAPI where     parseJSON v@(Object o) =@@ -125,7 +119,7 @@     , statusCreatedAt :: UTCTime     , statusCurrentUserRetweet :: Maybe StatusId     , statusEntities :: Maybe Entities-    , statusExtendedEntities :: Maybe Entities+    , statusExtendedEntities :: Maybe ExtendedEntities     , statusFavoriteCount :: Integer     , statusFavorited :: Maybe Bool     , statusFilterLevel :: Maybe Text@@ -459,6 +453,7 @@     , userDefaultProfile :: Bool     , userDefaultProfileImage :: Bool     , userDescription :: Maybe Text+    , userEmail :: Maybe Text     , userFavoritesCount :: Int     , userFollowRequestSent :: Maybe Bool     , userFollowing :: Maybe Bool@@ -467,7 +462,7 @@     , userGeoEnabled :: Bool     , userId :: UserId     , userIsTranslator :: Bool-    , userLang :: LanguageCode+    , userLang :: Maybe LanguageCode     , userListedCount :: Int     , userLocation :: Maybe Text     , userName :: Text@@ -503,6 +498,7 @@              <*> o .:  "default_profile"              <*> o .:  "default_profile_image"              <*> o .:? "description"+             <*> fmap join (o .:? "email") -- The field can be a null value              <*> o .:  "favourites_count"              <*> o .:? "follow_request_sent" .!= Nothing              <*> o .:? "following" .!= Nothing@@ -546,6 +542,7 @@                              , "default_profile"                    .= userDefaultProfile                              , "default_profile_image"              .= userDefaultProfileImage                              , "description"                        .= userDescription+                             , "email"                              .= userEmail                              , "favourites_count"                   .= userFavoritesCount                              , "follow_request_sent"                .= userFollowRequestSent                              , "following"                          .= userFollowing@@ -828,6 +825,7 @@                                  , "media"          .= enMedia                                  ] + -- | The character positions the Entity was extracted from -- --   This is experimental implementation.@@ -850,6 +848,65 @@     toJSON Entity{..} = case toJSON entityBody of                             (Object o) -> Object $ union o $ fromList [("indices"::Text, toJSON entityIndices)]                             _          -> error "Entity body must produce an object."++data ExtendedEntities =+  ExtendedEntities {+    exeMedia :: [Entity ExtendedEntity]+  } deriving (Show, Eq, Data, Typeable, Generic)++instance FromJSON ExtendedEntities where+  parseJSON (Object o) =+    ExtendedEntities <$> o .:? "media" .!= []++  parseJSON v = fail $ "couldn't parse extended entity from: " ++ show v++instance ToJSON ExtendedEntities where+    toJSON ExtendedEntities{..} = object [ "media" .= exeMedia ]+++-- Extended entities are like entities, but contain special media features like+-- video or multiple photos+data ExtendedEntity =+  ExtendedEntity+  {+    exeID :: StatusId,+    exeMediaUrl :: URIString,+    exeMediaUrlHttps :: URIString,+    exeSizes :: HashMap Text MediaSize,+    exeType :: Text,+    -- exeVideoInfo :: ???+    exeDurationMillis :: Maybe Double,+    -- exeVariants :: ??+    exeExtAltText :: Maybe String,+    exeURL :: URLEntity+  } deriving (Show, Eq, Data, Typeable, Generic)++instance FromJSON ExtendedEntity where+  parseJSON v@(Object o) =+    ExtendedEntity <$> o .:  "id"+                   <*> o .:  "media_url"+                   <*> o .:  "media_url_https"+                   <*> o .:  "sizes"+                   <*> o .:  "type"+                   <*> o .:? "duration_millis"+                   <*> o .:?  "ext_alt_text"+                   <*> parseJSON v++  parseJSON v = fail $ "couldn't parse extended entity from:" ++ show v++instance ToJSON ExtendedEntity where+  toJSON ExtendedEntity{..} = object [ "id"                .= exeID+                                     , "media_url"       .= exeMediaUrl+                                     , "media_url_https" .= exeMediaUrlHttps+                                     , "sizes"           .= exeSizes+                                     , "type"            .= exeType+                                     , "duration_millis" .= exeDurationMillis+                                     , "ext_alt_text"    .= exeExtAltText+                                     , "url"             .= ueURL exeURL+                                     , "expanded_url"    .= ueExpanded exeURL+                                     , "display_url"     .= ueDisplay exeURL+                                     ]+  data Contributor = Contributor     { contributorId :: UserId
tests/Instances.hs view
@@ -1,26 +1,19 @@ {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE CPP #-} {-# OPTIONS_GHC -fno-warn-orphans #-}  module Instances where -import Data.String import Control.Applicative+import Data.Aeson import Data.DeriveTH+import Data.HashMap.Strict as HashMap+import Data.String import qualified Data.Text as T+import Data.Time (UTCTime (..), readTime, fromGregorian, defaultTimeLocale) import Test.QuickCheck import Web.Twitter.Types-import Data.Aeson-import Data.HashMap.Strict as HashMap -#if MIN_VERSION_time(1,5,0)-import Data.Time (UTCTime (..), readTime, fromGregorian, defaultTimeLocale)-#else-import Data.Time (UTCTime (..), readTime, fromGregorian)-import System.Locale-#endif- instance IsString UTCTime where     fromString = readTime defaultTimeLocale twitterTimeFormat @@ -117,6 +110,19 @@  derive makeArbitrary ''BoundingBox derive makeArbitrary ''Entities+derive makeArbitrary ''ExtendedEntities+instance Arbitrary ExtendedEntity where+  arbitrary = do+    ms <- arbitrary+    ExtendedEntity+        <$> arbitrary+        <*> arbitrary+        <*> arbitrary+        <*> pure (HashMap.fromList [("medium", ms)])+        <*> arbitrary+        <*> arbitrary+        <*> arbitrary+        <*> arbitrary  instance Arbitrary a => Arbitrary (Entity a) where     arbitrary = do
tests/TypesTest.hs view
@@ -1,6 +1,5 @@ {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE CPP #-}  module Main where @@ -154,11 +153,12 @@     length (enMedia ent) @?= 1     map (meMediaURLHttps . entityBody) (enMedia ent) @?= ["https://pbs.twimg.com/media/BtDkUVaCQAIpWBU.jpg"] -    let exent = fromJust $ statusExtendedEntities obj-    enHashTags exent @?= []-    enUserMentions exent @?= []-    enURLs exent @?= []-    length (enMedia ent) @?= 1+    let exents = fromJust $ statusExtendedEntities obj+    let media = exeMedia exents+    length media @?= 1+    let exent = entityBody $ head media+    exeID exent @?= 491143397378244610+    ueURL (exeURL exent) @?= "http://t.co/FjSOU8dDoD"      statusInReplyToStatusId obj @?= Nothing     statusInReplyToUserId obj @?= Nothing@@ -319,12 +319,16 @@     let entities = statusExtendedEntities obj     assert $ isJust entities     let Just ent = entities-        media = enMedia ent+        media = exeMedia ent     length media @?= 4     let me = entityBody $ head media-    ueURL (meURL me) @?= "http://t.co/qOjPwmgLKO"-    meMediaURL me @?= "http://pbs.twimg.com/media/BqgdlpaCQAA5OSu.jpg"+    ueURL (exeURL me) @?= "https://t.co/Qi316FhOwe"+    exeMediaUrl me @?= "http://pbs.twimg.com/media/Coju86fUIAEUcRC.jpg"+    exeExtAltText me @?= Just "A small tabby kitten"+    exeType me @?= "photo" ++ case_parseUser :: Assertion case_parseUser = withJSON fixture_user_thimura $ \obj -> do     userId obj @?= 69179963@@ -338,7 +342,25 @@     userFollowersCount obj @?= 754     userFriendsCount obj @?= 780     userStatusesCount obj @?= 24709-    userLang obj @?= "en"+    userLang obj @?= Just "en"+    userCreatedAt obj @?= "Thu Aug 27 02:48:06 +0000 2009"+    userFavoritesCount obj @?= 17313++case_parseUserLangNull :: Assertion+case_parseUserLangNull = withJSON fixture_user_thimura_lang_null $ \obj -> do+    userId obj @?= 69179963+    userName obj @?= "ちむら"+    userScreenName obj @?= "thimura"+    userDescription obj @?= Just "真紅かわいい"+    userLocation obj @?= Just "State# Irotoridori.No.World"+    userProfileImageURL obj @?= Just "http://pbs.twimg.com/profile_images/414044387346116609/VNMfLpY7_normal.png"+    userURL obj @?= Just "http://t.co/TFUAsAffX0"+    userProtected obj @?= False+    userFollowersCount obj @?= 754+    userFriendsCount obj @?= 780+    userStatusesCount obj @?= 24709+    -- N.B. the only difference between this one and case_parseUser is in lang+    userLang obj @?= Nothing     userCreatedAt obj @?= "Thu Aug 27 02:48:06 +0000 2009"     userFavoritesCount obj @?= 17313 
tests/fixtures/media_extended_entity.json view
@@ -1,1 +1,1 @@-{"in_reply_to_status_id":null,"id_str":"479666034073296896","truncated":false,"possibly_sensitive":false,"in_reply_to_screen_name":null,"extended_entities":{"media":[{"id_str":"479665892922376192","expanded_url":"http://twitter.com/thimura_test/status/479666034073296896/photo/1","url":"http://t.co/qOjPwmgLKO","media_url_https":"https://pbs.twimg.com/media/BqgdlpaCQAA5OSu.jpg","indices":[36,58],"id":479665892922376192,"media_url":"http://pbs.twimg.com/media/BqgdlpaCQAA5OSu.jpg","type":"photo","sizes":{"small":{"w":340,"resize":"fit","h":604},"large":{"w":576,"resize":"fit","h":1024},"medium":{"w":576,"resize":"fit","h":1024},"thumb":{"w":150,"resize":"crop","h":150}},"display_url":"pic.twitter.com/qOjPwmgLKO"},{"id_str":"479665897150234624","expanded_url":"http://twitter.com/thimura_test/status/479666034073296896/photo/1","url":"http://t.co/qOjPwmgLKO","media_url_https":"https://pbs.twimg.com/media/Bqgdl5KCQAA9g9V.jpg","indices":[36,58],"id":479665897150234624,"media_url":"http://pbs.twimg.com/media/Bqgdl5KCQAA9g9V.jpg","type":"photo","sizes":{"small":{"w":339,"resize":"fit","h":191},"large":{"w":1024,"resize":"fit","h":576},"medium":{"w":599,"resize":"fit","h":337},"thumb":{"w":150,"resize":"crop","h":150}},"display_url":"pic.twitter.com/qOjPwmgLKO"},{"id_str":"479665901545852929","expanded_url":"http://twitter.com/thimura_test/status/479666034073296896/photo/1","url":"http://t.co/qOjPwmgLKO","media_url_https":"https://pbs.twimg.com/media/BqgdmJiCEAEp0EI.jpg","indices":[36,58],"id":479665901545852929,"media_url":"http://pbs.twimg.com/media/BqgdmJiCEAEp0EI.jpg","type":"photo","sizes":{"small":{"w":339,"resize":"fit","h":225},"large":{"w":1024,"resize":"fit","h":678},"medium":{"w":599,"resize":"fit","h":397},"thumb":{"w":150,"resize":"crop","h":150}},"display_url":"pic.twitter.com/qOjPwmgLKO"},{"id_str":"479665905375256576","expanded_url":"http://twitter.com/thimura_test/status/479666034073296896/photo/1","url":"http://t.co/qOjPwmgLKO","media_url_https":"https://pbs.twimg.com/media/BqgdmXzCIAAa2lU.jpg","indices":[36,58],"id":479665905375256576,"media_url":"http://pbs.twimg.com/media/BqgdmXzCIAAa2lU.jpg","type":"photo","sizes":{"small":{"w":339,"resize":"fit","h":225},"large":{"w":1024,"resize":"fit","h":678},"medium":{"w":599,"resize":"fit","h":397},"thumb":{"w":150,"resize":"crop","h":150}},"display_url":"pic.twitter.com/qOjPwmgLKO"}]},"entities":{"symbols":[],"urls":[],"media":[{"id_str":"479665892922376192","expanded_url":"http://twitter.com/thimura_test/status/479666034073296896/photo/1","url":"http://t.co/qOjPwmgLKO","media_url_https":"https://pbs.twimg.com/media/BqgdlpaCQAA5OSu.jpg","indices":[36,58],"id":479665892922376192,"media_url":"http://pbs.twimg.com/media/BqgdlpaCQAA5OSu.jpg","type":"photo","sizes":{"small":{"w":340,"resize":"fit","h":604},"large":{"w":576,"resize":"fit","h":1024},"medium":{"w":576,"resize":"fit","h":1024},"thumb":{"w":150,"resize":"crop","h":150}},"display_url":"pic.twitter.com/qOjPwmgLKO"}],"user_mentions":[],"hashtags":[{"text":"testnyan","indices":[26,35]}]},"text":"multiple image tweet test #testnyan http://t.co/qOjPwmgLKO","in_reply_to_user_id_str":null,"favorited":false,"coordinates":null,"retweeted":false,"user":{"screen_name":"thimura_test","is_translation_enabled":false,"default_profile":true,"profile_image_url":"http://abs.twimg.com/sticky/default_profile_images/default_profile_6_normal.png","default_profile_image":true,"id_str":"2418883074","profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme1/bg.png","protected":false,"location":"","entities":{"description":{"urls":[]}},"profile_background_color":"C0DEED","utc_offset":null,"url":null,"profile_text_color":"333333","profile_image_url_https":"https://abs.twimg.com/sticky/default_profile_images/default_profile_6_normal.png","verified":false,"statuses_count":5,"profile_background_tile":false,"following":false,"lang":"ja","follow_request_sent":false,"profile_sidebar_fill_color":"DDEEF6","time_zone":null,"name":"thimura test","profile_sidebar_border_color":"C0DEED","geo_enabled":false,"listed_count":0,"contributors_enabled":false,"created_at":"Sun Mar 30 11:47:17 +0000 2014","id":2418883074,"friends_count":2,"is_translator":false,"favourites_count":0,"notifications":false,"profile_background_image_url":"http://abs.twimg.com/images/themes/theme1/bg.png","profile_use_background_image":true,"description":"","profile_link_color":"0084B4","followers_count":2},"lang":"et","retweet_count":0,"in_reply_to_user_id":null,"created_at":"Thu Jun 19 16:44:28 +0000 2014","source":"\u003ca href=\"https://twitter.com/thimura\" rel=\"nofollow\"\u003e二階堂真紅\u003c/a\u003e","geo":null,"id":479666034073296896,"in_reply_to_status_id_str":null,"favorite_count":0,"contributors":null,"place":null}+{"created_at":"Fri Jul 29 20:14:40 +0000 2016","id":759119974329823200,"id_str":"759119974329823233","text":"look at all these cats tho https://t.co/Qi316FhOwe","truncated":false,"entities":{"hashtags":[],"symbols":[],"user_mentions":[],"urls":[],"media":[{"id":759119267472089100,"id_str":"759119267472089089","indices":[27,50],"media_url":"http://pbs.twimg.com/media/Coju86fUIAEUcRC.jpg","media_url_https":"https://pbs.twimg.com/media/Coju86fUIAEUcRC.jpg","url":"https://t.co/Qi316FhOwe","display_url":"pic.twitter.com/Qi316FhOwe","expanded_url":"http://twitter.com/PleaseCaption/status/759119974329823233/photo/1","type":"photo","sizes":{"large":{"w":300,"h":400,"resize":"fit"},"medium":{"w":300,"h":400,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"small":{"w":300,"h":400,"resize":"fit"}}}]},"extended_entities":{"media":[{"id":759119267472089100,"id_str":"759119267472089089","indices":[27,50],"media_url":"http://pbs.twimg.com/media/Coju86fUIAEUcRC.jpg","media_url_https":"https://pbs.twimg.com/media/Coju86fUIAEUcRC.jpg","url":"https://t.co/Qi316FhOwe","display_url":"pic.twitter.com/Qi316FhOwe","expanded_url":"http://twitter.com/PleaseCaption/status/759119974329823233/photo/1","type":"photo","sizes":{"large":{"w":300,"h":400,"resize":"fit"},"medium":{"w":300,"h":400,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"small":{"w":300,"h":400,"resize":"fit"}},"ext_alt_text":"A small tabby kitten"},{"id":759119396350505000,"id_str":"759119396350504960","indices":[27,50],"media_url":"http://pbs.twimg.com/media/CojvEamUsAARiX2.jpg","media_url_https":"https://pbs.twimg.com/media/CojvEamUsAARiX2.jpg","url":"https://t.co/Qi316FhOwe","display_url":"pic.twitter.com/Qi316FhOwe","expanded_url":"http://twitter.com/PleaseCaption/status/759119974329823233/photo/1","type":"photo","sizes":{"medium":{"w":500,"h":301,"resize":"fit"},"small":{"w":500,"h":301,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"large":{"w":500,"h":301,"resize":"fit"}},"ext_alt_text":"four kittens sitting together"},{"id":759119476621086700,"id_str":"759119476621086720","indices":[27,50],"media_url":"http://pbs.twimg.com/media/CojvJFoUkAAoWIR.jpg","media_url_https":"https://pbs.twimg.com/media/CojvJFoUkAAoWIR.jpg","url":"https://t.co/Qi316FhOwe","display_url":"pic.twitter.com/Qi316FhOwe","expanded_url":"http://twitter.com/PleaseCaption/status/759119974329823233/photo/1","type":"photo","sizes":{"thumb":{"w":150,"h":150,"resize":"crop"},"large":{"w":500,"h":600,"resize":"fit"},"medium":{"w":500,"h":600,"resize":"fit"},"small":{"w":500,"h":600,"resize":"fit"}},"ext_alt_text":"a cute soft kitten with a red ornament"},{"id":759119583466758100,"id_str":"759119583466758145","indices":[27,50],"media_url":"http://pbs.twimg.com/media/CojvPTqUIAEYF7l.jpg","media_url_https":"https://pbs.twimg.com/media/CojvPTqUIAEYF7l.jpg","url":"https://t.co/Qi316FhOwe","display_url":"pic.twitter.com/Qi316FhOwe","expanded_url":"http://twitter.com/PleaseCaption/status/759119974329823233/photo/1","type":"photo","sizes":{"medium":{"w":650,"h":600,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"small":{"w":650,"h":600,"resize":"fit"},"large":{"w":650,"h":600,"resize":"fit"}},"ext_alt_text":"a skeptical-looking tabby cat outside"}]},"source":"<a href=\"http://twitter.com\" rel=\"nofollow\">Twitter Web Client</a>","in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":753372895682949100,"id_str":"753372895682949120","name":"Please Caption!","screen_name":"PleaseCaption","location":"","description":"","url":null,"entities":{"description":{"urls":[]}},"protected":false,"followers_count":0,"friends_count":1,"listed_count":0,"created_at":"Wed Jul 13 23:37:50 +0000 2016","favourites_count":0,"utc_offset":-25200,"time_zone":"Pacific Time (US & Canada)","geo_enabled":false,"verified":false,"statuses_count":7,"lang":"en-gb","contributors_enabled":false,"is_translator":false,"is_translation_enabled":false,"profile_background_color":"F5F8FA","profile_background_image_url":null,"profile_background_image_url_https":null,"profile_background_tile":false,"profile_image_url":"http://abs.twimg.com/sticky/default_profile_images/default_profile_5_normal.png","profile_image_url_https":"https://abs.twimg.com/sticky/default_profile_images/default_profile_5_normal.png","profile_link_color":"2B7BB9","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"has_extended_profile":false,"default_profile":true,"default_profile_image":true,"following":false,"follow_request_sent":false,"notifications":false},"geo":null,"coordinates":null,"place":null,"contributors":null,"is_quote_status":false,"retweet_count":0,"favorite_count":0,"favorited":false,"retweeted":false,"possibly_sensitive":false,"possibly_sensitive_appealable":false,"lang":"en"}
+ tests/fixtures/user_thimura_lang_null.json view
@@ -0,0 +1,1 @@+{"screen_name":"thimura","profile_banner_url":"https://pbs.twimg.com/profile_banners/69179963/1402419439","status":{"in_reply_to_status_id":null,"id_str":"495192122836783104","truncated":false,"in_reply_to_screen_name":null,"entities":{"symbols":[],"urls":[],"user_mentions":[],"hashtags":[]},"text":"くそあつい","in_reply_to_user_id_str":null,"favorited":false,"coordinates":null,"retweeted":false,"lang":null,"retweet_count":0,"in_reply_to_user_id":null,"created_at":"Fri Aug 01 12:59:36 +0000 2014","source":"\u003ca href=\"http://twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c/a\u003e","geo":null,"id":495192122836783104,"in_reply_to_status_id_str":null,"favorite_count":0,"contributors":null,"place":null},"is_translation_enabled":false,"needs_phone_verification":false,"default_profile":false,"profile_image_url":"http://pbs.twimg.com/profile_images/414044387346116609/VNMfLpY7_normal.png","default_profile_image":false,"id_str":"69179963","profile_background_image_url_https":"https://pbs.twimg.com/profile_background_images/378800000154132099/hn0DlU5i.png","protected":false,"location":"State# Irotoridori.No.World","entities":{"url":{"urls":[{"expanded_url":"http://d.hatena.ne.jp/thimura","url":"http://t.co/TFUAsAffX0","indices":[0,22],"display_url":"d.hatena.ne.jp/thimura"}]},"description":{"urls":[]}},"profile_background_color":"000000","utc_offset":32400,"url":"http://t.co/TFUAsAffX0","profile_text_color":"333333","profile_image_url_https":"https://pbs.twimg.com/profile_images/414044387346116609/VNMfLpY7_normal.png","suspended":false,"verified":false,"statuses_count":24709,"profile_background_tile":true,"following":false,"lang":"en","follow_request_sent":false,"profile_sidebar_fill_color":"BABDD1","time_zone":"Tokyo","name":"ちむら","profile_sidebar_border_color":"FFFFFF","geo_enabled":false,"listed_count":102,"contributors_enabled":false,"created_at":"Thu Aug 27 02:48:06 +0000 2009","id":69179963,"friends_count":780,"is_translator":false,"favourites_count":17313,"notifications":false,"profile_background_image_url":"http://pbs.twimg.com/profile_background_images/378800000154132099/hn0DlU5i.png","profile_use_background_image":true,"description":"真紅かわいい","profile_link_color":"00660F","followers_count":754}
twitter-types.cabal view
@@ -1,17 +1,19 @@ name:              twitter-types-version:           0.7.2.2+version:           0.8.0 license:           BSD3 license-file:      LICENSE author:            Takahiro HIMURA maintainer:        Takahiro HIMURA <taka@himura.jp> synopsis:          Twitter JSON parser and types-description:       This package uses enumerator package for access Twitter API.+description:       Please see the README on Github at <https://github.com/himura/twitter-types#readme> category:          Web stability:         Experimental-cabal-version:     >= 1.8 build-type:        Simple+cabal-version:     >= 1.10 homepage:          https://github.com/himura/twitter-types +tested-with:       GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.5+ extra-source-files:   README.md   tests/fixtures/*.json@@ -20,58 +22,46 @@   type: git   location: git://github.com/himura/twitter-types.git -flag time15-  description: use time >= 1.5.-  default: True- library   ghc-options: -Wall    build-depends:-      base >= 4 && < 5+      base >= 4.9 && < 5     , aeson >= 0.3.2.2     , text+    , time >= 1.5     , unordered-containers -  if flag(time15)-    build-depends:-        time >= 1.5-  else-    build-depends:-        time >= 1.2 && < 1.5-      , old-locale--  if impl(ghc < 7.6)-    build-depends: ghc-prim-   exposed-modules:     Web.Twitter.Types +  default-language:    Haskell2010+ test-suite tests   type:              exitcode-stdio-1.0   hs-source-dirs:    tests   main-is:           TypesTest.hs   build-depends:-      base >= 4.0 && < 5-    , template-haskell-    , test-framework >= 0.3.3-    , test-framework-hunit-    , test-framework-quickcheck2+      base >= 4.9 && < 5+    , twitter-types     , HUnit     , QuickCheck-    , derive     , aeson     , attoparsec     , bytestring+    , derive+    , directory+    , filepath+    , template-haskell+    , test-framework >= 0.3.3+    , test-framework-hunit+    , test-framework-quickcheck2     , text     , time     , unordered-containers-    , filepath-    , directory-    , twitter-types-    , old-locale   other-modules:     Fixtures     Instances    ghc-options:       -Wall+  default-language:    Haskell2010