iCalendar ファイルを 携帯用の vCalendar 形式に変換

様々なカレンダーでの共通形式でもある iCalendar 形式のデータを、 携帯のスケジュールとして送る時に vCalendar 形式に変換する必要がある。 以前は、シコシコと変換してたけど、改めて iCalendar 関連の perl モジュールを 見ていたら、最近は完成度の高いモジュールが揃っている。 改めて書き直したら、実質20行未満になった。

#!/usr/bin/perl

use Jcode ;
use Text::vFile::asData ;
use MIME::QuotedPrint ;

$eol = "\r\n" ;

sub ical2vcal( $ ) {
my $fh = shift ;
my $data = Text::vFile::asData->new->parse( $fh ) ;
foreach $line ( Text::vFile::asData->generate_lines( $data ) ) {

# 必要に応じて文字列をQuotedPrintableに変換
if ( $line =~ /^(SUMMARY|LOCATION):(.*)$/ ) {
($key,$value) = ($1,$2) ;
## 無駄なコード変換だったので削除
# $line = "$key;ENCODING=QUOTED-PRINTABLE:"
# .encode_qp( Jcode->new( $value )->sjis , $eol ) ; $line = "$key;ENCODING=QUOTED-PRINTABLE:" .encode_qp( $value , $eol ) ; } elsif ( $line =~ /^(CATEGORIES):(.*)$/ ) { $line = "CATEGORIES:MISCELLANEOUS" ; } elsif ( $line =~ /^(SEQUENCE|CLASS|STATUS|TRANSP):(.*)$/ ) { $line = "" ; } print "$line$eol" if ( $line ne "" ) ; } } if ( @ARGV > 0 ) { foreach $file ( @ARGV ) { open my $fh , $file or die "Can't open file:$!" ; ical2vcal( $fh ) ; close $fh ; } } else { ical2vcal( STDIN ) ; }
追記:携帯に送ると、CATEGORIES,SEQUENCEなどが問題となったので処理を追加。
 

2017年2月

      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28        

ウェブページ

アーカイブ

Webデータ

このブログ記事について

このページは、T-Saitohが2009年7月19日 23:58に書いたブログ記事です。

ひとつ前のブログ記事は「日食観測できるかな...」です。

次のブログ記事は「twitterのフィードを追加」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。