From c4f7224630e3ee7d87d0b498a5c160e35be32f41 Mon Sep 17 00:00:00 2001 From: Christine Dodrill Date: Sun, 9 Aug 2015 14:34:29 -0700 Subject: [PATCH] Add python client --- client/ponyapi.py | 77 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 client/ponyapi.py diff --git a/client/ponyapi.py b/client/ponyapi.py new file mode 100644 index 0000000..42e63a2 --- /dev/null +++ b/client/ponyapi.py @@ -0,0 +1,77 @@ +import requests + +""" +# PonyAPI module for Python programs + +This is written in a metaprogramming style. + +Usage: + +```python +import ponyapi + +episodes = ponyapi.all_episodes() + +for episode in episodes: + print episode +``` + +Available methods: + + all_episodes() -> return all information on all episodes + newest() -> return information on the newest episode + random() -> return a random episode + get_season(snum) -> return all episodes in season snum + get_episode(snum, enum) -> return info on season snum episode enum + search(query) -> return all episodes that have query in the title +""" + +API_ENDPOINT = "http://ponyapi.apps.xeserv.us" + +## _base_get :: Text -> IO (Either (Maybe Episode) [Episode]) +def _base_get(endpoint, *fragments): + def doer(*args): + r = None + + assert len(fragments) == len(args) + + if len(fragments) == 0: + r = requests.get(API_ENDPOINT + endpoint) + else: + url = API_ENDPOINT + endpoint + + for i in range(len(fragments)): + url = url + "/" + fragments[i] + "/" + str(args[i]) + + r = requests.get(url) + + if r.status_code != 200: + raise Exception("Not found or server error") + + return r.json() + + return doer + +# all_episodes :: IO [Episode] +all_episodes = _base_get("/all") + +# newest :: IO Episode +newest = _base_get("/newest") + +# random :: IO Episode +random = _base_get("/random") + +# get_season :: Int -> IO [Episode] +get_season = _base_get("", "season") + +# get_episode :: Int -> Int -> IO Episode +get_episode = _base_get("", "season", "episode") + +def search(query): + params = {"q": query} + r = requests.get(API_ENDPOINT + "/search", params=params) + + if r.status_code != 200: + raise Exception("Not found or server error") + + return r.json()