Files
lab_riddles/api.py
zoeyande2 417f87fde0 Implemented methods for api.py & updated notes.md
1. I use my phone daily. I assume every time I access a website and put in my username/password, I am sending out HTPP post requests to the server and it is sending me information back to be decoded by my phone.
2. It made me realize just how complicated everything is. All of these features that we take as commonplace had to be tediously tested and created by people before we want use them the way we do now.
2026-02-12 13:01:24 -05:00

68 lines
2.2 KiB
Python

# 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'])