我有以下代码(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 但是我没有在输出中看到它......
答案 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转储您获得的各种对象。这将帮助您了解正在发生的事情以及如何在这些对象中存储信息。运气好的话,您将能够准确找出获取所需信息所需的方法和模块。
偷看并不礼貌,但是当你不理解这个问题时,在书后面查找答案有时会有所帮助。