异步支持
异步支持
与TuringAPI的异步支持不同,icodeapi弃用了繁琐的三层异步模型(turingAPI.task
, turingAPI.event
, turingAPI.eventPool
),而是提供了一个AsyncIcodeAPI
类,包含的均为异步方法。
AsyncIcodeAPI
和IcodeAPI
类的API没有多大变更,基本上可以套IcodeAPI
的方法调用方式。
但是有少许不同。
登录账号
AsyncIcodeAPI
在实例化后需要手动登录。且为了防止一些不必要的坏事发生,需要手动关闭连接池。
import asyncio
from icodeapi import AsyncIcodeAPI
# 获取用户输入的cookie
COOKIE : str = input('Enter cookie: ')
# 实例化AsyncIcodeAPI对象
user : AsyncIcodeAPI = AsyncIcodeAPI(cookie=COOKIE)
# 定义一个异步函数,用于登录和获取用户信息
async def main(api: AsyncIcodeAPI):
# 登录
await api.login()
print(api.getInfo())
# 关闭连接池
await api.closeClient()
asyncio.run(main(user))
示例
构建fastapi服务器。
from fastapi import FastAPI
from fastapi.responses import JSONResponse
from fastapi.middleware.cors import CORSMiddleware
from icodeapi import AsyncIcodeAPI
import uvicorn
app : FastAPI = FastAPI() # 创建fastapi实例
app.add_middleware(
CORSMiddleware,
allow_origins=['*'],
allow_credentials = True,
allow_methods=['*'],
allow_headers=['*'],
)
api : AsyncIcodeAPI = AsyncIcodeAPI() # 实例化AsyncIcodeAPI
@app.get("/")
async def getWork() -> JSONResponse: # 返回作品集
results = await api.getWorks()
return JSONResponse(results)
@app.get("/{workId}")
async def getWorkById(workId : str) -> JSONResponse: # 返回作品信息
results = await api.getWorkDetail(workId)
return JSONResponse(results)
@app.get("/person/{userId}")
async def getPerson(userId : str) -> JSONResponse: # 返回个人信息
results = await api.getPersonInfo(userId)
return JSONResponse(results)
uvicorn.run(app, host = "0.0.0.0", port = 80)