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