52 lines
1.4 KiB
Python
52 lines
1.4 KiB
Python
import httpx
|
|
|
|
|
|
class VNDBClient:
|
|
def __init__(self, base_url):
|
|
self.base = base_url.rstrip("/")
|
|
self.client = httpx.AsyncClient(timeout=10)
|
|
|
|
async def _post(self, endpoint, payload):
|
|
try:
|
|
r = await self.client.post(f"{self.base}/{endpoint}", json=payload)
|
|
|
|
if r.status_code != 200:
|
|
return None
|
|
|
|
data = r.json()
|
|
return data.get("results", [])
|
|
except Exception:
|
|
return None
|
|
|
|
async def search_vn(self, query):
|
|
query = query.strip()
|
|
|
|
return await self._post("vn", {
|
|
"filters": ["search", query],
|
|
"fields": "id,title,original,released,rating,votecount",
|
|
"results": 5
|
|
})
|
|
|
|
async def get_vn(self, vid):
|
|
res = await self._post("vn", {
|
|
"filters": ["id", "=", vid],
|
|
"fields": "id,title,original,released,rating,votecount",
|
|
"results": 1
|
|
})
|
|
return res[0] if res else None
|
|
|
|
async def get_char(self, cid):
|
|
res = await self._post("character", {
|
|
"filters": ["id", "=", cid],
|
|
"fields": "id,name,original",
|
|
"results": 1
|
|
})
|
|
return res[0] if res else None
|
|
|
|
async def get_release(self, rid):
|
|
res = await self._post("release", {
|
|
"filters": ["id", "=", rid],
|
|
"fields": "id,title,released",
|
|
"results": 1
|
|
})
|
|
return res[0] if res else None |