Skip to content

ArkoClub/async-pixiv

Repository files navigation

Async-Pixiv

Python 3.12 GitHub file size in bytes PyPI License

PyPI - Downloads View

异步调用 Pixiv API

Building...

此项目的开发者很忙,所以没啥时间修 bug ,写文档什么的

特点

  1. 支持 API 请求速率限制(RateLimiter
  2. 自动将请求后的数据转为 Model ,再也不用以字典形式调用获取数据了(pydantic typed)
  3. 支持多种代理模式(http/https/socks5)
  4. 支持下载 gif 帧序列文件,并将其转为 gif 或 mp4 (需要 ffmpeg
  5. 。。。(想到再写)

安装

使用 pip

pip install --upgrade async-pixiv

# 安装额外依赖(用于提升数据解析速度)
pip install --upgrade async-pixiv[speedups]

使用

from async_pixiv import PixivClient  # 导入
from async_pixiv.utils.rate_limiter import RateLimiter


# 初始化 Client
client = PixivClient(
    limiter=RateLimiter(100, 60),  # API 请求速率限制, 限制为 60 秒内最多请求 100 次。默认没有限制
    timeout=10,  # 默认超时秒数
    proxy=None,  # 代理配置
    trust_env=False,  # 是否从环境变量中获取代理配置
    retry_times=5,  # 默认请求重试次数
    retry_sleep=1,  # 默认重复请求间隔秒数
)


async def main():
    user = await client.login_with_token('TOKEN')  # 使用 token 登录 pixiv
    print(user.name)

    # 获取作品详情
    detail_result = await client.ILLUST.detail(91725675)
    illust = detail_result.illust
    print(
        f"链接:{illust.link}", 
        f"标题:{illust.title}", 
        f"作者:{illust.user.name}", 
        f"标签:#{' #'.join(map(str, illust.tags))}", 
        f"是否为 AI 作品:{'是' if illust.ai_type else '否'}",
        f"是否为 R18 作品:{'是' if await illust.is_r18() else '否'}",
        sep='\n'
    )
    file_data = illust.link.download() # 下载
    breakpoint()

    # 下载动图
    bytes_data = await illust.download_ugoira(result_type='mp4')  # bytes
    gif_data = await illust.download_ugoira(result_type='gif')
    breakpoint()

    # 小说
    novel_result = await client.NOVEL.detail(15739859)
    novel = novel_result.novel
    print(f"标题:{novel.title}", f"字数:{novel.text_length}", sep='\n')
    breakpoint()
    
    # 漫画
    # 下次再写

def __main__():
    import asyncio

    asyncio.run(main())


if __name__ == '__main__':
    __main__()