GoComics API wrapper
Project description
comics
GoComics API wrapper
Installation
pip install comics
[!WARNING] Breaking changes in v0.9.1: This release fixes a fatal issue that caused all previous versions to stop working. Upgrading is required.
pip install comics --upgrade
[!NOTE] Playwright must be installed after installing
comicsto enable browser-based features:python -m playwright install --with-deps
Quick start
Find and download the Calvin and Hobbes comic strip published on January 2, 1990:
import comics
ch = comics.search("calvinandhobbes", date="1990-01-02")
ch.download("calvinandhobbes.png")
Find comics
Available comics can be found using the directory class:
import comics
# List available comics - total of 401
comics.directory.listall()
# >>> ("1-and-done", "9-chickweed-lane-classics", "9chickweedlane", "9to5", ... )
# Find endpoints for Calvin and Hobbes
comics.directory.search("Calvin and Hobbes")
# >>> ("calvinandhobbes", "calvinandhobbesenespanol")
First, pass the desired endpoint to comics.search. For example, to search for Calvin and Hobbes comics in english use comics.search("calvinandhobbes"); for spanish, use comics.search("calvinandhobbesenespanol").
Search and download comics
Then, search for a comic strip by passing date into search():
import comics
# Get a Calvin and Hobbes comic strip by date
ch = comics.search("calvinandhobbes", date="2013-05-13") # Also accepts datetime.date or datetime object
# Get a random Calvin and Hobbes comic strip
random_ch = comics.search("calvinandhobbes", date="random")
Finally, show, download, or stream the comic strip:
# Show comic strip - opens in Jupyter notebook or default image viewer application
ch.show()
# Download comic strip - defaults to {endpoint}.png if an export path is not provided
# E.g., a Calvin and Hobbes comic strip will be exported as "calvinandhobbes.png" in the current working directory
ch.download()
# Stream comic strip - useful if custom image content manipulation is desired
ch.stream()
Retry logic
If a comic strip fails to load due to CDN delays or missing image data, a retry mechanism is built into download(), show(), and stream(). You can control this behavior via:
retries: number of attempts before failing (default = 5)base_delay: exponential backoff seed time in seconds (default = 0.5)
This improves reliability when fetching newly released strips or handling transient issues.
| Attempt | Wait Before Attempt (sec) | Cumulative Time (sec) |
|---|---|---|
| 1 | 0.0 | 0.0 |
| 2 | 0.5 | 0.5 |
| 3 | 1.0 | 1.5 |
| 4 | 2.0 | 3.5 |
| 5 | 4.0 | 7.5 |
| 6 | 8.0 | 15.5 |
Retry behavior can be customized per call:
# Try 3 times total with shorter delay
ch.download(retries=2, base_delay=0.25)
Attributes
An instantiated search class will have the following public attributes:
import comics
garfield = comics.search("garfield")
garfield.endpoint
# >>> "garfield"
garfield.title
# >>> "Garfield"
garfield.start_date
# >>> "1978-06-19"
An instantiated search class with date will have the following public attributes:
import comics
garfield = comics.search("garfield", date="2000-08-20")
garfield.endpoint
# >>> "garfield"
garfield.title
# >>> "Garfield"
garfield.date
# >>> "2000-08-20"
garfield.url
# >>> "https://www.gocomics.com/garfield/2000/08/20"
garfield.image_url
# >>> "https://assets.amuniversal.com/6694c52099bd01365606005056a9545d"
Exceptions
An exception will be thrown if the queried date is unregistered or before the comic's origin date:
import comics
try:
peanuts = comics.search("peanuts", date="1900-01-01")
peanuts.download()
except comics.exceptions.InvalidDateError:
print("Whoops, an invalid date was queried.")
An exception will be thrown if the queried endpoint is unregistered:
import comics
try:
invalid_comic = comics.search("invalid_endpoint", date="2000-01-01")
invalid_comic.download()
except comics.exceptions.InvalidEndpointError:
print("Whoops, an invalid endpoint was queried.")
An exception will be thrown if Playwright fails to fetch a comic (e.g., browser not installed or page error):
import comics
try:
garfield = comics.search("garfield", date="2020-05-05", force_playwright=True)
garfield.download()
except comics.exceptions.ComicsPlaywrightError:
print("Playwright failed to fetch the page. Check your Playwright installation.")
Contribute
Support
If you are having issues or would like to propose a new feature, please use the issues tracker.
License
This project is licensed under the MIT license.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file comics-0.9.2.tar.gz.
File metadata
- Download URL: comics-0.9.2.tar.gz
- Upload date:
- Size: 25.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cfb0b1382a10767a9d0afc29831011cb78c65963f7e3c8be3ae722d2da0c5fd2
|
|
| MD5 |
af6007291df4d43f35ba5ee1964d0d8d
|
|
| BLAKE2b-256 |
9b6154bbe54aad45140c252f8c66dd99e603a569fd27cff2874c042ccbaf7074
|
File details
Details for the file comics-0.9.2-py3-none-any.whl.
File metadata
- Download URL: comics-0.9.2-py3-none-any.whl
- Upload date:
- Size: 19.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d4bb6fde0005264ec2499fbc6d4034900d51d2cf02e28850e6a31db7f27fcb0b
|
|
| MD5 |
d98a5e48a18ae6ca482f2050632cdcb4
|
|
| BLAKE2b-256 |
e52bd5c4075739f9244affceb71721670c4c76d49ba3db09d83360fa49585b84
|