Skip to main content

Async API wrapper for Crunchyroll

Project description

Crunpyroll


Features 🔥

  • Fully async (httpx)
  • Python 3.7+ support
  • Clean and modern code
  • Updated to latest Crunchyroll API

Installation ⚙️

# Using Git
pip install -U git+https://github.com/stefanodvx/crunpyroll

# Using PyPi (Recommended)
pip install -U crunpyroll

Documentation 📄

The documentation page undergoes automatic updates with each push. To access the latest documentation page, kindly refer to our Read the Docs project.


Example Code ❓

import crunpyroll
import asyncio

client = crunpyroll.Client(
    email="email",
    password="password",
    locale="it-IT"
)
async def main():
    # Start client and login
    await client.start()
    # Search for Attack on Titan
    query = await client.search("Attack On Titan")
    series_id = query.items[0].id
    print(series_id)
    # Retrieve all seasons of the series
    seasons = await client.get_seasons(series_id)
    print(seasons)

asyncio.run(main())

Downloading content 🔑

Crunchyroll has recently implemented the Widevine and PlayReady Digital Rights Management (DRM) systems, which has led to challenges for certain users attempting to download content from the platform.

Subsequently, the following code provides an illustrative example of obtaining decryption keys through the utilities of the pywidevine library and an L3 Content Decryption Module (CDM).

from pywidevine.cdm import Cdm
from pywidevine.pssh import PSSH
from pywidevine.device import Device
...
device = Device.load("l3cdm.wvd")
cdm = Cdm.from_device(device)
# Get streams of the episode/movie
streams = await client.get_streams("GRVDQ1G4R")
# Get manifest of the format you prefer
manifest = await client.get_manifest(streams.hardsubs[0].url)
# print(manifest)
# Get Widevine PSSH from manifest
pssh = PSSH(manifest.content_protection.widevine.pssh)
session_id = cdm.open()
challenge = cdm.get_license_challenge(session_id, pssh)
license = await client.get_license(
    streams.media_id,
    challenge=challenge,
    token=streams.token
)
cdm.parse_license(session_id, license)
for key in cdm.get_keys(session_id, "CONTENT"):
    print(f"{key.kid.hex}:{key.key.hex()}")
cdm.close(session_id)
# Deleting active streams will prevent Crunchyroll HTTP 420 (too_many_queued_streams) error.
await client.delete_active_stream(
    streams.media_id,
    token=streams.token
)

Output:

056ec1ca849e350181753cacc9bd404b:2307a188ecd8de3859b71b30791f171d

[!TIP] Decryption keys are universally applicable to both video and audio streams, maintaining consistency across all available formats.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

crunpyroll-2.4.5.tar.gz (16.7 kB view details)

Uploaded Source

Built Distribution

crunpyroll-2.4.5-py3-none-any.whl (28.2 kB view details)

Uploaded Python 3

File details

Details for the file crunpyroll-2.4.5.tar.gz.

File metadata

  • Download URL: crunpyroll-2.4.5.tar.gz
  • Upload date:
  • Size: 16.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.20

File hashes

Hashes for crunpyroll-2.4.5.tar.gz
Algorithm Hash digest
SHA256 5ea55df70f663b4fee4970a36702fdf60d7f89e1e33e4dcf8b85b1effe2c5f8b
MD5 2da4333bda64f1d78c7f9380d93ff502
BLAKE2b-256 962a6128f040b5a28fede7d8216ec197c0a8a3c60d502caf0430c08a0d754f77

See more details on using hashes here.

File details

Details for the file crunpyroll-2.4.5-py3-none-any.whl.

File metadata

  • Download URL: crunpyroll-2.4.5-py3-none-any.whl
  • Upload date:
  • Size: 28.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.20

File hashes

Hashes for crunpyroll-2.4.5-py3-none-any.whl
Algorithm Hash digest
SHA256 ec8193d8a4f409e6d5001aa4696751af203c19a17c2dbba4aebe6878cc82115a
MD5 24f463f59222db1dfeb34ed9b97cf0e8
BLAKE2b-256 d679be702be5eb4fc3357dd1b0dfbc4d1b36baf27d38107bfe91f1dc2f7a6102

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page