# 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): #done "Fetches a single riddle from the server" route = "/show" params = {"id": riddle_id} response = requests.get(self.server_url + route, json=params) if response.ok: return response.json() else: raise APIError(response.json()['errors']) def get_random_riddle(self): #done "Fetches all riddles from the server and then randomly returns one" allriddles = self.get_all_riddles() count = len(allriddles) mychoice = choice(range(0,count)) return self.get_riddle(mychoice) def add_riddle(self, question, answer): #done "Adds a new riddle to the server" route = "/new" allriddles = self.get_all_riddles() newid = len(allriddles)+1 params = {"correct":0,"difficulty":0,"guesses":0,"id":newid,"question":question,"answer":answer} response = requests.post(self.server_url+route,json=params) if response.ok: print("Added successfully") else: raise APIError(response.json()['errors'])