-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Haskell interface for antigate.com captcha recognition service and services supporting its API -- -- Haskell interface for antigate.com captcha recognition service and -- other services (e.g. captchabot, decaptcher) @package antigate @version 0.5 -- | Example: -- --
-- {-# LANGUAGE OverloadedStrings #-}
-- import Text.Recognition.Antigate
-- import Data.Default
-- import Network
-- import Control.Monad
-- import Control.Monad.IO.Class
-- import Data.ByteString.Lazy hiding (putStrLn)
-- import System.Timeout
--
-- myApiKey :: ApiKey
-- myApiKey = "0123456789abcdef0123456789abcdef"{api_host="antigate.com"}
--
-- downloadJpegCaptcha :: Manager -> IO ByteString
-- downloadJpegCaptcha = undefined
--
-- answerCaptcha :: String -> Manager -> IO Bool
-- answerCaptcha = undefined
--
-- main :: IO ()
-- main = withSocketsDo $ do
-- res <- timeout (30*1000000) $ withManager $ \m -> do
-- bytes <- liftIO $ downloadJpegCaptcha m
-- (id, answer) <- solveCaptcha def myApiKey def{phrase=True} "captcha.jpg" bytes m
-- res <- liftIO $ answerCaptcha answer m
-- unless res $ reportBad myApiKey id m
-- return res
-- case res of
-- Nothing -> do
-- putStrLn "Timed out"
-- Just True -> do
-- putStrLn "Solved successfully"
-- Just False -> do
-- putStrLn "Couldn't solve"
--
module Text.Recognition.Antigate
-- | Antigate API access key paired with service provider's host. At least
-- these services claim to support Antigate API: Antigate, Captchabot,
-- Decaptcher, ExpertDecoders, ImageTyperz, DeathByCaptcha and Pixodrom.
data ApiKey
-- | This is a record selector
api_key :: ApiKey -> String
-- | default: "antigate.com". This is a record selector
api_host :: ApiKey -> String
type CaptchaID = Int
-- | Properties of the captcha to be solved. See
-- http://antigate.com/panel.php?action=api
data CaptchaConf
CaptchaConf :: Bool -> Bool -> Maybe Bool -> Bool -> Word -> Word -> Bool -> Maybe Double -> CaptchaConf
-- |
phrase :: CaptchaConf -> Bool
-- |
regsense :: CaptchaConf -> Bool
-- | -- api_counter = \phase count -> do -- if count == 0 -- then putStrLn $ show phase ++ " began" -- else putStrLn $ show phase ++ " retries: " ++ show count ---- -- Default: _ _ -> return () api_counter :: SolveConf -> Phase -> Int -> IO () -- | This will be called when upload phase finishes api_upload_callback :: SolveConf -> CaptchaID -> IO () data Phase UploadPhase :: Phase CheckPhase :: Phase -- | High level function to solve captcha, blocks until answer is provided -- (about 2-10 seconds). -- -- throws SolveException or HttpException when something -- goes wrong. solveCaptcha :: MonadResource m => SolveConf -> ApiKey -> CaptchaConf -> FilePath -> ByteString -> Manager -> m (CaptchaID, String) solveCaptchaFromFile :: (MonadBaseControl IO m, MonadResource m) => SolveConf -> ApiKey -> CaptchaConf -> FilePath -> Manager -> m (CaptchaID, String) -- | upload captcha for recognition -- -- throws HttpException on network errors. uploadCaptcha :: MonadResource m => ApiKey -> CaptchaConf -> FilePath -> ByteString -> Manager -> m (ApiResult CaptchaID) uploadCaptchaFromFile :: MonadResource m => ApiKey -> CaptchaConf -> FilePath -> Manager -> m (ApiResult CaptchaID) -- | retrieve captcha status -- -- throws HttpException on network errors. checkCaptcha :: MonadResource m => ApiKey -> CaptchaID -> Manager -> m (ApiResult String) -- | retrieve multiple captcha status -- -- throws HttpException on network errors. checkCaptchas :: MonadResource m => ApiKey -> [CaptchaID] -> Manager -> m [ApiResult String] -- | report bad captcha result -- -- throws HttpException on network errors. reportBad :: MonadResource m => ApiKey -> CaptchaID -> Manager -> m Bool -- | retrieve your current account balance -- -- throws HttpException on network errors. getBalance :: MonadResource m => ApiKey -> Manager -> m Double -- | Keeps track of open connections for keep-alive. If possible, you -- should share a single Manager between multiple threads and -- requests. data Manager :: * -- | Create a Manager. You must manually call closeManager to -- shut it down. -- -- Creating a new Manager is an expensive operation, you are -- advised to share a single Manager between requests instead. newManager :: ManagerSettings -> IO Manager -- | Close all connections in a Manager. Afterwards, the -- Manager can be reused if desired. closeManager :: Manager -> IO () -- | Create a new manager, use it in the provided function, and then -- release it. -- -- This function uses the default manager settings. For more control, use -- withManagerSettings. withManager :: (MonadIO m, MonadBaseControl IO m, MonadThrow m, MonadUnsafeIO m) => (Manager -> ResourceT m a) -> m a -- | Parse antigate's upload response parseUploadResponse :: String -> ApiResult CaptchaID -- | Parse antigate's check response parseCheckResponse :: String -> ApiResult String -- | Parse antigate's multi-check response parseMultiCheckResponse :: String -> ApiResult String -- | Parse antigate's multi-check response parseMultiCheckResponses :: String -> [ApiResult String] -- | Marshal ApiResult back to its text form renderApiResult :: ApiResult String -> String instance Typeable SolveException instance Eq ApiKey instance Ord ApiKey instance Show ApiKey instance Read ApiKey instance Show CaptchaConf instance Read CaptchaConf instance Show a => Show (ApiResult a) instance Read a => Read (ApiResult a) instance Eq a => Eq (ApiResult a) instance Functor ApiResult instance Show SolveException instance Show Phase instance Read Phase instance Eq Phase instance Ord Phase instance Enum Phase instance Bounded Phase instance Show SolveConf instance Default SolveConf instance Exception SolveException instance Default CaptchaConf instance IsString ApiKey instance Default ApiKey