Python wrapper for the open-trivia-database API
py -m pip install -U opentdb-py
# latest (unstable)
py -m pip install -U git+https://github.com/Marseel-E/opentdb-py import asyncio
from trivia import Client, utils
async def main() -> None:
token = await Client.get_session_token()
async with Client(token) as client:
try:
data = await client.get_questions(amount=1)
except utils.EmptyToken:
await client.reset_session_token()
else:
data = await client.get_questions(amount=1)
print(data)
await trivia_client.close_session()
if __name__ == '__main__:
asyncio.run(main()) {
"category":"Entertainment: Video Games",
"type":"boolean",
"difficulty":"medium",
"question":"In the Resident Evil series, Leon S. Kennedy is a member of STARS.",
"correct_answer":"False",
"incorrect_answers":["True"]
} Sends a POST call to the API and gets the desired data.
Parameters
- session_token ( str ) - The session token.
Methods
async get_session_token
async reset_session_token
async close_session
async get_questions
async get_categories
async get_category_questions_count
async get_global_questions_count
await Client.get_session_token()This function is a coroutine.
Fetches a session token from the API.
Returns
Session Token.
Return Type
str
await Client(...).reset_session_token()This function is a coroutine.
Resets the session token.
await Client(...).close_session()This function is a coroutine.
Closes the client session.
await Client(...).questions(
amount=10,
category=Category.undefined,
difficulty=Difficulty.undefined,
question_type=QuestionType.both,
encoding=ResponseEncoding.default
) This function is a coroutine.
Fetches the requests amount of questions from the API with the appropriate parameters.
Parameters
- amount ( int ) - The amount of questions to return.
- category ( Category ) - The category of questions.
- difficulty ( Difficulty ) - The difficulty of the question (undefined=any, easy, medium, hard).
- question_type ( QuestionType ) - The type of question (both, multiple choice, true/false).
- encoding ( ResponseEncoding ) - The encoding of the API response.
Returns
A list of questions.
Return Type
QuestionData
await Client(...).categories()This function is a coroutine.
Fetches a list of all categories the API has.
Returns
A list of categories.
Return Type
CategoriesList
await Client(...).category_questions_count(category=Category.general_knowledge)This function is a coroutine.
Fetches statistics about a specific category.
Parameters
- category ( Category ) - The category to fetch data from.
Returns
Statistics about the category.
Return Type
CategoryQuestionsCount
await Client(...).global_questions_count()This function is a coroutine.
Fetches statistics about all the categories.
Returns
Global statistics
Return Type
GlobalQuestionsCount
<NoResults>: [Code 1] Could not return results. The API doesn't have enough questions for your query. (Ex. Asking for 50 Questions in a Category that only has 20.)This exception is raised when a response_code 1 is returned.
The API doesn't have enough questions for the given query.
<InvalidParameter>: [Code 2] Contains an invalid parameter. Arguements passed in aren't valid. (Ex. Amount = Five)This exception is raised when a response_code 2 is returned.
One or more of the query parameters are invalid.
<TokenNotFound>: [Code 3] Session Token does not exist.This exception is raised when a response_code 3 is returned.
The session token was not specified.
<TokenEmpty>: [Code 4] Session Token has returned all possible questions for the specified query. Resseting the Token is necassery.This exception is raised when a response_code 4 is returned.
The session token is about to expire. (session tokens last 6 hours only)
class QuestionData(TypedDict):
category: str
type: str
difficulty: str
question: str
correct_answer: str
incorrect_answers: List[str]class QuestionResponse(TypedDict):
response_code: int
results: List[QuestionData]class CategoryData(TypedDict):
id: int
name: strclass CategoriesList(TypedDict):
trivia_categories: List[CategoryData]class CategoryQuestionsCount(TypedDict):
category_id: int
category_questions_count: List[_CategoryQuestionsCount]class GlobalQuestionsCount(TypedDict):
overall: _GlobalQuestionsCount
categories: Dict[str, _GlobalQuestionsCount]class ResponseEncoding(Enum):
default: None = None
url: str = "url3986"
base64: str = "base64"class QuestionDifficulty(Enum):
undefined: None = None
easy: str = "easy"
medium: str = "medium"
hard: str = "hard"class QuestionType(Enum):
both: None = None
multiple_choice: str = "multiple"
true_false: str = "boolean"class QuestionCategory(Enum):
undefined: None = None
general_knowledge: int = 9
entertainment_books: int = 10
entertainment_film: int = 11
entertainment_music: int = 12
entertainment_music_and_theatres: int = 13
entertainment_television: int = 14
entertainment_video_games: int = 15
entertainment_board_games: int = 16
science_and_nature: int = 17
science_computers: int = 18
science_mathematics: int = 19
mythology: int = 20
sports: int = 21
geography: int = 22
history: int = 23
politics: int = 24
art: int = 25
celebrities: int = 26
animals: int = 27
vehicles: int = 28
entertainment_comics: int = 29
science_gadgets: int = 30
entertainment_japanese_anime_and_manga: int = 31
entertainment_cartoons_and_animations: int = 32