aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel Pérez-Cerezo <gabriel@gpcf.eu>2017-09-22 18:44:34 +0200
committerGabriel Pérez-Cerezo <gabriel@gpcf.eu>2017-09-22 18:44:34 +0200
commitb9b3cdba8f2728deaa30edbc255530ca9f989ac6 (patch)
tree593aafd3a33a59d5e4f538a46de738b7df41ce79
parent21ee7c5fde7e87de751dbfc5008e8ae2e41a4238 (diff)
downloadmensa-b9b3cdba8f2728deaa30edbc255530ca9f989ac6.tar.gz
mensa-b9b3cdba8f2728deaa30edbc255530ca9f989ac6.tar.bz2
mensa-b9b3cdba8f2728deaa30edbc255530ca9f989ac6.zip
Added backends for various indian places
-rw-r--r--common.py27
-rw-r--r--mathemensa.py26
-rw-r--r--mensa.py32
-rw-r--r--satyam.py34
-rw-r--r--singh.py51
5 files changed, 141 insertions, 29 deletions
diff --git a/common.py b/common.py
index 3ebea36..9b6cd43 100644
--- a/common.py
+++ b/common.py
@@ -1,8 +1,33 @@
# Common classes and methods.
class Food :
- def __init__(self,name, price="", category=None, veggie=False) :
+ def __init__(self,name, price="", category="Essen", veggie=False, desc=None) :
self.name = name
self.price = price
self.category = category
self.veggie = veggie
+ self.desc=desc
+
+def formt (food) :
+ cat = []
+ vegkeys = [ "", "Vegetarian", "Vegan" ]
+ r = ""
+ food.sort(key=lambda foo: foo.category)
+ for i in food:
+ if not i.category in cat :
+ cat.append(i.category)
+ if not i.category == None :
+ r=r+ i.category+"\n"
+ r=r+"\t" + i.name.ljust(80) + "\t"+ i.price.ljust(20) + vegkeys[i.veggie]+"\n"
+ if i.desc :
+ r = r+"\t "+i.desc+"\n"
+ return r
+
+foodsources = {}
+
+class Foodsource :
+ def __init__(self, name, function, args):
+ pass
+
+def register_foodsource():
+ pass
diff --git a/mathemensa.py b/mathemensa.py
index b4f97af..9abfc75 100644
--- a/mathemensa.py
+++ b/mathemensa.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-import urllib2
+import urllib.request, urllib.error, urllib.parse
from lxml import etree
from lxml.cssselect import CSSSelector
@@ -8,17 +8,18 @@ import xml.sax.saxutils as saxutils
import html5lib
import datetime
from common import Food
+from common import formt
def get_food_items() :
weekday = datetime.datetime.today().weekday()
if weekday > 4 :
- print "Error: No food today"
+ print("Error: No food today")
return ""
user_agent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64)'
headers = {'User-Agent': user_agent}
- req = urllib2.Request('http://personalkantine.personalabteilung.tu-berlin.de/', headers=headers)
- response = urllib2.urlopen(req)
+ req = urllib.request.Request('http://personalkantine.personalabteilung.tu-berlin.de/', headers=headers)
+ response = urllib.request.urlopen(req)
the_page = response.read()
document = html5lib.parse(the_page, treebuilder="lxml")
sel = CSSSelector('.Menu__accordion')
@@ -27,19 +28,14 @@ def get_food_items() :
if k.tag.endswith("ul") :
for j in k :
price = j[1].text
- name = j[0].text + etree.fromstring("<p>"+etree.tostring(j).split("\n")[2].split("<")[0]+"</p>").text.strip() # really extremely dirty hack
+ st = str(etree.tostring(j)).split("\\n")[2].split("<")[0]
+ name = j[0].text + ", " + etree.fromstring("<p>%s</p>"%st).text.strip() # really extremely dirty hack
veg = 0
- if "(v)" in name or u"Gemüseplatte" in name :
+ if "(v)" in name or "Gemüseplatte" in name :
veg = 1
- fl.append(Food(name, price, u"Menü", veg))
+ fl.append(Food(name, price, "Menü", veg))
return fl
+
if __name__ == "__main__":
food = get_food_items()
- cat = []
- vegkeys = [ "", "Vegetarian", "Vegan" ]
- for i in food:
- if not i.category in cat :
- cat.append(i.category)
- if not i.category == None :
- print i.category
- print "\t" + i.name.ljust(80) + "\t"+ i.price.ljust(20) + vegkeys[i.veggie]
+ print(formt(food))
diff --git a/mensa.py b/mensa.py
index 1ecef11..b37c5cd 100644
--- a/mensa.py
+++ b/mensa.py
@@ -1,17 +1,23 @@
# Copyright (C) 2017 Gabriel Perez-Cerezo <gabriel@gpcf.eu>
+# -*- coding: utf-8 -*-
-import urllib2
+import urllib.request, urllib.error, urllib.parse
from lxml import etree
from lxml.cssselect import CSSSelector
import html5lib
from common import Food
+from common import formt
+import multiprocessing
+
+mensenliste = {"TU Hardenberg" : "mensa-tu-hardenbergstra%C3%9Fe", "TU Marchstraße": "cafeteria-tu-marchstra%C3%9Fe", "TU Skyline": "cafeteria-tu-skyline", "TU Architektur": "cafeteria-tu-architektur", "TU Ackerstraße": "cafeteria-tu-ackerstra%C3%9Fe"}
+
def get_food_items(mensa="mensa-tu-hardenbergstra%C3%9Fe", ignore_nudelauswahl=False) :
user_agent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64)'
headers = {'User-Agent': user_agent}
- req = urllib2.Request('https://www.stw.berlin/mensen/mensa-tu-hardenbergstra%C3%9Fe.html', headers=headers)
- response = urllib2.urlopen(req)
+ req = urllib.request.Request('https://www.stw.berlin/mensen/%s.html' % mensa, headers=headers)
+ response = urllib.request.urlopen(req)
the_page = response.read()
document = html5lib.parse(the_page, treebuilder="lxml")
groupsel = CSSSelector('.splGroupWrapper')
@@ -37,16 +43,16 @@ def get_food_items(mensa="mensa-tu-hardenbergstra%C3%9Fe", ignore_nudelauswahl=F
fl.append(Food(nm, price, name, veg))
return fl
-
+def pr_f(j) :
+ i,k = j
+ food = get_food_items(k, ignore_nudelauswahl=True)
+ return (i,"*"*20+i+"*"*20+"\n"+formt(food))
+
# format:
if __name__ == "__main__":
- food = get_food_items("", ignore_nudelauswahl=True)
- cat = []
- vegkeys = [ "", "Vegetarian", "Vegan" ]
- for i in food:
- if not i.category in cat :
- cat.append(i.category)
- if not i.category == None :
- print i.category
- print "\t" + i.name.ljust(80) + "\t"+ i.price.ljust(20) + vegkeys[i.veggie]
+ pool = multiprocessing.Pool(4)
+ k = pool.map(pr_f, list(mensenliste.items()))
+ k.sort(key=lambda x: x[0])
+ for i in k :
+ print(i[1])
diff --git a/satyam.py b/satyam.py
new file mode 100644
index 0000000..19e8387
--- /dev/null
+++ b/satyam.py
@@ -0,0 +1,34 @@
+import urllib.request, urllib.error, urllib.parse
+from lxml import etree
+from lxml.cssselect import CSSSelector
+import html5lib
+from common import Food
+from common import formt
+import re
+import sys
+
+
+def get_food_items() :
+ sys.stderr = open("/dev/null", "w")
+ user_agent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64)'
+ headers = {'User-Agent': user_agent}
+
+ req = urllib.request.Request('http://www.mysatyam.de/angebote/express-mittagstisch.html', headers=headers)
+ response = urllib.request.urlopen(req)
+ the_page = response.read()
+ document = html5lib.parse(the_page, treebuilder="lxml")
+ groupsel = CSSSelector('.news-latest-item-content')
+ k = etree.tostring(groupsel(document)[0])
+ name = re.sub(r'<.+?>', ' ', str(k))
+ name = etree.fromstring("<p>%s</p>"%name).text.strip()
+ name = name.replace("\\n", "")
+ name = " ".join(name.split())
+
+ name = name.replace("5,95 €", "")
+# print(name[3:-1])
+ return [Food("Mittagstisch Express", "5,95 €", "Mittagstisch", 2, name[3:-1])]
+
+
+if __name__ == "__main__":
+ food = get_food_items()
+ print(formt(food))
diff --git a/singh.py b/singh.py
new file mode 100644
index 0000000..8f272a7
--- /dev/null
+++ b/singh.py
@@ -0,0 +1,51 @@
+import urllib.request, urllib.error, urllib.parse
+from lxml import etree
+from lxml.cssselect import CSSSelector
+import html5lib
+from common import Food
+from common import formt
+import re
+import sys
+import datetime
+
+
+def get_food_items() :
+ sys.stderr = open("/dev/null", "w")
+ weekday = datetime.datetime.today().weekday()
+ if weekday > 4 :
+ print("Error: No food today")
+ return ""
+ user_agent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64)'
+ headers = {'User-Agent': user_agent}
+
+ req = urllib.request.Request('http://singh-catering.de/cafe/', headers=headers)
+ response = urllib.request.urlopen(req)
+ the_page = response.read()
+ document = html5lib.parse(the_page, treebuilder="lxml")
+ groupsel = CSSSelector('.menu-list__items')
+ myorder=[0,3,1,4,2]
+ mylist = [ groupsel(document)[i] for i in myorder]
+ i = mylist[weekday]
+ fl = []
+ nmsel = CSSSelector('.menu-list__item')
+ for k in nmsel(i):
+ veg = 0
+ titsel = CSSSelector('.item_title')
+ name = titsel(k)[0].text
+ dscsel = CSSSelector('.desc__content')
+ desc = dscsel(k)[0].text
+ prsel = CSSSelector('.menu-list__item-price')
+ price = prsel(k)[0].text
+ vegsel = CSSSelector('.menu-list__item-highlight-title')
+ if len(vegsel(k)) > 0 :
+ if "VEGETARISCH" in vegsel(k)[0].text :
+ veg = 1
+ elif "VEGAN" in vegsel(k)[0].text :
+ veg = 2
+ fl.append(Food(name, price, "Essen", veg, desc))
+ return fl
+
+if __name__ == "__main__":
+ food = get_food_items()
+ print(formt(food))
+