packages feed

twitter-enumerator 0.0.1.2 → 0.0.2

raw patch · 7 files changed

+100/−41 lines, 7 filesdep +transformersdep −mtlPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: transformers

Dependencies removed: mtl

API changes (from Hackage documentation)

- Web.Twitter.Enumerator.Fetch: api :: String -> Query -> Iteratee ByteString IO a -> Iteratee ByteString TW a
+ Web.Twitter.Enumerator.Api: api :: ByteString -> String -> Query -> Iteratee ByteString IO a -> Iteratee ByteString TW a
+ Web.Twitter.Enumerator.Api: endpoint :: String
+ Web.Twitter.Enumerator.Post: statusesUpdate :: ByteString -> Iteratee ByteString IO a -> Iteratee ByteString TW a

Files

Web/Twitter/Enumerator.hs view
@@ -2,9 +2,11 @@        ( module Web.Twitter.Enumerator.Types        , module Web.Twitter.Enumerator.Monad        , module Web.Twitter.Enumerator.Fetch+       , module Web.Twitter.Enumerator.Post        )        where  import Web.Twitter.Enumerator.Types import Web.Twitter.Enumerator.Monad import Web.Twitter.Enumerator.Fetch+import Web.Twitter.Enumerator.Post
+ Web/Twitter/Enumerator/Api.hs view
@@ -0,0 +1,50 @@+module Web.Twitter.Enumerator.Api+       ( api+       , endpoint+       ) where++import Web.Twitter.Enumerator.Types+import Web.Twitter.Enumerator.Monad++import Network.HTTP.Enumerator+import qualified Network.HTTP.Types as HT+import Data.Enumerator (Iteratee, throwError, liftTrans)++import Data.ByteString (ByteString)++import Control.Monad.Trans.Class+import Control.Monad.IO.Class (MonadIO (liftIO))++endpoint :: String+endpoint = "https://api.twitter.com/1/"++api :: ByteString -- ^ HTTP request method (GET or POST)+    -> String -- ^ API Resource URL+    -> HT.Query -- ^ Query+    -> Iteratee ByteString IO a+    -> Iteratee ByteString TW a+api m url query iter = do+  req <- lift $ apiRequest m url query+  httpMgr req (handleError iter)+  where+    handleError iter' st@(HT.Status sc _) _ =+      if 200 <= sc && sc < 300+      then iter'+      else throwError $ HTTPStatusCodeException st++httpMgr :: Request IO+        -> (HT.Status+            -> HT.ResponseHeaders+            -> Iteratee ByteString IO a)+        -> Iteratee ByteString TW a+httpMgr req iterf = do+  mgr <- lift getManager+  liftTrans $ http req iterf mgr+++apiRequest :: ByteString -> String -> HT.Query -> TW (Request IO)+apiRequest m uri query = do+  p <- getProxy+  req <- liftIO $ parseUrl uri >>= \r ->+    return $ r { method = m, queryString = query, proxy = p }+  signOAuthTW req
Web/Twitter/Enumerator/Fetch.hs view
@@ -1,8 +1,7 @@ {-# LANGUAGE OverloadedStrings #-}  module Web.Twitter.Enumerator.Fetch-       ( api-       , QueryUser(..)+       ( QueryUser(..)        , QueryList(..)         -- * Timelines@@ -77,11 +76,11 @@ import Web.Twitter.Enumerator.Types import Web.Twitter.Enumerator.Monad import Web.Twitter.Enumerator.Utils+import Web.Twitter.Enumerator.Api  import Data.Aeson hiding (Error) import qualified Data.Aeson.Types as AE -import Network.HTTP.Enumerator import qualified Network.HTTP.Types as HT import Data.Enumerator hiding (map, filter, drop, span, iterate) import qualified Data.Enumerator.List as EL@@ -89,7 +88,8 @@ import qualified Data.Text as T import Data.ByteString (ByteString) import qualified Data.ByteString.Char8 as B8-import Control.Monad.Trans+import Control.Monad.Trans.Class+import Control.Monad.IO.Class (MonadIO (liftIO)) import Control.Applicative  import qualified Data.Map as M@@ -99,36 +99,9 @@ data QueryList = QListId Integer | QListName String                deriving (Show, Eq) -endpoint :: String-endpoint = "https://api.twitter.com/1/" -api :: String -> HT.Query -> Iteratee ByteString IO a -> Iteratee ByteString TW a-api url query iter = do-  req <- lift $ apiRequest url query-  httpMgr req (handleError iter)-  where-    handleError iter' st@(HT.Status sc _) _ =-      if 200 <= sc && sc < 300-      then iter'-      else throwError $ HTTPStatusCodeException st--httpMgr :: Request IO-        -> (HT.Status-            -> HT.ResponseHeaders-            -> Iteratee ByteString IO a)-        -> Iteratee ByteString TW a-httpMgr req iterf = do-  mgr <- lift getManager-  liftTrans $ http req iterf mgr--apiRequest :: String -> HT.Query -> TW (Request IO)-apiRequest uri query = do-  p <- getProxy-  req <- liftIO $ parseUrl uri >>= \r -> return $ r { queryString = query, proxy = p }-  signOAuthTW req- apiGet :: FromJSON a => String -> HT.Query -> Iteratee a IO b -> TW b-apiGet uri query iter = run_ $ api uri query (handleParseError iter')+apiGet uri query iter = run_ $ api "GET" uri query (handleParseError iter')   where iter' = enumJSON =$ EL.map fromJSON' =$ skipNothing =$ iter  statuses :: (FromJSON a, Show a) => String -> HT.Query -> Enumerator a TW b@@ -141,7 +114,7 @@   where     go loop page k = do       let query' = insertQuery "page" (toMaybeByteString page) query-      res <- lift $ run_ $ api uri query' (handleParseError (enumJSON =$ iterPageC))+      res <- lift $ run_ $ api "GET" uri query' (handleParseError (enumJSON =$ iterPageC))       case res of         Just [] -> k EOF         Just xs -> k (Chunks xs) >>== loop (page + 1)@@ -269,7 +242,7 @@   where     go loop cursor k = do       let query' = insertQuery "cursor" (toMaybeByteString cursor) query-      res <- lift $ run_ $ api uri query' (iterCursor cursorKey)+      res <- lift $ run_ $ api "GET" uri query' (iterCursor cursorKey)       case res of         Just r -> do           let nextCur = cursorNext r@@ -286,10 +259,10 @@ apiIter iter = enumLine =$ handleParseError (enumJSON =$ EL.map fromJSON' =$ skipNothing =$ iter)  userstream :: Iteratee StreamingAPI IO a -> Iteratee ByteString TW a-userstream = api "https://userstream.twitter.com/2/user.json" [] . apiIter+userstream = api "GET" "https://userstream.twitter.com/2/user.json" [] . apiIter  statusesFilter :: HT.Query -> Iteratee StreamingAPI IO a -> Iteratee ByteString TW a-statusesFilter query = api "https://stream.twitter.com/1/statuses/filter.json" query . apiIter+statusesFilter query = api "GET" "https://stream.twitter.com/1/statuses/filter.json" query . apiIter  toMaybeByteString :: Show a => a -> Maybe ByteString toMaybeByteString = Just . B8.pack . show
Web/Twitter/Enumerator/Monad.hs view
@@ -14,7 +14,8 @@  import Web.Authenticate.OAuth import Network.HTTP.Enumerator-import Control.Monad.Reader+import Control.Monad.Trans.Reader+import Control.Monad.IO.Class (MonadIO (liftIO))  type TW = ReaderT TWEnv IO 
+ Web/Twitter/Enumerator/Post.hs view
@@ -0,0 +1,31 @@+{-# LANGUAGE OverloadedStrings #-}++module Web.Twitter.Enumerator.Post+       ( statusesUpdate++         -- * Friendship+         -- , friendshipCreate+         -- , friendshipDestroy++         -- * Favorites+         -- , favoritesCreate+         -- , favoritesDestroy++         -- * Lists+         -- , listsCreate+         -- , listsDestroy+         -- , listsUpdate+         -- , listsMembersCreate+         -- , listsMembersDestroy+       )+       where++import Web.Twitter.Enumerator.Monad+import Web.Twitter.Enumerator.Api++import Data.ByteString (ByteString)++import Data.Enumerator (Iteratee)++statusesUpdate :: ByteString -> Iteratee ByteString IO a -> Iteratee ByteString TW a+statusesUpdate tweet iter = api "POST" (endpoint ++ "statuses/update.json") [("status", Just tweet)] iter
Web/Twitter/Enumerator/Utils.hs view
@@ -15,7 +15,7 @@ import qualified Data.Enumerator.Binary as EB import Data.ByteString (ByteString) import Data.Maybe-import Control.Monad.Trans+import Control.Monad.IO.Class (MonadIO (liftIO))  enumLine :: Monad m => E.Enumeratee ByteString ByteString m a enumLine = EB.splitWhen newline
twitter-enumerator.cabal view
@@ -1,5 +1,5 @@ name:              twitter-enumerator-version:           0.0.1.2+version:           0.0.2 license:           BSD3 license-file:      LICENSE author:            Takahiro HIMURA@@ -19,14 +19,14 @@ source-repository this   type: git   location: git://github.com/himura/twitter-enumerator.git-  tag: 0.0.1.1+  tag: 0.0.2  library   ghc-options: -Wall    build-depends:       base >= 4 && < 5-    , mtl+    , transformers >= 0.2 && < 0.3     , authenticate >= 0.9 && < 0.11     , enumerator >= 0.4.14 && < 0.5     , http-types@@ -42,7 +42,9 @@     Web.Twitter.Enumerator     Web.Twitter.Enumerator.Types     Web.Twitter.Enumerator.Monad+    Web.Twitter.Enumerator.Api     Web.Twitter.Enumerator.Fetch+    Web.Twitter.Enumerator.Post    other-modules:     Web.Twitter.Enumerator.Utils