generated from mwc/lab_riddles
1. I use Google almost every day, especially for searching things quickly. When I type something into the search bar and press enter, my device sends an HTTP request to Google’s servers with my search words. Google then sends back an HTTP response with the search results, which show up on my screen. 2. Yes, this lab helped me understand that my devices are constantly communicating with servers without me even noticing.
67 lines
2.1 KiB
Python
67 lines
2.1 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):
|
|
"Fetches a single riddle from the server"
|
|
route = "/show"
|
|
params = {'id': riddle_id}
|
|
response = requests.post(self.server_url + route, json=params)
|
|
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"
|
|
route = "/all"
|
|
response = requests.get(self.server_url + route)
|
|
if response.ok:
|
|
riddles=response.json()['riddles']
|
|
return choice(riddles)
|
|
else:
|
|
raise APIError(response.json()['errors'])
|
|
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'])
|
|
|
|
|
|
|