Metadata-Version: 2.4
Name: askpablos-api
Version: 0.3.0
Summary: Professional Python client for the AskPablos proxy API service
Author-email: Fawad Ali <fawadstar6@gmail.com>
Maintainer-email: Fawad Ali <fawadstar6@gmail.com>
License: MIT
Project-URL: Homepage, https://github.com/fawadss1/askpablos_api
Project-URL: Documentation, https://askpablos-api.readthedocs.io/en/latest/
Project-URL: Repository, https://github.com/fawadss1/askpablos_api
Project-URL: Issues, https://github.com/fawadss1/askpablos_api/issues
Project-URL: PyPI, https://pypi.org/project/askpablos-api/
Keywords: proxy,api,web-scraping,browser,http-client,askpablos
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Internet :: WWW/HTTP :: Browsers
Classifier: Topic :: Internet :: Proxy Servers
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: System :: Networking
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: requests>=2.25.0
Provides-Extra: parsing
Requires-Dist: lxml>=4.6; extra == "parsing"
Provides-Extra: dev
Requires-Dist: pytest>=6.0; extra == "dev"
Requires-Dist: pytest-cov>=2.0; extra == "dev"
Requires-Dist: black>=21.0; extra == "dev"
Requires-Dist: flake8>=3.8; extra == "dev"
Requires-Dist: mypy>=0.900; extra == "dev"
Requires-Dist: pre-commit>=2.0; extra == "dev"
Requires-Dist: lxml>=4.6; extra == "dev"
Provides-Extra: docs
Requires-Dist: sphinx>=4.0; extra == "docs"
Requires-Dist: sphinx-rtd-theme>=1.0; extra == "docs"
Requires-Dist: myst-parser>=0.15; extra == "docs"
Dynamic: license-file

# AskPablos API Client

[![PyPI Version](https://img.shields.io/pypi/v/askpablos-api.svg)](https://pypi.org/project/askpablos-api/)
[![PyPI Downloads](https://img.shields.io/pypi/dm/askpablos-api.svg)](https://pypi.org/project/askpablos-api/)
[![Supported Python Versions](https://img.shields.io/pypi/pyversions/askpablos-api.svg)](https://pypi.org/project/askpablos-api/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![GitHub Issues](https://img.shields.io/github/issues/fawadss1/askpablos_api.svg)](https://github.com/fawadss1/askpablos_api/issues)

A Python client for making GET requests through the AskPablos proxy service with browser automation support.

**Documentation**: [https://askpablos-api.readthedocs.io/](https://askpablos-api.readthedocs.io/)

## Features

- **Secure Authentication** — HMAC-SHA256 signature-based
- **Browser Automation** — JavaScript rendering with `browser=True`
- **Browser Operations** — Wait for elements with `waitForElement` before capturing HTML
- **Screenshot Capture** — `screenshot=True`
- **Error Handling** — Specific exception types for each failure mode

## Installation

```bash
pip install askpablos-api

# With lxml for HTML/XPath parsing
pip install "askpablos-api[parsing]"
```

## Quick Start

```python
from askpablos_api import AskPablos

client = AskPablos(
    api_key="your_api_key",
    secret_key="your_secret_key"
)

# Simple request
response = client.get("https://httpbin.org/ip")
print(response.content)
```

## Browser Mode & HTML Parsing

For JavaScript-rendered pages, use `browser=True` with `operations` to wait for
content before capturing. Use `lxml` to parse the HTML.

```python
from lxml import etree

response = client.get(
    url="https://example.com/catalog",
    browser=True,
    operations=[{
        "task": "waitForElement",
        "match": {
            "on": "xpath",
            "rule": "visible",
            "value": "//ul[@class='prod_list']"
        }
    }],
    timeout=45
)

dom = etree.HTML(response.content)
for li in dom.xpath("//ul[@class='prod_list']/li"):
    name = li.xpath(".//span[@class='pr_title']/text()")
    print(name[0].strip() if name else "")
```

## Screenshot

```python
response = client.get(
    url="https://example.com",
    browser=True,
    screenshot=True
)

if response.screenshot:
    with open("screenshot.png", "wb") as f:
        f.write(response.screenshot)
```

## Error Handling

```python
from askpablos_api import (
    AuthenticationError,
    APIConnectionError,
    RequestTimeoutError,
    ResponseError
)

try:
    response = client.get("https://example.com", timeout=30)
except AuthenticationError as e:
    print(f"Auth failed: {e}")
except APIConnectionError as e:
    print(f"Connection error: {e}")
except RequestTimeoutError as e:
    print(f"Timed out: {e}")
except ResponseError as e:
    print(f"HTTP error: {e}")
```

## Development

```bash
git clone https://github.com/fawadss1/askpablos_api.git
cd askpablos-api
pip install -e ".[dev]"
```

## License

MIT — see [LICENSE](LICENSE) for details.

## Support

- **Email**: fawadstar6@gmail.com
- **Issues**: [GitHub Issues](https://github.com/fawadss1/askpablos_api/issues)
