feat: add Node.js and Python SDKs
All checks were successful
Build & Deploy to Staging / Build & Deploy to Staging (push) Successful in 9m1s

- Node.js SDK: TypeScript, ESM+CJS, zero deps (uses native fetch)
- Python SDK: zero deps (uses urllib), Python 3.8+
- Both fully documented with examples and type hints
- Ready for npm/PyPI publishing
This commit is contained in:
OpenClawd 2026-02-23 14:02:15 +00:00
parent db1fa8d506
commit 66ecc471cf
8 changed files with 709 additions and 0 deletions

120
sdk/python/README.md Normal file
View file

@ -0,0 +1,120 @@
# SnapAPI Python SDK
Official Python client for [SnapAPI](https://snapapi.eu) — the EU-hosted screenshot API.
**Zero dependencies.** Uses only Python standard library (`urllib`).
## Installation
```bash
pip install snapapi
```
## Quick Start
```python
from snapapi import SnapAPI
snap = SnapAPI("your-api-key")
# Capture a screenshot
screenshot = snap.capture("https://example.com")
with open("screenshot.png", "wb") as f:
f.write(screenshot)
```
## Usage
### Basic Screenshot
```python
png = snap.capture("https://example.com")
```
### With Options
```python
jpg = snap.capture(
"https://example.com",
format="jpeg",
width=1920,
height=1080,
quality=90,
)
```
### Full-Page Capture
```python
full = snap.capture(
"https://example.com/blog",
full_page=True,
device_scale=2, # Retina
)
```
### Mobile Viewport
```python
mobile = snap.capture(
"https://example.com",
width=375,
height=812,
device_scale=2,
)
```
### Wait for Dynamic Content
```python
screenshot = snap.capture(
"https://example.com/dashboard",
wait_for_selector="#chart-loaded",
wait_until="networkidle2",
)
```
### Error Handling
```python
from snapapi import SnapAPI, SnapAPIError
snap = SnapAPI("your-api-key")
try:
screenshot = snap.capture("https://example.com")
except SnapAPIError as e:
print(f"API error {e.status}: {e.detail}")
```
## API Reference
### `SnapAPI(api_key, base_url="https://snapapi.eu", timeout=30)`
### `snap.capture(url, **options) -> bytes`
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `url` | `str` | — | URL to capture (required) |
| `format` | `str` | `"png"` | Output: `png`, `jpeg`, `webp` |
| `width` | `int` | `1280` | Viewport width (3203840) |
| `height` | `int` | `800` | Viewport height (2002160) |
| `full_page` | `bool` | `False` | Capture full page |
| `quality` | `int` | `80` | JPEG/WebP quality (1100) |
| `wait_for_selector` | `str` | — | CSS selector to wait for |
| `device_scale` | `float` | `1` | Device pixel ratio (13) |
| `delay` | `int` | `0` | Extra delay in ms (05000) |
| `wait_until` | `str` | `"domcontentloaded"` | Load event |
### `snap.health() -> dict`
Returns API health status.
## EU-Hosted & GDPR Compliant
SnapAPI runs entirely on EU infrastructure (Germany). Your data never leaves the EU.
## License
MIT — [Cloonar Technologies GmbH](https://snapapi.eu)