85 lines
2.3 KiB
Python
85 lines
2.3 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
from ferry.app import app
|
|
from flask import render_template
|
|
import requests
|
|
from datetime import datetime
|
|
|
|
|
|
@app.route('/')
|
|
def ferry():
|
|
data = ferry_request()
|
|
|
|
info = False
|
|
for value in data:
|
|
if 'info' in value:
|
|
info = True
|
|
break
|
|
return render_template('ferry.html', data=data, info=info)
|
|
|
|
@app.route("/time")
|
|
def timeleft():
|
|
return render_template("timeleft.html")
|
|
|
|
|
|
def extract_time(json):
|
|
|
|
try:
|
|
return json['DepartureTime']
|
|
except:
|
|
return -1
|
|
|
|
|
|
# <GT name ="DepartureTime" value='$dateadd(0.10:15:00)' />
|
|
def ferry_request():
|
|
url = 'http://api.trafikinfo.trafikverket.se/beta/data.json'
|
|
headers = {'Content-Type': 'text/xml'}
|
|
xml_data = """<?xml version='1.0' encoding='utf-8'?>
|
|
<REQUEST>
|
|
<LOGIN authenticationkey="ac4b2399b54648d09a30db1a33fc6eda" />
|
|
<QUERY objecttype="FerryAnnouncement">
|
|
<FILTER>
|
|
<AND>
|
|
<EQ name="Route.Id" value="14" />
|
|
<AND>
|
|
<GT name="DepartureTime" value="$now"/>
|
|
<LT name ="DepartureTime" value='$dateadd(0.04:15:00)' />
|
|
</AND>
|
|
</AND>
|
|
</FILTER>
|
|
<INCLUDE>DepartureTime</INCLUDE>
|
|
<INCLUDE>Info</INCLUDE>
|
|
<INCLUDE>ToHarbor.Id</INCLUDE>
|
|
<INCLUDE>ToHarbor.Name</INCLUDE>
|
|
<INCLUDE>FromHarbor.Name</INCLUDE>
|
|
<INCLUDE>FromHarbor.Id</INCLUDE>
|
|
</QUERY>
|
|
</REQUEST>
|
|
"""
|
|
r = requests.post(url, data=xml_data, headers=headers)
|
|
|
|
if r.status_code == 200:
|
|
data = r.json()
|
|
dataFerry = data['RESPONSE']['RESULT'][0]['FerryAnnouncement']
|
|
dataFerry.sort(key=extract_time, reverse=False)
|
|
|
|
result = []
|
|
for item in dataFerry:
|
|
mydict = {}
|
|
timestamp = item['DepartureTime']
|
|
timestamp = datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S")
|
|
timestamp = timestamp.strftime("%H:%M:%S")
|
|
mydict['time'] = timestamp
|
|
|
|
if 'Info' in item:
|
|
info = item['Info'][0].encode('utf-8')
|
|
mydict['info'] = item['Info']
|
|
|
|
result.append(mydict)
|
|
|
|
return result
|
|
else:
|
|
print r.text
|
|
return 0
|