44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
from infoscreen.models import HSLDataModel
|
|
from django.conf import settings
|
|
import urllib.request
|
|
import json
|
|
import logging
|
|
from datetime import datetime, timedelta
|
|
|
|
class HSLFetcher:
|
|
|
|
last_fetched = datetime.fromtimestamp(0) # epoch
|
|
INTERVAL = 1 # minutes
|
|
|
|
logging.info("Set up scheduled HSL API fetch every {} minutes".format(INTERVAL))
|
|
|
|
def fetch_if_needed(self):
|
|
if datetime.now() - HSLFetcher.last_fetched > timedelta(minutes=HSLFetcher.INTERVAL):
|
|
self.fetch()
|
|
|
|
def fetch(self):
|
|
location_coords = (2545565, 6675319)
|
|
src = urllib.request.urlopen(
|
|
"http://api.reittiopas.fi/hsl/prod/?userhash={}&request=stops_area¢er_coordinate={},{}"
|
|
.format(settings.HSL_USERHASH, location_coords[0], location_coords[1]))\
|
|
.read().decode("utf-8")
|
|
|
|
data = json.loads(src)
|
|
|
|
arr = []
|
|
for element in data:
|
|
src = urllib.request.urlopen(
|
|
"http://api.reittiopas.fi/hsl/prod/?userhash={}&request=stop&code={}"
|
|
.format(settings.HSL_USERHASH, element['code'])).read().decode("utf-8")
|
|
|
|
parsed = json.loads(src)[0]
|
|
arr.append({"name": parsed['name_fi'], "lines": parsed['lines'],
|
|
"dist": element['dist'], "departures": parsed['departures']})
|
|
|
|
HSLDataModel.objects.create(data=json.dumps(arr))
|
|
|
|
now = datetime.now()
|
|
HSLFetcher.last_fetched = now
|
|
|
|
logging.info("Fetched HSL timetable data with size {} bytes.".format(len(src)))
|