pylevel2/pylevel2/api.py

80 lines
2.6 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
import urlparse
from datetime import datetime
import os
class PyLevel2(object):
def __init__(self, base_url='https://level2.lu'):
"""
Query the Level 2 API.
"""
self.base_url = base_url
self.session = requests.Session()
self.session.headers.update({'content-type': 'application/json'})
def events(self, count=None, year=None, month=None):
"""
Get the events.
"""
path = 'events'
response = None
if count is None and year is None and month is None:
path = os.path.join(path, 'json')
url = urlparse.urljoin(self.base_url, path)
response = self.session.get(url)
elif count is not None:
path = os.path.join(path, '{}.json'.format(count))
url = urlparse.urljoin(self.base_url, path)
response = self.session.get(url)
elif year is not None and month is not None:
path = os.path.join(path, str(year), '{}.json'.format(month))
url = urlparse.urljoin(self.base_url, path)
response = self.session.get(url)
else:
# Invalid requests
pass
if response.status_code == 200:
to_return = []
data = response.json()
if data:
for event in data:
if event.get('start'):
event['start'] = datetime.fromtimestamp(event['start'])
if event.get('end'):
event['end'] = datetime.fromtimestamp(event['end'])
if event.get('date'):
# This value does not contains the year, so it is not really usable
# Get the day from the start time instead
event['date'] = event['start'].date()
to_return.append(event)
else:
# invalid query
pass
return to_return
else:
# Something bad happened
pass
def spaceapi(self):
"""
Gives information about Level2.
"""
url = urlparse.urljoin(self.base_url, 'spaceapi')
response = self.session.get(url)
if response.status_code == 200:
data = response.json()
if data:
data['state']['lastchange'] = datetime.fromtimestamp(data['state']['lastchange'])
else:
# invalid query
pass
return data
else:
# Something bad happened
pass