From 81a7f0a4a478ae3283c3bd4a481e3839ec50bcd9 Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Fri, 20 Jan 2017 15:07:26 +0200 Subject: [PATCH] Add cronjob to fetch new timetable data from HSL --- .gitignore | 2 ++ add_cronjob.sh | 11 +++++++++++ infoscreen/hsl_fetcher.py | 28 +++++++++++++++++++++++++++ infoscreen/management/commands/hsl.py | 27 +++----------------------- logs/README | 1 + readme.md | 5 +++++ sikweb/settings-sample.py | 2 +- 7 files changed, 51 insertions(+), 25 deletions(-) create mode 100755 add_cronjob.sh create mode 100644 infoscreen/hsl_fetcher.py create mode 100644 logs/README diff --git a/.gitignore b/.gitignore index 74d0380..47ca469 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,5 @@ members/migrations/* infoscreen/migrations/* webapp/migrations/* .idea/ +logs/ +logs/* diff --git a/add_cronjob.sh b/add_cronjob.sh new file mode 100755 index 0000000..f6ecd20 --- /dev/null +++ b/add_cronjob.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +echo "Adding cron entries..." +# write out current crontab +crontab -l > temp_crontab +# echo new cron into cron file +printf "*/5 * * * * source $PWD/../virtualenv.sikweb/bin/activate && python $PWD/manage.py hsl &>$PWD/logs/fetch_hsl.log\n\n" >> temp_crontab +# install new cron file +crontab temp_crontab +rm temp_crontab +echo "Done. View your crontab with 'crontab -l' and edit it with 'crontab -e'." diff --git a/infoscreen/hsl_fetcher.py b/infoscreen/hsl_fetcher.py new file mode 100644 index 0000000..8ba1351 --- /dev/null +++ b/infoscreen/hsl_fetcher.py @@ -0,0 +1,28 @@ +from infoscreen.models import HSLDataModel +from django.conf import settings +import urllib.request +import json + + +class HSLFetcher: + + 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)) diff --git a/infoscreen/management/commands/hsl.py b/infoscreen/management/commands/hsl.py index 0b3ce94..5884478 100644 --- a/infoscreen/management/commands/hsl.py +++ b/infoscreen/management/commands/hsl.py @@ -1,30 +1,9 @@ -import json -import urllib.request -from django.conf import settings from django.core.management.base import BaseCommand -from infoscreen.models import HSLDataModel - +from infoscreen.hsl_fetcher import HSLFetcher class Command(BaseCommand): help = 'Loads HSL timetables and save to json file.' def handle(self, *args, **options): - 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)) + fetcher = HSLFetcher() + fetcher.fetch() diff --git a/logs/README b/logs/README new file mode 100644 index 0000000..af2fb9c --- /dev/null +++ b/logs/README @@ -0,0 +1 @@ +This is a log directory. diff --git a/readme.md b/readme.md index 2d755f9..91242c1 100644 --- a/readme.md +++ b/readme.md @@ -56,6 +56,11 @@ pip install --upgrade pip pip install -r requirements.txt ``` +### Register cron jobs + +``` +./add_cronjob.sh +``` ## Configure Django settings diff --git a/sikweb/settings-sample.py b/sikweb/settings-sample.py index 2d9870e..2805754 100644 --- a/sikweb/settings-sample.py +++ b/sikweb/settings-sample.py @@ -130,7 +130,7 @@ GOOGLE_RECAPTCHA_SECRET_KEY = "YOUR-PRIVATE-KEY" #Logger level LOGGERLEVEL = logging.ERROR -LOGPATH = expanduser("~")+ "/debug.log" +LOGPATH = "logs/debug.log" # Internationalization # https://docs.djangoproject.com/en/1.9/topics/i18n/