comics
comics copied to clipboard
GoComics API wrapper
comics
GoComics API wrapper
Installation
pip install comics
Quick start
Find and download the Calvin and Hobbes comic strip published on January 2, 1990:
import comics
ch = comics.search("calvinandhobbes").date("January 2, 1990")
ch.download("calvinandhobbes.png")

Find comics
Available comics can be found using the directory
class:
import comics
# List available comics - total of 470
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 using the date
or random_date
method:
import comics
# Get a Calvin and Hobbes comic strip by date
ch = comics.search("calvinandhobbes").date("2013-05-13") # Also accepts datetime object
# Get a random Calvin and Hobbes comic strip
random_ch = comics.search("calvinandhobbes").random_date()
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()
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
or random_date
will have the following public attributes:
import comics
garfield = comics.search("garfield").date("08/20/2000")
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
from comics.exceptions import InvalidDateError
try:
peanuts = comics.search("peanuts").date("1900-01-01")
peanuts.download()
except InvalidDateError:
print("Whoops, an invalid date was queried.")
An exception will be thrown if the queried endpoint is unregistered:
import comics
from comics.exceptions import InvalidEndpointError
try:
invalid_comic = comics.search("invalid_endpoint").date("2000-01-01")
invalid_comic.download()
except InvalidEndpointError:
print("Whoops, an invalid endpoint was queried.")
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.