Coder Social home page Coder Social logo

async-pixiv's Introduction

Async-Pixiv

Python 3.8 GitHub file size in bytes PyPI License

PyPI - Downloads View

异步调用 Pixiv API

Building...

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

特点

  1. 支持 API 请求速率限制(RateLimiter
  2. 可使用账号和密码直接登录 Pixiv(注:可能会因为遇到 Cloudflare 验证而登录失败)
  3. 自动将请求后的数据转为 Model ,再也不用以字典形式调用获取数据了(pydantic typed)
  4. 支持多种代理模式(http/https/socks5)
  5. 支持下载 gif 帧序列文件,并将其转为 gif 或 mp4 (需要 ffmpeg
  6. 。。。(想到再写)

安装

使用 pip (任选一行指令进行安装)

pip install --upgrade async-pixiv

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

# 安装 playwright,使之可以使用账号密码登录 
pip install --upgrade async-pixiv[playwright]

# 安装全部额外依赖
pip install --upgrade async-pixiv[full]

使用 poetry

poetry add async-pixiv

# 安装额外依赖(用于提升数据解析速度)
poetry add async-pixiv[extra]

# 安装 playwright,使之可以使用账号密码登录 
poetry add async-pixiv[playwright]

# 安装全部额外依赖
poetry add async-pixiv[full]

使用

from async_pixiv import PixivClient  # 导入

# 初始化 Client
client = PixivClient(
    max_rate=100,  # API 请求速率限制。默认 100 次
    rate_time_period=60,  # API 请求速率限制时间区间。默认 60 秒
    timeout=10,  # 默认超时秒数
    proxies=None,  # 代理配置
    trust_env=False,  # 是否从环境变量中获取代理配置
    retry=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.download() # 下载
    breakpoint()

    # 下载动图
    bytes_data = await client.ILLUST.download_ugoira(105369892, type='mp4')  # bytes
    gif_data = await client.ILLUST.download_ugoira(105369892, 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__()

async-pixiv's People

Contributors

karakoo avatar luoshuijs avatar thefunny avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.