twitter-conduit 0.0.1 → 0.0.2
raw patch · 4 files changed
+167/−12 lines, 4 files
Files
- Web/Twitter/Conduit.hs +163/−9
- Web/Twitter/Conduit/Base.hs +1/−0
- Web/Twitter/Conduit/Monad.hs +2/−2
- twitter-conduit.cabal +1/−1
Web/Twitter/Conduit.hs view
@@ -1,12 +1,166 @@+{-# LANGUAGE CPP #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-}++-- |+-- Module: Web.Twitter.Conduit+-- Copyright: (c) 2014 Takahiro Himura+-- License: BSD+-- Maintainer: Takahiro Himura <taka@himura.jp>+-- Stability: experimental+-- Portability: portable+--+-- A client library for Twitter APIs (see <https://dev.twitter.com/>).+ module Web.Twitter.Conduit- ( module Export+ (+ -- * How to use this library+ -- $howto++ -- * Re-exports+ module Web.Twitter.Conduit.Base+ , module Web.Twitter.Conduit.Api+ , module Web.Twitter.Conduit.Status+ , module Web.Twitter.Conduit.Monad+ , module Web.Twitter.Conduit.Stream+ , module Web.Twitter.Conduit.Request+ , module Web.Twitter.Conduit.Parameters+ , module Web.Twitter.Types.Lens ) where -import Web.Twitter.Conduit.Base as Export-import Web.Twitter.Conduit.Api as Export-import Web.Twitter.Conduit.Status as Export-import Web.Twitter.Conduit.Monad as Export-import Web.Twitter.Conduit.Stream as Export-import Web.Twitter.Conduit.Request as Export-import Web.Twitter.Conduit.Parameters as Export-import Web.Twitter.Types.Lens as Export+import Web.Twitter.Conduit.Base+import Web.Twitter.Conduit.Api+import Web.Twitter.Conduit.Status+import Web.Twitter.Conduit.Monad+import Web.Twitter.Conduit.Stream+import Web.Twitter.Conduit.Request+import Web.Twitter.Conduit.Parameters+import Web.Twitter.Types.Lens++-- for haddock+import Web.Authenticate.OAuth+import Data.Conduit+import qualified Data.Conduit.List as CL+import qualified Data.Text as T+import qualified Data.Text.IO as T+import Control.Monad.Logger+import Control.Monad.IO.Class+import Control.Lens++#ifdef HLINT+{-# ANN module "HLint: ignore Use import/export shortcut" #-}+#endif++-- $howto+--+-- The main module of twitter-conduit is "Web.Twitter.Conduit".+-- This library cooperate with <http://hackage.haskell.org/package/twitter-types twitter-types>,+-- <http://hackage.haskell.org/package/authenticate-oauth authenticate-oauth>,+-- and <http://hackage.haskell.org/package/conduit conduit>.+-- All of following examples import modules as below:+--+-- > {-# LANGUAGE OverloadedStrings #-}+-- >+-- > import Web.Twitter.Conduit+-- > import Web.Authenticate.OAuth+-- > import Data.Conduit+-- > import qualified Data.Conduit.List as CL+-- > import qualified Data.Text as T+-- > import qualified Data.Text.IO as T+-- > import Control.Monad.Logger+-- > import Control.Monad.IO.Class+-- > import Control.Lens+--+-- First, you should obtain consumer token and secret from <https://apps.twitter.com/ Twitter>,+-- and prepare 'OAuth' variables as follows:+--+-- @+-- tokens :: 'OAuth'+-- tokens = 'twitterOAuth'+-- { 'oauthConsumerKey' = \"YOUR CONSUMER KEY\"+-- , 'oauthConsumerSecret' = \"YOUR CONSUMER SECRET\"+-- }+-- @+--+-- Second, you should obtain access token and secret.+-- You can find examples obtaining those tokens in+-- <https://github.com/himura/twitter-conduit/blob/master/sample sample directry>,+-- for instance,+-- <https://github.com/himura/twitter-conduit/blob/master/sample/oauth_pin.hs oauth_pin.hs>, and+-- <https://github.com/himura/twitter-conduit/blob/master/sample/oauth_callback.hs oauth_callback.hs>.+-- If you need more information, see <https://dev.twitter.com/docs/auth/obtaining-access-tokens>.+--+-- You should set an access token to 'Credential' variable:+--+-- @+-- credential :: 'Credential'+-- credential = 'Credential'+-- [ (\"oauth_token\", \"YOUR ACCESS TOKEN\")+-- , (\"oauth_token_secret\", \"YOUR ACCESS TOKEN SECRET\")+-- ]+-- @+--+-- You should also set up the 'TWToken' and 'TWInfo' variables as below:+--+-- @+-- twInfo :: 'TWInfo'+-- twInfo = 'def'+-- { 'twToken' = 'def' { 'twOAuth' = tokens, 'twCredential' = credential }+-- , 'twProxy' = Nothing+-- }+-- @+--+-- Or, simply as follows:+--+-- > twInfo = setCredential tokens credential def+--+-- Every twitter API functions are run in the 'TW' monad.+-- By using 'runTW' function, you can perform computation in 'TW' monad.+--+-- Twitter API requests are performed by 'call' function.+-- For example, <https://dev.twitter.com/docs/api/1.1/get/statuses/home_timeline GET statuses/home_timeline>+-- could be obtained by:+--+-- @+-- timeline <- 'call' 'homeTimeline'+-- @+--+-- The response of 'call' function is wrapped by the suitable type of+-- <http://hackage.haskell.org/package/twitter-types twitter-types>.+-- In this case, /timeline/ has a type of ['Status'].+-- If you need /raw/ JSON Value which is parsed by <http://hackage.haskell.org/package/aeson aeson>,+-- use 'call'' to obtain it.+--+-- By default, the response of <https://dev.twitter.com/docs/api/1.1/get/statuses/home_timeline GET statuses/home_timeline>+-- includes 20 tweets, and you can change the number of tweets by the /count/ parameter.+--+-- @+-- timeline <- 'call' '$' 'homeTimeline' '&' 'count' '?~' 200+-- @+--+-- If you need more statuses, you can obtain those with multiple API requests.+-- This library provides the wrapper for multiple requests with conduit interfaces.+-- For example, if you intend to fetch the all friends information,+-- you may perform multiple API requests with changing cursor parameter,+-- or use the conduit wrapper 'sourceWithCursor' as below:+--+-- @+-- friends <- 'sourceWithCursor' ('friendsList' ('ScreenNameParam' \"thimura\") '&' 'count' '?~' 200) '$$' 'CL.consume'+-- @+--+-- Statuses APIs, for instance, 'homeTimeline', are also wrapped by 'sourceWithMaxId'.+--+-- For example, you can print 1000 tweets from your home timeline, as below:+--+-- @+-- main :: IO ()+-- main = runNoLoggingT . runTW twInfo $ do+-- 'sourceWithMaxId' 'homeTimeline'+-- $= CL.isolate 60+-- $$ CL.mapM_ $ \status -> liftIO $ do+-- T.putStrLn $ T.concat [ T.pack . show $ status ^. statusId+-- , ": "+-- , status ^. statusUser . userScreenName+-- , ": "+-- , status ^. statusText+-- ]+-- @
Web/Twitter/Conduit/Base.hs view
@@ -14,6 +14,7 @@ ( api , apiRequest , call+ , call' , sourceWithMaxId , sourceWithCursor , TwitterBaseM
Web/Twitter/Conduit/Monad.hs view
@@ -32,14 +32,14 @@ data TWToken = TWToken { twOAuth :: OAuth , twCredential :: Credential- }+ } deriving Show instance Default TWToken where def = TWToken twitterOAuth (Credential []) data TWInfo = TWInfo { twToken :: TWToken , twProxy :: Maybe Proxy- }+ } deriving Show instance Default TWInfo where def = TWInfo { twToken = def
twitter-conduit.cabal view
@@ -1,5 +1,5 @@ name: twitter-conduit-version: 0.0.1+version: 0.0.2 license: BSD3 license-file: LICENSE author: HATTORI Hiroki, Hideyuki Tanaka, Takahiro HIMURA