Metadata-Version: 2.4
Name: jiro-sdk
Version: 0.2.15
Summary: Official Python SDK for Jiro Search API
Home-page: https://github.com/DevAnimecx/jiro
Author: Jiro Team
Author-email: webcrafterreal@gmail.com
License: MIT
Keywords: jiro search api web scraping sdk
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
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: Programming Language :: Python :: 3.14
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.8
Description-Content-Type: text/markdown
Requires-Dist: httpx>=0.24.0
Provides-Extra: websocket
Requires-Dist: websocket-client>=1.6.0; extra == "websocket"
Provides-Extra: async
Requires-Dist: httpx[http2]>=0.24.0; extra == "async"
Provides-Extra: dev
Requires-Dist: pytest>=7.0; extra == "dev"
Requires-Dist: pytest-asyncio>=0.21; extra == "dev"
Requires-Dist: pytest-cov>=4.0; extra == "dev"
Requires-Dist: mypy>=1.0; extra == "dev"
Requires-Dist: ruff>=0.1.0; extra == "dev"
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: keywords
Dynamic: license
Dynamic: provides-extra
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary

# Jiro Python SDK

Official Python SDK for [Jiro Search API](https://github.com/DevAnimecx/jiro).

## Installation

```bash
pip install jiro-sdk
```

With WebSocket support:
```bash
pip install jiro-sdk[websocket]
```

## Quick Start

```python
from jiro_sdk import JiroClient

# Initialize client
client = JiroClient(
    api_key="your-api-key",
    base_url="http://127.0.0.1:8000"
)

# Search the web
results = client.search("python web scraping")
print(results["organic_results"])

# Scrape a URL
content = client.scrape("https://example.com")
print(content["content"])

# AI-powered research with citations
answer = client.ai_ask("What is Python?")
print(answer["answer"])

# Parallel search across multiple engines
results = client.search_parallel("AI news", num_engines=3)

# Search for images
images = client.search_images("cats")

# Search for news
news = client.search_news("technology")
```

## Async Usage

```python
import asyncio
from jiro_sdk import AsyncJiroClient

async def main():
    async with AsyncJiroClient(api_key="your-key") as client:
        results = await client.search("python web scraping")
        content = await client.scrape("https://example.com")
        answer = await client.ai_ask("What is Python?")

asyncio.run(main())
```

## Social Media Scraping

```python
# Scrape social media
result = client.social_scrape("https://reddit.com/r/python/comments/123")

# Search social platforms
results = client.social_search("python", platform="reddit")
```

## Batch Operations

```python
# Batch search
job = client.batch_search(
    queries=["python", "javascript", "go"],
    engine="google",
    num_results=5
)
print(f"Progress: {job.progress}%")

# Batch scrape
job = client.scrape_batch([
    "https://example.com",
    "https://httpbin.org/html"
])
```

## Error Handling

```python
from jiro_sdk import JiroClient, JiroError, AuthenticationError, RateLimitError

client = JiroClient(api_key="your-key")

try:
    results = client.search("test")
except AuthenticationError:
    print("Invalid API key")
except RateLimitError:
    print("Rate limit exceeded, please wait")
except JiroError as e:
    print(f"Error: {e}")
```

## Configuration

```python
client = JiroClient(
    api_key="your-api-key",           # Optional: API key
    base_url="http://localhost:8000",  # Server URL
    timeout=30.0                       # Request timeout
)

# Get system status
status = client.status()

# Get usage statistics
usage = client.usage(days=30)

# List plugins
plugins = client.plugins()
```

## Context Manager

```python
with JiroClient(api_key="your-key") as client:
    results = client.search("test")
# Client is automatically closed
```

## License

MIT License
