Metadata-Version: 2.4
Name: qovia
Version: 0.1.0
Summary: Python client for Qovia: public data from Douyin, Xiaohongshu (RedNote), Weibo, Bilibili, TikTok, YouTube and 20+ platforms as unified JSON
Author-email: Qovia <scott@qovia.ai>
License: MIT
Project-URL: Homepage, https://qovia.ai
Project-URL: Documentation, https://qovia.ai/docs/
Project-URL: Source, https://github.com/qovia/qovia-mcp
Keywords: qovia,douyin,xiaohongshu,rednote,weibo,bilibili,tiktok,social media,api,mcp
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Topic :: Internet :: WWW/HTTP
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Dynamic: license-file

# qovia

Python client for [Qovia](https://qovia.ai): public data from Douyin, Xiaohongshu (RedNote), Weibo, Bilibili, Kuaishou, Zhihu, WeChat Official Accounts, Taobao/JD reviews, the Xingtu and Pugongying creator marketplaces, TikTok, YouTube, Instagram, X and Reddit, as unified JSON. No dependencies.

```bash
pip install qovia
```

```python
from qovia import Qovia, QoviaError

client = Qovia()  # reads QOVIA_API_KEY; create a key at https://qovia.ai/console/?tab=keys

notes = client.get("/v1/raw/xiaohongshu/search", keyword="coffee", sort="latest")
for note in notes.data["items"]:
    print(note["extra"]["url"], note["text"][:60])
print("charged", notes.charged_usd)

hot = client.get("/v1/raw/weibo/hot_search")
results = client.search("electric vehicles", platforms=["weibo", "douyin"])

try:
    client.get("/v1/raw/douyin/video", item_id="not-a-real-id")
except QoviaError as error:
    print(error.code, error.request_id)
```

- `get(path, **params)` and `post(path, body)` call any endpoint; the [API reference](https://qovia.ai/docs/api-reference/) lists them all.
- A `Response` has `data`, `meta`, `charged_usd`, `balance_usd` and `empty`. Empty results and errors are never charged.
- `pages(path, ...)` walks page-numbered endpoints until `has_more` is false.
- 429 and 503 answers are retried (honouring `Retry-After`); other errors raise `QoviaError` with `code`, `message` and `request_id`.

New accounts get 50 trial calls. Questions: [Telegram @wodaemn](https://t.me/wodaemn) or scott@qovia.ai.
