Skip to content

Commit d1849f0

Browse files
committed
using shelve
1 parent 5f97663 commit d1849f0

File tree

5 files changed

+80
-39
lines changed

5 files changed

+80
-39
lines changed

Diff for: apis/meal.py

+13-4
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,36 @@
11
from flask import request, jsonify
22
from flask_restplus import Namespace, Resource
3-
from core.meal import *
3+
from core.meal import Meal
4+
import shelve
45

56
api = Namespace("meal", description="Get school meals")
7+
Meals = Meal()
8+
f = shelve.open("meal.db")
69

710

811
@api.route("/")
912
class Meal(Resource):
1013
def post(self):
1114
ymd = request.get_json()["action"]["params"]
1215
y, m, d = ymd["y"], ymd["m"], ymd["d"]
13-
meal = get_meal(y,m,d)
16+
breakfast, lunch, dinner, snack = (
17+
f["breakfast"],
18+
f["lunch"],
19+
f["dinner"],
20+
f["snack"],
21+
)
22+
1423
return jsonify(
1524
version="2.0",
1625
template={
1726
"outputs": [
1827
{
1928
"simpleText": {
20-
"text": f"오늘의 급식입니다.\n아침: {meal[0]}\n점심: {meal[1]}\n저녁: {meal[2]}\n 간식: {meal[3]}"
29+
"text": f"오늘의 급식입니다.\n아침: {breakfast}\n점심: {lunch}\n저녁: {dinner}\n 간식: {snack}"
2130
}
2231
}
2332
]
24-
}
33+
},
2534
)
2635

2736

Diff for: core/meal.py

+59-35
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,66 @@
11
import requests
22
from bs4 import BeautifulSoup
33
from datetime import datetime
4+
import shelve
45

56
now = datetime.now()
7+
f = shelve.open("meal.db")
68

9+
class Meal:
10+
def __init__(self):
11+
self.y = now.year
12+
self.m = now.month
13+
self.d = now.day
14+
self.meal = self.get_meal(self.y, self.m, self.d)
15+
self.update_meal()
16+
self.write_meal()
717

8-
def get_raw(y, m, d):
9-
"""
10-
Gets raw meal HTML from http://hana.hs.kr/life/meal.asp
11-
"""
12-
date = {"yy": y, "mm": m, "dd": d}
13-
r = requests.get("http://hana.hs.kr/life/meal.asp", params=date)
14-
r.encoding = "utf-8"
15-
return r.text
16-
17-
18-
def parse_meal(raw):
19-
"""
20-
Parses raw meal HTML into a list
21-
"""
22-
meals = []
23-
soup = BeautifulSoup(raw, "lxml")
24-
for e in soup.select_one(".today_meal").find_all("td"):
25-
meals.append(e.text)
26-
return meals
27-
28-
29-
def get_meal(y, m, d):
30-
"""
31-
Uses get_raw() and parse_meal() to return meals.
32-
Defaults to current year, month, and day if not specified.
33-
"""
34-
if y == None:
35-
y = now.year
36-
if m == None:
37-
m = now.month
38-
if d == None:
39-
d = now.day
40-
41-
raw = get_raw(y, m, d)
42-
return parse_meal(raw)
18+
def get_raw(self, y, m, d):
19+
"""
20+
Gets raw meal HTML from http://hana.hs.kr/life/meal.asp
21+
"""
22+
date = {"yy": y, "mm": m, "dd": d}
23+
r = requests.get("http://hana.hs.kr/life/meal.asp", params=date)
24+
r.encoding = "utf-8"
25+
return r.text
26+
27+
def parse_meal(self, raw):
28+
"""
29+
Parses raw meal HTML into a list
30+
"""
31+
meals = []
32+
soup = BeautifulSoup(raw, "lxml")
33+
for e in soup.select_one(".today_meal").find_all("td"):
34+
meals.append(e.text)
35+
return meals
36+
37+
def get_meal(self, y, m, d):
38+
"""
39+
Uses get_raw() and parse_meal() to return meals.
40+
Defaults to current year, month, and day if not specified.
41+
"""
42+
if y == None:
43+
y = now.year
44+
if m == None:
45+
m = now.month
46+
if d == None:
47+
d = now.day
48+
49+
raw = self.get_raw(y, m, d)
50+
return self.parse_meal(raw)
51+
52+
53+
def update_meal(self):
54+
self.y = 2019
55+
self.m = 3
56+
self.d = 29
57+
self.meal = self.get_meal(self.y, self.m, self.d)
58+
print(self.meal)
59+
60+
61+
def write_meal(self):
62+
f["breakfast"] = self.meal[0]
63+
f["lunch"] = self.meal[1]
64+
f["dinner"] = self.meal[2]
65+
f["snack"] = self.meal[3]
66+
f.close()

Diff for: meal.db.bak

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
'breakfast', (0, 152)
2+
'lunch', (512, 130)
3+
'dinner', (1024, 11)
4+
'snack', (1536, 10)

Diff for: meal.db.dat

1.53 KB
Binary file not shown.

Diff for: meal.db.dir

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
'breakfast', (0, 152)
2+
'lunch', (512, 130)
3+
'dinner', (1024, 11)
4+
'snack', (1536, 10)

0 commit comments

Comments
 (0)