1

残念ながら、私の大学は怠惰すぎて、Google カレンダーを作成したり.ics、公開イベントを作成したりできませんでした。代わりに、日付のリストを含む書式設定されたテキスト ファイルを電子メールで送信することを選択します。.ics上記のリストをiCalendar( )ファイルに変換するPerlスクリプトがあります。.icsそれを後で Google カレンダーにインポートしたいと考えています。

これまでのところ、スクリプトは非常にうまく機能していますが、標準の通知 (電子メールとポップアップ) を無効にしイベントを (デフォルトのビジーではなく) 空き時間に設定したいと考えています。問題は、 Data::ICal::Entry::FreeBusyおよびData::ICal::Entry::Alarm::Displayのドキュメントから有用なものが得られないことです。$event->add_properties(...)以下のスクリプトの行に追加する適切なプロパティを教えてください。

#!/usr/bin/perl -w
# Converts a specially formated text file (list of events) into an .ics
# (iCalendar) file for import into Google-Calendar or other calendar
# applications.

use Date::ICal;
use Data::ICal;
use Data::ICal::Entry::Event;

# Read file into one long string
open FILE, $ARGV[0] or die "Couldn't open file: $!";
my $fstring = join("", <FILE>);
close FILE;

# Prepare calendar
my $calendar = Data::ICal->new();
$calendar->add_properties( method=>"PUBLISH",);

# Add events depending on what was found in file
my @events = split("\n\n", $fstring);
foreach $eventstring (@events) {
    my $eventstring =~ s/(\d+\.\d+\.\d+)//; # remove date from the string
    my $datestring = $1;                    #+but save it for processing:
    ($day, $month, $year) = split(/\./, $datestring);
    $title = ( split /\n/, $eventstring )[1]; # what is left is the title

    my $event = Data::ICal::Entry::Event->new();
    $event->add_properties(
        summary     => "Kolloquium: $title",
        description => $eventstring,          #+and the long description
        dtstart     => Date::ICal->new( year=>"20$year", month=>$month, day=>$day, hour=>17, min=>15 )->ical,
        dtend       => Date::ICal->new( year=>"20$year", month=>$month, day=>$day, hour=>18, min=>15 )->ical,
        dtstamp     => Date::ICal->new( epoch => time )->ical,
        # MISSING HERE: Right FREEBUSY and ALARM properties. PLEASE HELP!
    );
    $calendar->add_entry($event);
}

print $calendar->as_string;

よろしくお願いします!

4

1 に答える 1

1

まず、いくつかの一般的な注意事項:

  1. 追加use strict;
  2. myループに追加し、foreach my $eventstring (@events) {下の行から削除しますmy $eventstring =~ s/(\d+\.\d+\.\d+)//;
  3. 良い習慣として、ベアワードを避け、FILEファイルハンドルをスカラー変数として定義するようにしてください。open my $FILE,$ARGV[0]

それでは、質問に答えるために、これら 2 つのモジュールをインポートします...

use Data::ICal::Entry::FreeBusy;
use Data::ICal::Entry::Alarm::Display;

...そして、コードに次を追加する必要があると思います:

my $event = Data::ICal::Entry::Event->new();
$event->add_properties(
    summary     => "Kolloquium: $title",
    description => $eventstring,          #+and the long description
    dtstart     => Date::ICal->new( year=>"20$year", month=>$month, day=>$day, hour=>17, min=>15 )->ical,
    dtend       => Date::ICal->new( year=>"20$year", month=>$month, day=>$day, hour=>18, min=>15 )->ical,
    dtstamp     => Date::ICal->new( epoch => time )->ical,
);
my $vfreebusy = Data::ICal::Entry::FreeBusy->new();
$vfreebusy->add_properties(
    organizer => 'MAILTO:jsmith@host.com',
    freebusy   => Date::ICal->new( epoch => ... )->ical . '/' . Date::ICal->new( epoch => ... )->ical, #don't forget to define the time!
);
my $valarm = Data::ICal::Entry::Alarm::Display->new();
$valarm->add_properties(
    description => "Wake up!",
    trigger   => [ Date::ICal->new( epoch => ... )->ical, { value => 'DATE-TIME' } ], #don't forget to define the time!
);

$calendar->add_entry($valarm);
$calendar->add_entry($vfreebusy);
$calendar->add_entry($event);
于 2013-10-02T09:48:10.307 に答える