Python API Wrapper for Sv443's JokeAPI (https://v2.jokeapi.dev)
Project description
Sv443's Joke API Wrapper
An API wrapper for Sv443's joke api which provides simple yet versatile functionality, while also maintaining a readable codebase.Install
You can install jokeapi through pip by using pip install jokeapi
get_joke
The wrapper is structured in such a way that the end-user should only ever have to
interact with one function to get a joke. This function is get_joke()
.
Please note that urllib3, the core dependency of this wrapper automatically abides by
Retry-After
headers, which means you may have to wait a long time for a joke if you
have made a lot of requests recently
submit_joke
The wrapper also provides simple access to the submit endpoint through the submit_joke()
function.
Note that joke submissions are manually checked and you will be ratelimited.
get_joke
Example
from jokeapi import Jokes # Import the Jokes class
import asyncio
async def print_joke():
j = await Jokes() # Initialise the class
joke = await j.get_joke() # Retrieve a random joke
if joke["type"] == "single": # Print the joke
print(joke["joke"])
else:
print(joke["setup"])
print(joke["delivery"])
asyncio.run(print_joke())
Parameters
category
A list of categories that the returned joke should fit in.
Options are:
programming
,
miscellaneous
,
dark
,
pun
If left blank it will default to use Any
.
Example
joke = await j.get_joke(category=['programming', 'dark']) # Will return a joke that fits in either the programming or dark category.
blacklist
A list of properties that the joke shouldn't have.
Options are:
nsfw
,
religious
,
political
,
racist
,
sexist
If left blank it will default to None
.
Example
joke = await j.get_joke(blacklist=['nsfw', 'racist']) # Will return a joke that does not have either the flag "nsfw" or "racist".
response_format
The format in which the API should respond.
Options are:
json
,
yaml
,
xml
,
txt
If left blank it will default to json
.
Example
joke = await j.get_joke(response_format="xml") # Will return a joke in xml format.
joke_type
The type of joke returned.
Options are:
single
,
twopart
,
Any
If left blank it will default to Any
Example
joke = await j.get_joke(joke_type="twopart") # Will return a twopart joke; both a setup and a delivery.
search_string
A string to search for in jokes.
If left blank it will default to None
Example
joke = await j.get_joke(search_string="the") # Will return a joke with the word "the" in it.
# If there are no jokes then it will return the error from the API.
id_range
The range in which the selected joke should fall. ID's are decided by the order in which jokes are submitted. The argument passes should be in form of list or tuple, and should not exceed length of 2 items. First item should be minimum 0. Maximum value can be determined here
If left blank it will default to the maximum range.
Example
joke = await j.get_joke(id_range=[10,100]) # Will return a joke with the ID between 10 and 100.
amount
The amount of jokes you want the api to return. Will return them in a list. Maximum number is 10 jokes, and the api defaults to 1 if you use a number larger than the maximum. Defaults to 1.
Example
joke = await j.get_joke(amount=2) # Will return 2 jokes.
lang
The language that the joke and response should be in. Currently supported languages are in the official api documentation. Defaults to en.
Example
joke = await j.get_joke(lang="de")
auth_token
A string token provided by the api owner. Using it will mean you are whitelisted by the api and can make more requests than normal users. Defaults to None
Example
joke = await j.get_joke(auth_token="aaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbb") # Will send the token to the api in a header.
user_agent
A string sent the the api that tells the api what browser you are (pretending to be). The default user agent is Mozilla Firefox from Windows 10 and should work fine, but the functionality is provided in case you wish to change it
Example
joke = await j.get_joke(user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0")
# This is in fact the default user agent, and tells the API that we are visitng the page from a Firefox 77.0
# browser using Windows 10 64bit.
return_headers
A boolean value (True or False) that tells the wrapper if you wish to receive headers in the return from the function. Will return a list instead of a single value Defaults to False.
Example
response = await j.get_joke(return_headers=True)
joke = response[0]
headers = response[1]
print(f"Joke: {joke}")
print(f"Headers: {headers}")
Returns
Depending on what format is chosen different things will be returned.
json
A succesful API call will return:
{
"category": "Miscellaneous",
"type": "twopart",
"setup": "I told my psychiatrist I got suicidal tendencies.",
"delivery": "He said from now on I have to pay in advance.",
"flags": {
"nsfw": false,
"religious": false,
"political": false,
"racist": false,
"sexist": false
},
"id": 94,
"error": false
}
xml
A succesful API call will return:
<?xml version='1.0'?>
<data>
<category>Dark</category>
<type>single</type>
<joke>My ex had an accident. I told the paramedics the wrong blood type for her. She'll finally experience what rejection is really like.</joke>
<flags>
<nsfw>false</nsfw>
<religious>false</religious>
<political>false</political>
<racist>false</racist>
<sexist>false</sexist>
</flags>
<id>154</id>
<error>false</error>
</data>
yaml
A succesful API call will return:
category: "Programming"
type: "single"
joke: "Your momma is so fat, you need to switch to NTFS to store a picture of her."
flags:
nsfw: false
religious: false
political: false
racist: false
sexist: false
id: 56
error: false
txt
A succesful API call will return:
Why does no one like SQLrillex?
He keeps dropping the database.
Errors
The wrapper can raise multiple different errors depending on what you did wrong.
The errors are descriptive enough that you should be able to solve them with the information provided in the error message. If not, feel free to ask me through one of the channels provided below.
submit_joke
Example
from jokeapi import Jokes
import asyncio
async def submit_new_joke():
j = await Jokes()
await j.submit_joke("Miscellaneous", "funny haha", {
"nsfw": False,
"religious": False,
"political": False,
"racist": False,
"sexist": False
}, lang="de")
asyncio.run(submit_new_joke())
Parameters
category
The category the joke is.
Options are:
programming
,
miscellaneous
,
dark
,
pun
Has no default value.
joke
The joke itself. Can either be a single string or a list/tuple, for the setup and delivery. Setup should be at index 0 in the tuple, delivery at 1.
Has no default value.
flags
The flags that the joke should have.
Options are:
nsfw
,
religious
,
political
,
racist
,
sexist
Has no default value.
lang
The language code for the language the joke it written in. E.g en for english, de for german.
Defaults to en
Contributors
Developer contact
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
File details
Details for the file jokeapi-1.0.5.tar.gz
.
File metadata
- Download URL: jokeapi-1.0.5.tar.gz
- Upload date:
- Size: 21.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.12 CPython/3.9.9 Linux/5.13.0-1023-aws
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7ed0c3f06241803880a3de5fa2078db7d758af8c278efe2782258bc5aa1fac7e |
|
MD5 | afa116fccf24397f8a4f98a23ce42a36 |
|
BLAKE2b-256 | bf5204efe72004b447c67ed833481d800bd42015b781776e9f180c2b89108344 |
File details
Details for the file jokeapi-1.0.5-py3-none-any.whl
.
File metadata
- Download URL: jokeapi-1.0.5-py3-none-any.whl
- Upload date:
- Size: 19.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.12 CPython/3.9.9 Linux/5.13.0-1023-aws
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3b1ee3985fb6c52914f916013b9fd71e0450f545fcea9032576d1f0d41d96cbf |
|
MD5 | fe9650534e89bb9905e8212d292e07d6 |
|
BLAKE2b-256 | 582246cba6a9017ff96a020ca5be440ac68d33559b22b51b44fe697ea35d4583 |