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__/
.idea
config.py

View file

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

11
main.py
View file

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

View file

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

View file

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

View file

@ -1,6 +1,13 @@
beautifulsoup4==4.6.0
certifi==2017.4.17
chardet==3.0.3
click==6.7
Flask==0.12.2
idna==2.5
itsdangerous==0.24
Jinja2==2.9.6
MarkupSafe==1.0
PyMySQL==0.7.11
requests==2.17.3
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)