Showing
4 changed files
with
109 additions
and
0 deletions
.gitignore
0 → 100644
1 | +silpion.creds | ... | ... |
README.md
0 → 100644
1 | +# getcal | |
2 | + | |
3 | +A small script the retrieve calender entries from zimbra and format them for | |
4 | +the GNU calendar program. | |
5 | + | |
6 | +## Synopsis | |
7 | + | |
8 | + * ruby getcal.rb | |
9 | + * python getcal.py | |
10 | + | |
11 | +## Description | |
12 | + | |
13 | +There is a python and a ruby variant available. Both will write the generated | |
14 | +calendar entries to stdout. | |
15 | + | |
16 | +## Requirements | |
17 | + | |
18 | +Python or ruby. | |
19 | + | |
20 | +## Dependencies | |
21 | + | |
22 | +none | |
23 | + | |
24 | +## Contributing | |
25 | + | |
26 | +No contribution for now... | |
27 | + | |
28 | +## License | |
29 | + | |
30 | + This program is free software: you can redistribute it and/or modify | |
31 | + it under the terms of the GNU General Public License as published by | |
32 | + the Free Software Foundation, either version 3 of the License, or | |
33 | + (at your option) any later version. | |
34 | + | |
35 | + This program is distributed in the hope that it will be useful, | |
36 | + but WITHOUT ANY WARRANTY; without even the implied warranty of | |
37 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
38 | + GNU General Public License for more details. | |
39 | + | |
40 | + You should have received a copy of the GNU General Public License | |
41 | + along with this program. If not, see <http://www.gnu.org/licenses/>. | |
42 | + | |
43 | +## Author | |
44 | + | |
45 | +Georg Hopp <georg@steffers.org> | |
46 | + | ... | ... |
getcal.py
0 → 100644
1 | +import requests | |
2 | + | |
3 | +response = requests.get('url', auth=('user', 'password')) | |
4 | + | |
5 | +current = {} | |
6 | +for line in response.text.splitlines(): | |
7 | + if line[0:12] == 'BEGIN:VEVENT': | |
8 | + current = {'location': '', 'summary': '', 'start': ':00000000T080000'} | |
9 | + if line[0:7] == 'SUMMARY': current['summary'] = line[8:].strip() | |
10 | + if line[0:7] == 'DTSTART': current['start'] = line[8:].strip() | |
11 | + if line[0:8] == 'LOCATION': current['location'] = line[9:].strip() | |
12 | + if line[0:10] == 'END:VEVENT': | |
13 | + zone, timestr = current['start'].split(':') | |
14 | + sdate, stime = timestr.split('T') | |
15 | + hour, minute, sec = list(map(''.join, zip(*[iter(stime)]*2))) | |
16 | + line = "%s %s:%s (%s) %s" % ( | |
17 | + sdate, hour, minute, current['location'], current['summary']) | |
18 | + print(line.encode('utf8')) | |
19 | + | |
20 | +# vim: set ft=python et sta ts=4 sts=4 sw=4 tw=80: | ... | ... |
getcal.rb
0 → 100644
1 | +require 'net/http' | |
2 | + | |
3 | +uri = URI.parse("url") | |
4 | + | |
5 | +http = Net::HTTP.new(uri.host, uri.port) | |
6 | +http.use_ssl = true | |
7 | +http.verify_mode = OpenSSL::SSL::VERIFY_NONE | |
8 | + | |
9 | +request = Net::HTTP::Get.new(uri.request_uri) | |
10 | +request.basic_auth("user", "password") | |
11 | + | |
12 | +response = http.request(request) | |
13 | + | |
14 | +all = [] | |
15 | +current = {} | |
16 | +response.body.each_line do |line| | |
17 | + case | |
18 | + when line =~ /^BEGIN:VEVENT/ | |
19 | + current = {} | |
20 | + when line =~ /^SUMMARY/ | |
21 | + current[:summary] = line[line.index(':')+1..-1].strip #.gsub(/"/, '\\"') | |
22 | + when line =~ /^DTSTART/ | |
23 | + current[:start] = line[line.index(':')+1..-1].strip | |
24 | + when line =~ /^LOCATION/ | |
25 | + current[:location] = line[line.index(':')+1..-1].strip #.gsub(/"/, '\\"') | |
26 | + when line =~ /^END:VEVENT/ | |
27 | + all << current | |
28 | + else | |
29 | + # just ignore everything else right now. | |
30 | + end | |
31 | +end | |
32 | + | |
33 | +all.each do |c| | |
34 | + sdate, stime = c[:start].split('T') | |
35 | + hour = '08' | |
36 | + min = '00' | |
37 | + hour,min,sec = stime.scan(/../) unless stime.nil? | |
38 | + | |
39 | + puts "#{sdate} #{hour}:#{min} (#{c[:location]}) #{c[:summary]}" | |
40 | +end | |
41 | + | |
42 | +# vim: set ft=ruby et ts=2 sw=2: | ... | ... |
Please
register
or
login
to post a comment