aio_anticaptcha 0.1.0
Real-time captcha-to-text decodings
License: Apache 2
Keywords: antigate captcha anticaptcha

Real-time captcha-to-text decodings for asyncio
===============================================
.. image:: https://travis-ci.org/nibrag/aio_anticaptcha.svg?branch=master
   :target: https://travis-ci.org/nibrag/aio_anticaptcha
   :align: right

.. image:: https://coveralls.io/repos/github/nibrag/aio_anticaptcha/badge.svg?branch=master
   :target: https://coveralls.io/github/nibrag/aio_anticaptcha?branch=master
   :align: right

API documentation
-----------------
- https://anti-captcha.com/apidoc
- http://antigate.com/?action=api#algo

Installation
------------
You can install it using Pip:

.. code-block::

    pip install aio_anticaptcha

If you want the latest development version, you can install it from source:

.. code-block::

    git clone git@github.com:nibrag/aio_anticaptcha.git
    cd aio_anticaptcha
    python setup.py install

**Requirements:**

.. code-block::

    python 3.4+
    aiohttp

Usage
-----
With context manager

.. code-block:: python

    import asyncio
    from aio_anticaptcha import AntiCaptcha, ServiceError

    async def run(loop):
        try:
            with AntiCaptcha('API-KEY', loop=loop) as ac:
                # io.IOBase
                fh = open('captcha.jpg')
                resolved, captcha_id = await ac.resolve(fh)

                # or bytes, bytearray
                bytes_buff = open('captcha.jpg', 'rb').read()
                resolved, captcha_id = await ac.resolved(bytes_buff)
        except ZeroBalanceError:
            print('Zero balance')
        except UserKeyError:
            print('Invalid api key...')
        except ServiceError as e:
            print('Something else', str(e))

    if __name__ == '__main__':
        loop = asyncio.get_event_loop()
        loop.run_until_complete(run(loop))
        loop.close()

Without context manager

.. code-block:: python

    import asyncio
    from aio_anticaptcha import AntiCaptcha, ServiceError

    async def run(loop):
        ac = AntiCaptcha('API-KEY', loop=loop)
        try:
            # io.IOBase
            resolved, captcha_id = await ac.resolve(open('captcha.jpg'))

            # or bytes, bytearray
            bytes_buff = open('captcha.jpg', 'rb').read()
            resolved, captcha_id = await ac.resolved(bytes_buff)
        except ServiceError as e:
            print(e)
        finally:
            # do'nt forget call close method
            ac.close()

    if __name__ == '__main__':
        loop = asyncio.get_event_loop()
        loop.run_until_complete(run(loop))
        loop.close()

If you wish to complain about a mismatch results, use ``abuse`` method:

.. code-block:: python

    import asyncio
    from aio_anticaptcha import AntiCaptcha

    async def run(loop):
        with AntiCaptcha('API-KEY', loop=loop) as ac:
            resolved, captcha_id = await ac.resolve(open('captcha.jpg'))
            await ac.abuse(captcha_id)

    if __name__ == '__main__':
        loop = asyncio.get_event_loop()
        loop.run_until_complete(run(loop))
        loop.close()

After all manipulations, you can get your account balance:

.. code-block:: python

    import asyncio
    from aio_anticaptcha import AntiCaptcha

    async def run(loop):
        with AntiCaptcha('API-KEY', loop=loop) as ac:
            balance = await ac.get_balance()

    if __name__ == '__main__':
        loop = asyncio.get_event_loop()
        loop.run_until_complete(run(loop))
        loop.close()

Additional options for sending Captcha:
---------------------------------------

Read documentation about all available options:
https://anti-captcha.com/apidoc

.. code-block:: python

    import asyncio
    from aio_anticaptcha import AntiCaptcha

    async def run(loop):
        with AntiCaptcha('API-KEY', loop=loop) as ac:
            resolved, captcha_id = await ac.resolve(open('captcha.jpg'), max_len=5, is_russian=True)

    if __name__ == '__main__':
        loop = asyncio.get_event_loop()
        loop.run_until_complete(run(loop))
        loop.close()

Customizing anticaptcha service
-------------------------------

.. code-block:: python

    import asyncio
    from aio_anticaptcha import AntiCaptcha

    async def run(loop):
        with AntiCaptcha('API-KEY', loop=loop, domain='antigate.com', port=80) as ac:
            balance = await ac.get_balance()

    if __name__ == '__main__':
        loop = asyncio.get_event_loop()
        loop.run_until_complete(run(loop))
        loop.close()

AntiGate.com supported
----------------------

.. code-block:: python

    import asyncio
    from aio_anticaptcha import AntiGate

    async def run(loop):
        with AntiGate('API-KEY', loop=loop) as ag:
            balance = await ag.get_balance()

    if __name__ == '__main__':
        loop = asyncio.get_event_loop()
        loop.run_until_complete(run(loop))
        loop.close()