存档

2010年2月 的存档

2010年2月21日

2010年2月21日 Python

这几天起的很早,只怕是把时间都睡过去

起来第一件事情仍然是坐在电脑前面,不一会就憋了满身的汗,走出去买东西才发现天气已经很暖和了,是自己穿的太多了

从信箱里拿出新到的杂志,然后拿起亲爱的卡片机照了两张照片来做练习 —— 以便日后这双手和眼睛能配得上单反

p1030720

p1030721

接下来花点时间准备午饭和下午的自行车运动

今天的骑行需要到一个远离喧嚣的地方,太久没有转动我的脑子了、太久没有用心去思考过了 …… 我已经迷茫了 ……  我需要一个答案 —— 一个只有自己才能给出的答案

分类: 01 . 杂七杂八 标签:

利用 Rainlendar Lite 将Google Calendar 同步到本地

2010年2月7日 Python

BLOG最近折腾的厉害,服务器搬家两次,弄个站,真不容易 ……

1Rainlendar 介绍

Rainlendarhttp://www.rainlendar.net/)是一款桌面日历软件,类似于一个widget镶嵌在桌面上,它是利用标准的iCalendar格式来存储数据,分为两个版本:Lite Pro 版。

Pro版支持从outlookGoogle等日历更新事件,但是需要收费,Lite版是免费的,但仅仅是一个本地的日历工具,无法从网络或其他软件自动同步日历。

Railendar Lite版支持两类事件:EVENT TODO

2、其他Google日历客户端

其他的日历客户端我还是用过 Google 自己的 desktopyahoo widgetsunbird

Google desktop 产生的索引文件过大,而且很多功能用不上,所以几次安装之后都被我在两天之内删除。

不使用Yahoo widget是因为我的桌面管理器是 bblean,配在一起比较难看,而且有些widget好像在bblean下运行不太稳定。

Sunbird不用多说了,就是一个纯粹的客户端,好像不支持widget,装过一次,也没怎么用就删掉了。

Railendar Lite 小巧、占用资源小,对于一个仅需要日历显示的人来说,是最佳选择。

3iCalendar 介绍

iCalendar定义了一种文件格式,文件类型是:*.ics

关于iCalendar的详细介绍,可以看这里:http://en.wikipedia.org/wiki/Icalendar#cite_note-8

4Google Calendar配置

因为Railendar Lite 仅支持 TODO EVENT两类事件,因此,未来方便同步,我将Google Calendar上也设置了两类事件:Events Todo,相信对于大多数人来说,这已经足够了。

g-cal-1

如何在Google Calendar上添加多个日历就不说了。

接下来,我们要找出自己的Google Calendar的同步地址。

选中某个Google日历,例如:events,点那个下拉箭头,出现菜单,在菜单里选择“日历设置”,则会进入该日历的设置界面。

g-cal-2

g-cal-3

events的日历设置界面最下方,有两项:“日历网址”和“私人网址”。

如果你所选的Google Calendar没有共享的话,以下操作就在“私人网址”这里进行,反之则在“日历网址”处进行:点击那个绿色的“ICAL”图标,会弹出一个窗口,窗口中包含一个URL,这个URL就是你的Google Calendar对应的ics文件地址(如果该日历未共享,则URL中会包含一段随机字符,以保证日历地址不易被猜解,如果用户希望更改这串随机字符的话,可以点“重置私人网址”)。

g-cal-4

这里,记录下这串URL地址,通过这个地址可以下载一个ICS文件,该文件中就是以iCalendar格式保存的EVENTS日历中的内容,对于TODO日历,也做同样的操作,也会得到一个日历地址,这两个日历地址都记录下来。

5、配置PyRainlendar.ini

为了将Google Calendar同步到本地的Railendar中,需要借助脚本 PyRainlendar.py 来实现,而该脚本的配置文件就是 PyRainlendar.ini

PyRainlendar.ini 格式如下:

=======================================================

[Google_Calendar]

event=http://www.google.com/calendar/ical/xxxxxxxxx/basic.ics

todo=http://www.google.com/calendar/ical/xxxxxxxxxx/basic.ics

[Local_Files]

event=events.ics

todo=todo.ics

[Temporary_Files]

event=b63848kjf.ics

todo=7brkg7we.ics

=======================================================

[Google_Calendar] 指明了eventstodo两个Google Calendar的地址(就是上面保存的那两个地址)。

[Local_Files] 告诉程序这两个日历的最终文件名叫什么。

[Temporary_Files] 程序下载eventstodo两个日历到本地后,不能立刻被Railendar完全识别,需要做一些修改,而修改成被Railendar完全识别的ics文件之前,两个日历以临时文件名保存在本地,这里定义的就是两个日历的临时文件名,而[Local_Files]中则是程序处理完成后输出的最终文件。

注:如果不想要产生的ics文件保存到程序当前目录的话,需写明绝对路径。

6、运行PyRainlendar.py

如果你的机器上有 python 环境的话,需要安装icalendar 模块,模块下载地址:

http://codespeak.net/icalendar/

如果没有安装python环境的话,文章底部提供了已打包成为exePyRainlendar

执行 PyRainlendar.py PyRainlendar.exe 之后,在程序的目录中会产生两个文件:events.ics todo.ics (具体文件名根据ini配置文件中[Local_Files]下对eventtodo的配置而定)。

7、配置Rainlendar

右键点击任务栏中的 Rainlendar 图标并选择Options ,然后进入 Calendars 面板,点击 Add 按钮,会弹出添加iCalendar文件的向导。

options-1

根据向导,分别添加TODOEVENTS两个日历,而两个日历分别对应到 PyRainlendar.py 产生的 events.ics todo.ics 文件。

然后,选中Todo日历,并在 Settings 里设置 Read Only yes Monitor changesyes,对于Events 日历,也做同样的设置。

options-2

设置完成后,在Railendar上就可以看到从Google Calendar上同步下来的日历内容了,Railendar目前支持 WindowsLinux,这样在多个桌面或多台机器之间,只需维护Google Calendar一份日历就可以了。

desktop

8PyRailender.py

起初想将 PyRailender.py 写成一个Deamon,但怕耗资源,所以目前在Windows ubuntu 上都通过自带的任务计划来定时执行,我这里设置的是一天执行三次(早、中、晚各一次),这样资源消耗不大,而且基本能保证日历的时效性,不过在Windows下设置计划计划任务的时候要注意起始路径(也就是工作目录)。

另,程序在尝试下载日历的过程中,如果任何一个日历下载失败,都会自动退出,以防止使用错误的日历覆盖现有日历,同时会在当前目录的update.log中记录哪个日历下载出错,但未判断 update.log 文件大小 ……

另,昨天搜索到一个 GCALDaemon(http://gcaldaemon.sourceforge.net/ ),也是做类似的工作,但简单测试了一下,GCALDaemon跟新下来的ics文件没有区分VEVENTVTODO标签,这样,Railendar会把Google Calendar里的TODOEVENTS两个日历都识别为EVENT日历 —— 不知道是不是我的配置问题。

上面提到的PyRailender.py程序源代码和配置下载:PyRailender.py.txt PyRailender.ini
打包(
PyRailendar.exe)后程序下载:PyRailender.7z

# md5sum PyRainlendar_dist.7z
06bfaac544fd6541e39ac3463c903df1 *PyRainlendar_dist.7z

=============

update: 做了一些更新,把脚本做成了服务,参考 —— http://www.room702.cn/index.php/archives/419