Perl Net :: Google ::日历事件发生

时间:2012-07-08 12:43:19

标签: perl google-calendar-api

我有以下代码(perl),但我不确定如何提取事件?

use Net::Google::Calendar;



my @cals = $parent->get_calendars;

for my $cal_selected (@cals) {

        printf "CALENDAR: %s\n", $cal_selected->title;

        $parent->set_calendar( $cal_selected );

                for ( $parent->get_events() ) {
                        my $title = $_->title || "";
                        my ($start, $end) = $_->when();

                        print "title: $title, start: $start, end: $end \n";
                }
}

所以,其中一个事件有一个“开始”变量,但它每4天跳一次 - 我在当前的输出中看不到它。

输出如下:

title: "Event 1", start: 2012-08-06T00:00:00, end: 2012-08-13T00:00:00 
title: "Event 2", start: 2012-07-05T00:00:00, end: 2012-07-05T00:00:00

“Event1”有一个非常清晰的开始和结束日期,6天..

看到“事件2”在同一天,但发生的时间是2012-07-05,2012-07-09,2012-07-13 但是我没有在输出中看到它......

1 个答案:

答案 0 :(得分:1)

您可能需要尝试使用recurrence方法。问题是如果你使用它并且你没有安装Data::ICal模块,你将获得undef而不是错误。不幸的是,如果您安装了undef,也会获得Data::ICal,并且不会再次出现。那只是糟糕的模块编程。

重复方法返回Data::Ical::Entry::Event个对象。

从那里,我不完全确定该怎么做。 Data::ICal::Entry::Event文档非常稀疏。我必须阅读iCalendar RFC,其中提到该字段存储在名为rdate的内容中。在rdate模块中提到了多个Data::ICal::Entry::Event属性,但没有说明如何访问它,或者它的格式是什么。

我认为你假设使用Data::ICal::DateTime来帮助解析这些信息。此模块有一个重复发生方法,允许您拉出所有rdates的 union 。不幸的是,它使用Data::ICal对象,并且您有一个Data::ICal::Entry::Event对象。也许这是Data::ICal的子类,所以也许它仍然有用。

不幸的是,我没有谷歌日历设置,所以我真的没办法玩这个。很抱歉没有更明确的这一点。但是,我希望这能以正确的方式引导你。


还有一项建议:使用Data::Dumper转储您获得的各种对象。这将帮助您了解正在发生的事情以及如何在这些对象中存储信息。运气好的话,您将能够准确找出获取所需信息所需的方法和模块。

偷看并不礼貌,但是当你不理解这个问题时,在书后面查找答案有时会有所帮助。

相关问题