1

次のコード (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";
                }
}

そのため、イベントの 1 つに「開始」変数がありますが、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 にありますが、出力自体にはそれが表示されません...

4

1 に答える 1

1

recurrenceメソッドを試す必要があるかもしれません。問題は、これを使用し、Data::ICalモジュールがインストールされていない場合undef、エラーではなくエラーが発生することです。残念ながら、インストールしたundef場合も発生し、再発はありません。Data::ICalそれはただの悪いモジュールプログラミングです。

recurrence メソッドはData::Ical::Entry::Eventオブジェクトを返します。

そこから、私は何をすべきか完全にはわかりません。Data::ICal::Entry::Eventドキュメントは本当にまばらです。このフィールドrdate. rdateモジュールには複数のプロパティについての言及がありData::ICal::Entry::Eventますが、アクセス方法やその形式については何も述べていません。

この情報を解析するには、 Data::ICal::DateTimeを使用すると思われます。このモジュールには、すべての rdateの結合を引き出すことができる reoccurrence メソッドがあります。残念ながら、それはData::ICalオブジェクトを使用しており、オブジェクトがありData::ICal::Entry::Eventます。たぶんそれは のサブクラスなData::ICalので、まだ動作するでしょう。

残念ながら、私は Google カレンダーをセットアップしていないので、これをいじる方法がありません。これについてより明確でなくて申し訳ありません。しかし、これがあなたを正しい方向に導くことを願っています。


もう 1 つの推奨事項: Data::Dumperを使用して、取得しているさまざまなオブジェクトをダンプします。これは、何が起こっているのか、これらのオブジェクトに情報がどのように格納されているのかを理解するのに役立ちます。運が良ければ、必要な情報を取得するために必要なメソッドとモジュールを正確に把握できるようになります。

のぞくのは失礼ですが、質問が分からないときは、本の後ろにある答えを調べると役立つことがあります。

于 2012-07-08T16:33:07.577 に答える