-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Interface for antigate.com captcha recognition service. -- -- Interface for antigate.com captcha recognition service. @package antigate @version 0.2.1 -- | Example: -- --
--   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
--   
--   myAntigateKey :: String
--   myAntigateKey = "0123456789abcdef0123456789abcdef"
--   
--   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 (3*1000000) (3*1000000) myAntigateKey def{phrase=True} "captcha.jpg" bytes m
--           res <- liftIO $ answerCaptcha answer m
--           unless res $ reportBad myAntigateKey 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 type AntigateKey = String type CaptchaID = Int -- | 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 -- | numeric :: CaptchaConf -> Maybe Bool -- | calc :: CaptchaConf -> Bool -- | min_len :: CaptchaConf -> Word -- | max_len :: CaptchaConf -> Word -- | is_russian :: CaptchaConf -> Bool -- | Default value is set on bids page. This parameter allows to -- control maximum bid without setting it on the bids page. max_bid :: CaptchaConf -> Maybe Double data UploadResult -- | result is positive, your captcha is accepted for recognition and its -- ID follows. You may now attempt to retrieve captcha status with this -- ID. UPLOAD_OK :: CaptchaID -> UploadResult -- | user authorization key is invalid (its length is not 32 bytes as it -- should be) ERROR_WRONG_USER_KEY :: UploadResult -- | you have set wrong user authorization key in request UPLOAD_ERROR_KEY_DOES_NOT_EXIST :: UploadResult -- | account has zero or negative balance ERROR_ZERO_BALANCE :: UploadResult -- | no idle captcha workers are available at the moment, please try a bit -- later or try increasing your bid ERROR_NO_SLOT_AVAILABLE :: UploadResult -- | the size of the captcha you are uploading or pointing to is zero ERROR_ZERO_CAPTCHA_FILESIZE :: UploadResult -- | your captcha size is exceeding 100kb limit ERROR_TOO_BIG_CAPTCHA_FILESIZE :: UploadResult -- | your captcha file has wrong extension, the only allowed extensions are -- gif,jpg,jpeg,png ERROR_WRONG_FILE_EXTENSION :: UploadResult -- | Could not determine captcha file type, only allowed formats are JPG, -- GIF, PNG ERROR_IMAGE_TYPE_NOT_SUPPORTED :: UploadResult -- | Request with current account key is not allowed from your IP. Please -- refer to IP list section ERROR_IP_NOT_ALLOWED :: UploadResult UPLOAD_ERROR_UNKNOWN :: String -> UploadResult data CheckResult -- | the captcha is recognized, the guessed text follows CHECK_OK :: String -> CheckResult -- | captcha is not recognized yet, repeat request withing 1-5 seconds CAPCHA_NOT_READY :: CheckResult -- | you have set wrong user authorization key in request CHECK_ERROR_KEY_DOES_NOT_EXIST :: CheckResult -- | the captcha ID you are sending is non-numeric ERROR_WRONG_ID_FORMAT :: CheckResult CHECK_ERROR_UNKNOWN :: String -> CheckResult data SolveException SolveExceptionUpload :: UploadResult -> SolveException SolveExceptionCheck :: CaptchaID -> CheckResult -> SolveException -- | 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 => Int -> Int -> AntigateKey -> CaptchaConf -> FilePath -> ByteString -> Manager -> m (CaptchaID, String) solveCaptchaFromFile :: (MonadBaseControl IO m, MonadResource m) => Int -> Int -> AntigateKey -> CaptchaConf -> FilePath -> Manager -> m (CaptchaID, String) -- | upload captcha for recognition -- -- throws HttpException on network errors. uploadCaptcha :: MonadResource m => AntigateKey -> CaptchaConf -> FilePath -> ByteString -> Manager -> m UploadResult uploadCaptchaFromFile :: MonadResource m => AntigateKey -> CaptchaConf -> FilePath -> Manager -> m UploadResult -- | retrieve captcha status -- -- throws HttpException on network errors. checkCaptcha :: MonadResource m => AntigateKey -> CaptchaID -> Manager -> m CheckResult -- | retrieve multiple captcha status -- -- throws HttpException on network errors. checkCaptchas :: MonadResource m => AntigateKey -> [CaptchaID] -> Manager -> m [CheckResult] -- | report bad captcha result -- -- throws HttpException on network errors. reportBad :: MonadResource m => AntigateKey -> CaptchaID -> Manager -> m () -- | retrieve your current account balance -- -- throws HttpException on network errors. getBalance :: MonadResource m => AntigateKey -> 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 parseUploadResult :: String -> UploadResult -- | Parse antigate's check response parseCheckResult :: String -> CheckResult -- | Parse antigate's multi-check response parseCheckResults :: String -> [CheckResult] -- | Parse antigate's multi-check response parseCheckResultNoOK :: String -> CheckResult -- | Marshal UploadResult back to its text form renderUploadResult :: UploadResult -> String -- | Marshal CheckResult back to its text form renderCheckResult :: CheckResult -> String instance Typeable SolveException instance Show CaptchaConf instance Read CaptchaConf instance Show UploadResult instance Read UploadResult instance Eq UploadResult instance Ord UploadResult instance Show CheckResult instance Read CheckResult instance Eq CheckResult instance Ord CheckResult instance Show SolveException instance Exception SolveException instance Default CaptchaConf