From b9b3cdba8f2728deaa30edbc255530ca9f989ac6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20P=C3=A9rez-Cerezo?= Date: Fri, 22 Sep 2017 18:44:34 +0200 Subject: Added backends for various indian places --- common.py | 27 ++++++++++++++++++++++++++- mathemensa.py | 26 +++++++++++--------------- mensa.py | 32 +++++++++++++++++++------------- satyam.py | 34 ++++++++++++++++++++++++++++++++++ singh.py | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 141 insertions(+), 29 deletions(-) create mode 100644 satyam.py create mode 100644 singh.py 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("

"+etree.tostring(j).split("\n")[2].split("<")[0]+"

").text.strip() # really extremely dirty hack + st = str(etree.tostring(j)).split("\\n")[2].split("<")[0] + name = j[0].text + ", " + etree.fromstring("

%s

"%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 +# -*- 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("

%s

"%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)) + -- cgit v1.2.3