Skip to main content

Python interface for the Open Trivia DB

Project description

GitHub issues PyPI PyPI - Downloads GitHub license Code style

pyopentdb

Python interface for the Open Trivia DB API

👶 Dependencies

🛠️ Installation

Install from PyPI using pip, you may need to use pip3 depending on your installation.

pip install pyopentdb

🚀 Quick Start

To get started create an instance of OpenTDBClient. Helper enums are provided to make querying easier. Using these enums is not required, you may also pass the standard identifiers as integers/strings. Please see the API documentation for more information.

A session token is automatically generated when the object is initialized. The client will also attempt to automatically recycle the token when it expires or runs out of new questions.

Calling .get_questions() will return a QuestionSet object of Question objects. QuestionSet is a thin wrapper around a list that provides some additional convenience methods.

from pyopentdb import OpenTDBClient, Category, QuestionType, Difficulty

client = OpenTDBClient()
questions = client.get_questions(
    amount=5,
    category=Category.SCIENCE_NATURE,
    question_type=QuestionType.MULTIPLE,
    difficulty=Difficulty.MEDIUM
)
>>> questions
[
  Question(category=<Category.SCIENCE_NATURE: CategoryItem(id=17, name='Science & Nature')>, question_type=<QuestionType.MULTIPLE: 'multiple'>, difficulty=<Difficulty.MEDIUM: 'medium'>, question='All the following metal elements are liquids at or near room temperature EXCEPT:', choices=['Mercury', 'Caesium', 'Gallium', 'Beryllium'], answer='Beryllium', answer_index=3),
  Question(category=<Category.SCIENCE_NATURE: CategoryItem(id=17, name='Science & Nature')>, question_type=<QuestionType.MULTIPLE: 'multiple'>, difficulty=<Difficulty.MEDIUM: 'medium'>, question='The medical condition osteoporosis affects which part of the body?', choices=['Skin', 'Heart', 'Brain', 'Bones'], answer='Bones', answer_index=3),
  Question(category=<Category.SCIENCE_NATURE: CategoryItem(id=17, name='Science & Nature')>, question_type=<QuestionType.MULTIPLE: 'multiple'>, difficulty=<Difficulty.MEDIUM: 'medium'>, question='About how old is Earth?', choices=['4.5 Billion Years', '3.5 Billion Years', '5.5 Billion Years', '2.5 Billion Years'], answer='4.5 Billion Years', answer_index=0),
  Question(category=<Category.SCIENCE_NATURE: CategoryItem(id=17, name='Science & Nature')>, question_type=<QuestionType.MULTIPLE: 'multiple'>, difficulty=<Difficulty.MEDIUM: 'medium'>, question='What do you study if you are studying entomology?', choices=['the Brain', 'Fish', 'Humans', 'Insects'], answer='Insects', answer_index=3),
  Question(category=<Category.SCIENCE_NATURE: CategoryItem(id=17, name='Science & Nature')>, question_type=<QuestionType.MULTIPLE: 'multiple'>, difficulty=<Difficulty.MEDIUM: 'medium'>, question='Which of the following men does not have a chemical element named after him?', choices=['Albert Einstein', 'Enrico Fermi', 'Sir Isaac Newton', 'Niels Bohr'], answer='Sir Isaac Newton', answer_index=2)
]

Question choices are shuffled on each call. The answer_index field is provided to easily check the correct answer in the choice list.

Both Question and QuestionSet provide the .to_serializable method, which returns either an easily serializable output or a JSON formatted string.

⚙️ API Reference

OpenTDBClient

Client that handles HTTP requests and session tokens

Methods

get_questions

Get a set of questions based on query params

  • Parameters:

    • amount: int = 10 : Number of items to return between 1 and 50
    • category: (Category, int) = None : Category enum or ID, None for all
    • difficulty: (Difficulty, str) = None : Difficulty enum or name, None for all
    • question_type: (QuestionType, str) = None : Question type enum or name, None for all
    • retry: int = 5 : Number of times to retry call after 4xx or 5xx status code or nonzero response code
  • Returns:

    • QuestionSet

Question

Represents a single question returned by the API

Parameters

  • category: Category : Category enum
  • question_type: QuestionType : Question type enum
  • difficulty: Difficulty : Difficulty enum
  • question: str : Question string
  • choices: List[str] : List of shuffled provided choices
  • answer: str : Answer string
  • answer_index: int : Index of answer in choices list

Methods

to_serializable

Generate an easily serializable object or JSON formatted string

  • Parameters:

    • as_json: bool = False : Return a JSON formatted string
  • Returns:

    • (dict, str)

QuestionSet

Represents an array of questions returned by the API, behaves like a list

Parameters

  • items: List[Question] : Array of Question objects

Methods

to_serializable

Generate an easily serializable object or JSON formatted string

  • Parameters:

    • as_json: bool = False : Return a JSON formatted string
  • Returns:

    • (List[dict], str)

⚖️ License

MIT © 2020 Andrew Mickael

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

pyopentdb-0.0.4.tar.gz (9.8 kB view details)

Uploaded Source

Built Distribution

pyopentdb-0.0.4-py3-none-any.whl (12.5 kB view details)

Uploaded Python 3

File details

Details for the file pyopentdb-0.0.4.tar.gz.

File metadata

  • Download URL: pyopentdb-0.0.4.tar.gz
  • Upload date:
  • Size: 9.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.7.6

File hashes

Hashes for pyopentdb-0.0.4.tar.gz
Algorithm Hash digest
SHA256 0fde38d4aa025090b2326c9235746c904d92798235fec6150134a7080ccd1605
MD5 69dfabc0d60110b5dc095b1a31d17ce3
BLAKE2b-256 6ed4e23100197c0653bc4b3d130d1e880e29eba00879745bb9f445000f965354

See more details on using hashes here.

File details

Details for the file pyopentdb-0.0.4-py3-none-any.whl.

File metadata

  • Download URL: pyopentdb-0.0.4-py3-none-any.whl
  • Upload date:
  • Size: 12.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.7.6

File hashes

Hashes for pyopentdb-0.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 a2033040695c4abaecf395173e57710fa87158e0d29ecad4a94321ae2ca421a9
MD5 633f8b5b38443cd1d335472ce86d7a41
BLAKE2b-256 47838aa407289d7a6d0f82c2d0e8d9afa5190f8b16d8a577520b389dad190fe6

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