# 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" response =requests.get(self.server_url + route, params = {"id": riddle_id}) if response.ok: return response.json() else: raise APIError(response.json()['errors']) def get_random_riddle(self): "Fetches all riddles from the server and then randomly returns one" riddles = self.get_all_riddles() if len(riddles) == 0: raise APIError(["Sorry, there are no riddles on the server!"]) return choice(riddles) def add_riddle(self, question, answer): "Adds a new riddle to the server" route = "/new" response = request.post( self.server_url + route, json={"question": question, "answer": answer} ) if response.ok: return response.json() else: raise APIError(response.json()['errors'])