Eetlijst.nl vanaf de cli 
In ons studentenhuis gebruiken we de website eetlijst.nl om de administratie rondom het eten bij te houden. Op een dood moment besloot ik mijn python-vaardigheden wat op te vijzelen en heb een script gebouwd om vanaf de cli dit overzicht op te vragen.
Onderstaande code vergt twee parameters, namelijk de gebruikersnaam en het wachtwoord voor de eetlijst website.
code:
De uitvoer is als volgt:
Dit overzicht kan onder andere gebruikt worden voor automatische mailingen en, wat ik van plan ben, notificatie voor als ik boodschappen moet doen vanuit mijn werk of school. Have fun!
Onderstaande code vergt twee parameters, namelijk de gebruikersnaam en het wachtwoord voor de eetlijst website.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
| #!/usr/bin/python
import urllib, re, sys
def usage():
print "Usage:\n\t%s username password" % sys.argv[0]
print "\n\tusername, password - login credentials for www.eetlijst.nl"
def overview_page(username, password):
eetlijsturl = "http://eetlijst.nl/%s?%s" % (username, password)
return urllib.urlopen(eetlijsturl)
def process_page(page_pointer):
start_row = re.compile("<td.*(ma|di|wo|do|vr|za|zo)"
" ([0-9][0-9]?-[0-9][0-9]?)")
end_row = re.compile("</tr>")
selection_row = re.compile("(leeg|nop|eet|kook).gif")
in_row = False
summary = ""
for x in page_pointer:
if (in_row and end_row.search(x)):
#End of a row
if len(summary.strip("-| ")) > 4:
print "%s total: %d" % (summary, total)
in_row = False
if (not in_row and start_row.search(x)):
#Processing column
in_row = True
total = 0
date, day = process_title(start_row, x)
summary = "%-5s |" % date
if (in_row and selection_row.search(x)):
#Start of a row
selection, count = process_setting(selection_row, x)
if count > 1:
summary += " %s%-d |" % (selection, count)
else:
summary += " %s |" % selection
total += count
def process_title(regex, title_row):
response = regex.search(title_row)
day = response.group(1)
date = response.group(2)
return (date, day)
def process_setting(regex, setting_row):
groups = regex.search(setting_row).groups()
selection = groups[0]
count = len(regex.findall(setting_row))
selection_letter = '-'
if (selection == 'eet'):
selection_letter = 'E'
if (selection == 'kook'):
selection_letter = 'K'
if (selection == 'nop'):
selection_letter = 'X'
if selection_letter == '-' or selection_letter == 'X':
count = 0
return (selection_letter, count)
if len(sys.argv) != 3:
usage()
exit(1)
page_pointer = overview_page(sys.argv[1], sys.argv[2])
process_page(page_pointer) |
De uitvoer is als volgt:
11-1 | E | E | - | K | - | - | total: 3 12-1 | - | K | - | E | - | - | total: 2 13-1 | E | E | K3 | - | - | - | total: 5
Dit overzicht kan onder andere gebruikt worden voor automatische mailingen en, wat ik van plan ben, notificatie voor als ik boodschappen moet doen vanuit mijn werk of school. Have fun!
|
|
Simple iPaq Familiar file transfers |
|
|
Oh lovely, a RRoD (update) |
Reacties
Dat is een heel leuk script, het jammere hieraan is wel: als er iets wijzigt aan de HTML code hang je.
Jammer dat zulke websites geen RSS providen
Jammer dat zulke websites geen RSS providen
Krijg je K3 te eten woensdag?
correctie dinsdag
Hmm het script klinkt leuk maar ik heb er weinig aan. De site daarin tegen is de oplossing voor het gezeik hier in huis. Ik ga me er zeker in verdiepen en kijken hoe en wat. Bedankt!!
Mooi script. Maar Eetlijst ondersteunt wel RSS uitvoer. Kijk maar eens op de instellingenpagina, en dan onderaan on het kopje gadgets.
zo heb ik op deze manier ook al vele html strippers gebouwd, die zorgen dat belangrijke dingen als appointments enz via exchange in mn agenda terecht komen.
rooster van werk, rooster van school
f1time spel dat ik heb gespeeld. data logging was daar het belangrijkste om snel een setup voor het racen te vinden. Via de site moet je betalen, en was het redelijk beperkt. Mijn tool sloeg alles op. Echter was ik na een jaartje er wel weer op uitgekeken.
Ben benieuwd of er nog meer mensen zijn met dit soort tools, en dan vooral de toepassing ervan.
Wel jammer dat erg veel van dergelijke handige sites, heel beperkt gebruik maken van xml/rss en al helemaal niet van een webservice (incl wsdl), terwijl dat juist lekker universeel is je dan erg vrij bent in het programmeren.
rooster van werk, rooster van school
f1time spel dat ik heb gespeeld. data logging was daar het belangrijkste om snel een setup voor het racen te vinden. Via de site moet je betalen, en was het redelijk beperkt. Mijn tool sloeg alles op. Echter was ik na een jaartje er wel weer op uitgekeken.
Ben benieuwd of er nog meer mensen zijn met dit soort tools, en dan vooral de toepassing ervan.
Wel jammer dat erg veel van dergelijke handige sites, heel beperkt gebruik maken van xml/rss en al helemaal niet van een webservice (incl wsdl), terwijl dat juist lekker universeel is je dan erg vrij bent in het programmeren.
BeautifulSoup is ook vaak erg handig voor het parsen van HTML, hoewel je bij dit script nog wel wegkomt met een paar simpele regexes.
Er is inderdaad wel degelijk een RSS feed beschikbaar op Eetlijst.nl. Is het mogelijk om die als input te gebruiken voor dit Python script? Die feed vreet namelijk een stuk minder resources van de Eetlijst-server (en daar is iedereen mee geholpen).
Als jullie nog suggesties hebben om de RSS feed mee uit te breiden of te verbeteren, dan laat dit gerust weten d.m.v. een mailtje aan de site.
Als jullie nog suggesties hebben om de RSS feed mee uit te breiden of te verbeteren, dan laat dit gerust weten d.m.v. een mailtje aan de site.