Archived
1
0
Fork 0
This commit is contained in:
Lukas Winkler 2017-06-09 07:56:55 +02:00
parent e33c68cb05
commit 4d65120d56
7 changed files with 87 additions and 9 deletions

1
.gitignore vendored
View file

@ -1,2 +1,3 @@
__pycache__/ __pycache__/
.idea .idea
config.py

View file

@ -15,7 +15,7 @@ create table menus
venue int not null, venue int not null,
meal int not null, meal int not null,
constraint eindeutig constraint eindeutig
unique (venue, date), unique (venue, date, meal),
constraint menus_meals_id_fk constraint menus_meals_id_fk
foreign key (meal) references hunger.meals (id) foreign key (meal) references hunger.meals (id)
) )

11
main.py
View file

@ -1,14 +1,13 @@
import json
import pymysql.cursors import pymysql.cursors
import config
import parser import parser
# Connect to the database # Connect to the database
connection = pymysql.connect(host='localhost', connection = pymysql.connect(host=config.host,
user='root', user=config.user,
password='Findus', password=config.password,
db='hunger', db=config.db,
charset='utf8mb4', charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor) cursorclass=pymysql.cursors.DictCursor)

View file

@ -40,7 +40,7 @@ def get_menus():
descr += " " + extradescr descr += " " + extradescr
date = datetime.strptime(datestring, "%d.%m.").replace(year=datetime.today().year) date = datetime.strptime(datestring, "%d.%m.").replace(year=datetime.today().year)
tagesflade = { tagesflade = {
"date": date.strftime("%Y-%m-%d"), "date": date.isoformat(),
"name": descr "name": descr
} }
tagesfladen.append(tagesflade) tagesfladen.append(tagesflade)

View file

@ -38,7 +38,7 @@ def get_menus():
if not any(str.isdigit(c) for c in strong.text): if not any(str.isdigit(c) for c in strong.text):
title.append(strong.text.strip()) title.append(strong.text.strip())
tagesflade = { tagesflade = {
"date": date.strftime("%Y-%m-%d"), "date": date.isoformat(),
"name": " ".join(title).replace("\n", " ") "name": " ".join(title).replace("\n", " ")
} }
day_p = p # findNext should find the second mea day_p = p # findNext should find the second mea

View file

@ -1,6 +1,13 @@
beautifulsoup4==4.6.0 beautifulsoup4==4.6.0
certifi==2017.4.17 certifi==2017.4.17
chardet==3.0.3 chardet==3.0.3
click==6.7
Flask==0.12.2
idna==2.5 idna==2.5
itsdangerous==0.24
Jinja2==2.9.6
MarkupSafe==1.0
PyMySQL==0.7.11
requests==2.17.3 requests==2.17.3
urllib3==1.21.1 urllib3==1.21.1
Werkzeug==0.12.2

71
server.py Normal file
View file

@ -0,0 +1,71 @@
from datetime import date
from pprint import pprint
import pymysql
from flask import Flask, jsonify, url_for, redirect, request, abort
from flask.json import JSONEncoder
app = Flask(__name__)
import config
# Connect to the database
connection = pymysql.connect(host=config.host,
user=config.user,
password=config.password,
db=config.db,
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
@app.route('/venue/')
def get_venues():
with connection.cursor() as cursor:
sql = "SELECT * FROM venues"
cursor.execute(sql)
venues = cursor.fetchall()
for venue in venues:
# venue["meals_url"] = url_for("get_meals", venueid=venue["id"])
venue["meals_url"] = url_for("get_meals", venueid=venue["id"], _external=True)
return jsonify(venues)
@app.route('/venue/<int:venueid>/')
def get_meals(venueid):
with connection.cursor() as cursor:
select = request.args.get("select")
if not select or select == "week":
sql_range = " AND YEARWEEK(date, 1) = YEARWEEK(CURDATE(), 1)"
elif select == "today":
sql_range = " AND date=CURDATE()"
else:
return abort(400)
sql = """SELECT venue, date, name, description
FROM menus
JOIN meals ON meals.id = menus.meal
WHERE venue = %s"""
cursor.execute(sql + sql_range, venueid)
menues = cursor.fetchall()
return jsonify(menues)
@app.route("/")
def redirect_to_correct_api():
return redirect(url_for("get_venues"))
class CustomJSONEncoder(JSONEncoder):
def default(self, obj):
try:
if isinstance(obj, date):
return obj.isoformat()
iterable = iter(obj)
except TypeError:
pass
else:
return list(iterable)
return JSONEncoder
if __name__ == "__main__":
app.json_encoder = CustomJSONEncoder
app.run(host="0.0.0.0", debug=True)