From a1374ebf4d268fee890a6086fd3c4450b0a8a5b6 Mon Sep 17 00:00:00 2001 From: KevinMidboe Date: Sat, 6 Jul 2019 13:30:02 +0200 Subject: [PATCH] testing out python alternative --- main.py | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 main.py diff --git a/main.py b/main.py new file mode 100644 index 0000000..c65550e --- /dev/null +++ b/main.py @@ -0,0 +1,87 @@ +import requests +from redis import Redis + +import pickle +from urllib.parse import urljoin, quote +import os +from pprint import pprint + +BASE_URL = 'https://api.kevinmidboe.com/' +AUTHORIZATION_TOKEN = None +CACHE_FILE = './cache.pickle' +CACHE = Redis(host='localhost', port=6379, db=0) + +def writeObjectToCache(key, obj): + print('object to cache', obj) + pickledObj = pickle.dumps(obj) + CACHE.set(key, pickledObj) + +def readCache(key): + value = CACHE.get(key) + return pickle.loads(value) + +def flushCache(): + CACHE.flushdb(0) + +def releaseFromCache(request): + return False + +def authenticateSeasoned(username, password): + global AUTHORIZATION_TOKEN + uri = urljoin(BASE_URL, '/api/v1/user/login') + payload = { 'username': username, 'password': password } + r = requests.post(uri, data=payload) + data = r.json() + AUTHORIZATION_TOKEN = data['token'] + +def fetchRequests(pages=1): + uri = urljoin(BASE_URL, '/api/v2/request') + r = requests.get(uri) + return r.json() + +def releasesFromRequest(request): + uri = urljoin(BASE_URL, '/api/v1/pirate/search?query=' + quote(request['title'])) + cacheHit = readCache(uri) + if cacheHit: + return cacheHit + headers = { 'authorization': AUTHORIZATION_TOKEN } + + r = requests.get(uri, headers=headers) + + if r.status_code == requests.codes.unauthorized: + print('uath') + authenticateSeasoned('kevin', 'test123') + releasesFromRequest(request) + return + + elif r.status_code == requests.codes.ok: + response = r.json() + writeObjectToCache(uri, response) + return response + + else: + return None + + +def main(): + requests = fetchRequests() + results = requests['results'] + totalPages = requests['total_pages'] + + mediaWithReleases = [] + + for result in results: + releases = releasesFromRequest(result) + mediaWithReleases.append({'rel': releases, 'media': result}) + pprint(mediaWithReleases[:3]) + + for l in mediaWithReleases[:3]: + if len(l['rel']['results']) > 0: + print(l['rel']['results'][0]['release_type']) + + print(totalPages) + + + +if __name__ == '__main__': + main()