跳转至

异步支持

异步支持

TuringAPI的异步支持不同,icodeapi弃用了繁琐的三层异步模型turingAPI.task, turingAPI.event, turingAPI.eventPool),而是提供了一个AsyncIcodeAPI类,包含的均为异步方法。
AsyncIcodeAPIIcodeAPI类的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)