# RiddleAPI # --------- # By Chris Proctor # The Riddle API takes care of connecting to the server. import requests from random import choice class APIError(Exception): "A custom error we'll use when something goes wrong with the API" class RiddleAPI: "Provides an easy way for Python programs to interact with a Riddle Server" def __init__(self, server_url): self.server_url = server_url def get_all_riddles(self): "Fetches all the riddles from the server" route = "/all" response = requests.get(self.server_url + route) if response.ok: return response.json()['riddles'] else: raise APIError(response.json()['errors']) def guess_riddle(self, riddle_id, guess): "Submits a guess to the server. Returns True or False" route = "/guess" params = {'id': riddle_id, 'answer': guess} response = requests.post(self.server_url + route, json=params) if response.ok: return response.json() else: raise APIError(response.json()['errors']) def get_riddle(self, riddle_id): "Fetches a single riddle from the server" route = "/show" params = {'id': riddle_id} response = requests.get(self.server_url + route, params=params) if response.ok: return response.json() else: raise APIError(response.json()['errors']) #done def get_random_riddle(self): "Fetches all riddles from the server and then randomly returns one" riddles = self.get_all_riddles() return choice(riddles) #done def add_riddle(self, question, answer): "Adds a new riddle to the server" route = "/new" params = {'question': question, 'answer': answer} response = requests.post(self.server_url + route, json=params) if response.ok: return response.json() else: raise APIError(response.json()['errors']) #done