Spaces:
Running
Running
| import os | |
| import httpx | |
| hordeApiKey = os.environ.get("HORDE_API_KEY") | |
| baseUrl = "https://aihorde.net/api/v2/" | |
| headers = { | |
| "Content-Type": "application/json", | |
| "apikey": f"{hordeApiKey}" | |
| } | |
| class HordeAPI: | |
| # 省去类初始化,直接在每个方法里创建客户端 | |
| async def _fetch(self, url, method="GET", headers=headers): | |
| async with httpx.AsyncClient() as client: | |
| if method == "GET": | |
| response = await client.get(url, headers=headers) | |
| elif method == "POST": | |
| response = await client.post(url, headers=headers) | |
| if response.status_code == 200: | |
| return response.json() | |
| else: | |
| return { | |
| "code": response.status_code, | |
| "reason": response.text | |
| } | |
| class APIContextManager: | |
| def __init__(self, api_call): | |
| self.api_call = api_call | |
| self.result = None | |
| async def __aenter__(self): | |
| self.result = await self.api_call() | |
| return self.result | |
| async def __aexit__(self, exc_type, exc_value, traceback): | |
| pass | |
| # 提供 API 调用方法,直接通过 async with 使用 | |
| def getUserDetails(): | |
| async def api_call(): | |
| url = f"{baseUrl}find_user" | |
| return await HordeAPI()._fetch(url) | |
| return HordeAPI.APIContextManager(api_call) | |
| def generateCheck(id): | |
| async def api_call(): | |
| url = f"{baseUrl}generate/check/{id}" | |
| return await HordeAPI()._fetch(url, headers={"Content-Type": "application/json"}) | |
| return HordeAPI.APIContextManager(api_call) | |
| def generateStatus(id): | |
| async def api_call(): | |
| url = f"{baseUrl}generate/status/{id}" | |
| return await HordeAPI()._fetch(url, headers={"Content-Type": "application/json"}) | |
| return HordeAPI.APIContextManager(api_call) | |