JikanPy
JikanPy 是 Jikan 的 Python 封装,提供了所有 API 功能的绑定,支持 Python 3.6+。由于它旨在保持基本一致,请查阅 Jikan 的文档 以了解如何使用的更多细节。最重要的是,JikanPy 没有尝试进行任何限速,所以请像使用原始 API 一样负责任地使用它,并记住 Jikan API 有限制,查看文档的 这一部分 以了解 API 的限制或节流程度。
你可以使用 Jikan 或 AioJikan,取决于你是想要同步包装类还是异步包装类。更多使用示例见下文。
除了 Jikan API 的典型响应外,每个响应还包含两个额外字段:
jikan_url
:请求的 URL;例如:https://api.jikan.moe/v4/anime/1
。headers
:来自 Jikan 的响应头,详见 这里。
安装
你可以使用 pip 从 PyPI 安装该包:
$ pip install jikanpy-v4
如果你之前安装了旧版本的 jikanpy,请确保先卸载旧版本:
$ pip uninstall jikanpy
$ pip install --no-cache-dir jikanpy-v4
你也可以直接从源码安装此包:
$ git clone https://github.com/abhinavk99/jikanpy.git
$ cd jikanpy
$ python setup.py install
注意:此包与 PyPI 上的 jikanpy
不同,后者是与 Jikan v3 兼容的旧版本 jikanpy。
使用示例
以下是使用 Jikan 和 AioJikan 的一些基本示例。请阅读 下面的文档 以查看所有方法和更多示例。
Jikan 使用示例
from jikanpy import Jikan
jikan = Jikan()
mushishi = jikan.anime(457)
mushishi_with_eps = jikan.anime(457, extension='episodes')
search_result = jikan.search('anime', 'Mushishi', page=2)
winter_2018_anime = jikan.seasons(year=2018, season='winter')
current_season = jikan.seasons(extension='now')
AioJikan 异步使用示例
import asyncio
from jikanpy import AioJikan
async def main():
async with AioJikan() as aio_jikan:
mushishi = await aio_jikan.anime(457)
fma = await aio_jikan.manga(25)
ginko = await aio_jikan.characters(425)
kana_hanazawa = await aio_jikan.person(185)
naruto = await aio_jikan.search(search_type='anime', query='naruto')
# 你也可以像下面这样构造 AioJikan,但确保关闭对象
aio_jikan_2 = AioJikan()
mushishi = await aio_jikan.anime(457)
await aio_jikan_2.close()
asyncio.run(main())
文档
查看 这里 的文档。
使用构造函数参数覆盖 Jikan 和 AioJikan 中的默认设置
如果你在系统上运行 jikan-rest 实例,并想使用它而不是 api.jikan.moe,你可以将其传递给 Jikan:
from jikanpy import Jikan
jikan = Jikan(selected_base='http://localhost:8000/v4')
如果你想使用自己的 Requests 会话,也可以这样做。
import requests
from jikanpy import Jikan
session = requests.Session()
# 设置自定义持久头,这些头将用于所有 HTTP 请求
session.headers.update({'x-test': 'true'})
jikan = Jikan(session=session)
创建 Jikan 实例时,你可以使用这些构造函数参数中的任何一个或全部。
AioJikan 也有 selected_base
和 session
(尽管 AioJikan 使用 AioHTTP 会话,而不是 Requests)。
import aiohttp
import asyncio
from jikanpy import AioJikan
async def main():
# 使用自定义基础 URL 和带有自定义持久头的 AioHTTP 会话构造 AioJikan
session = aiohttp.ClientSession(headers={'x-test': 'true'})
aio_jikan = AioJikan(selected_base='http://localhost:8000/v4', session=session)
await session.close()
asyncio.run(main())
测试
# 在仓库根目录
$ pytest -m pytest tests/
# 可选地,你可以运行单个测试:
$ pytest -m pytest tests/test_jikan.py::test_anime_episodes_success