diff options
Diffstat (limited to 'backends')
-rw-r--r-- | backends/mathemensa.py | 44 | ||||
-rw-r--r-- | backends/mathemensa.yapsy-plugin | 3 | ||||
-rw-r--r-- | backends/satyam.py | 38 | ||||
-rw-r--r-- | backends/satyam.yapsy-plugin | 3 | ||||
-rw-r--r-- | backends/singh.py | 54 | ||||
-rw-r--r-- | backends/singh.yapsy-plugin | 3 | ||||
-rw-r--r-- | backends/studentenwerk.py | 72 | ||||
-rw-r--r-- | backends/studentenwerk.yapsy-plugin | 3 |
8 files changed, 220 insertions, 0 deletions
diff --git a/backends/mathemensa.py b/backends/mathemensa.py new file mode 100644 index 0000000..b98ab1d --- /dev/null +++ b/backends/mathemensa.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- + +import urllib.request, urllib.error, urllib.parse +from lxml import etree +from lxml.cssselect import CSSSelector +import re + +import xml.sax.saxutils as saxutils +import html5lib +import datetime +from base import * +from yapsy.IPlugin import IPlugin + +class Mathemensa(IPlugin) : + def register_restaurants(self) : + r = Restaurant("Mathemensa", "Mathemensa", self, "dummy") + register_restaurant(r) + + def get_food_items(self) : + 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://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') + fl = [] + for k in sel(document)[0][weekday] : + if k.tag.endswith("ul") : + for j in k : + price = j[1].text + 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 "Gemüseplatte" in name : + veg = 1 + fl.append(Food(name, price, "Menü", veg)) + return fl diff --git a/backends/mathemensa.yapsy-plugin b/backends/mathemensa.yapsy-plugin new file mode 100644 index 0000000..d122795 --- /dev/null +++ b/backends/mathemensa.yapsy-plugin @@ -0,0 +1,3 @@ +[Core] +Name = Mathemensa +Module = mathemensa
\ No newline at end of file diff --git a/backends/satyam.py b/backends/satyam.py new file mode 100644 index 0000000..a20d6bb --- /dev/null +++ b/backends/satyam.py @@ -0,0 +1,38 @@ +import urllib.request, urllib.error, urllib.parse +from lxml import etree +from lxml.cssselect import CSSSelector +import html5lib +from base import * +import re +import sys +from yapsy.IPlugin import IPlugin + +class Satyam(IPlugin): + def register_restaurants(self) : + r = Restaurant("Satyam", "Satyam", self, "dummy") + register_restaurant(r) + def get_food_items(self) : + s = sys.stderr + 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 €", "") + sys.stderr = s + return [Food("Mittagstisch Express", "5,95 €", "Mittagstisch", 2, name[3:-1])] + + +# if __name__ == "__main__": +# food = get_food_items() +# print(formt(food)) diff --git a/backends/satyam.yapsy-plugin b/backends/satyam.yapsy-plugin new file mode 100644 index 0000000..59207ad --- /dev/null +++ b/backends/satyam.yapsy-plugin @@ -0,0 +1,3 @@ +[Core] +Name = Satyam +Module = satyam
\ No newline at end of file diff --git a/backends/singh.py b/backends/singh.py new file mode 100644 index 0000000..a3b3119 --- /dev/null +++ b/backends/singh.py @@ -0,0 +1,54 @@ +import urllib.request, urllib.error, urllib.parse +from lxml import etree +from lxml.cssselect import CSSSelector +import html5lib +import re +import sys +import datetime +from base import * +from yapsy.IPlugin import IPlugin + +class Signh(IPlugin) : + def register_restaurants(self) : + r = Restaurant("Singh", "Mathe-Café", self, "dummy") + register_restaurant(r) + def get_food_items(self) : + 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)) + diff --git a/backends/singh.yapsy-plugin b/backends/singh.yapsy-plugin new file mode 100644 index 0000000..7faf774 --- /dev/null +++ b/backends/singh.yapsy-plugin @@ -0,0 +1,3 @@ +[Core] +Name = Mathe-Café +Module = singh
\ No newline at end of file diff --git a/backends/studentenwerk.py b/backends/studentenwerk.py new file mode 100644 index 0000000..ce6d2fd --- /dev/null +++ b/backends/studentenwerk.py @@ -0,0 +1,72 @@ +# Copyright (C) 2017 Gabriel Perez-Cerezo <gabriel@gpcf.eu> +# -*- coding: utf-8 -*- + +import urllib.request, urllib.error, urllib.parse +from lxml import etree +from lxml.cssselect import CSSSelector +import html5lib +from base import * +from yapsy.IPlugin import IPlugin +import multiprocessing + + +from yapsy import NormalizePluginNameForModuleName as normalize + +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 pr_f(j) : + i,k = j + food = get_food_items(k, ignore_nudelauswahl=True) + return (i,"*"*20+i+"*"*20+"\n"+formt(food)) + +class Studentenwerk(IPlugin) : + def register_restaurants (self) : + 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"} + for h,n in mensenliste.items() : + r = Restaurant(normalize(h), h, self, "dummy", [n]) + register_restaurant(r) + def get_food_items(self, 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 = 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') + groups = [e for e in groupsel(document)] + fl = [] + for i in groups : + try: + name = CSSSelector('.splGroup')(i)[0].text + except: + raise NoMenuError from None + sel = CSSSelector('.splMeal') + meals = [e for e in sel(i)] + for m in meals : + namesel = CSSSelector('.bold') + nm = namesel(m)[0].text + if ignore_nudelauswahl and "Nudelauswahl" in nm: + continue + pricesel = CSSSelector('.col-md-3') + veg = 0 + if len(pricesel(m)[0]) >= 2 : + if "15" in pricesel(m)[0][1].attrib["src"] : + veg = 2 + elif "1.png" in pricesel(m)[0][1].attrib["src"] : + veg = 1 + price = pricesel(m)[-1].text.strip() + fl.append(Food(nm, price, name, veg)) + return fl + + + +# format: +# if __name__ == "__main__": +# 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/backends/studentenwerk.yapsy-plugin b/backends/studentenwerk.yapsy-plugin new file mode 100644 index 0000000..ad2a994 --- /dev/null +++ b/backends/studentenwerk.yapsy-plugin @@ -0,0 +1,3 @@ +[Core] +Name = Studentenwerk +Module = studentenwerk
\ No newline at end of file |