IT勉強会カレンダーをフィルター

IT勉強会カレンダーといえば,勉強会フリーク必見なネットで最も充実しているすばらしいカレンダーです.id:hanazukin ++.id:nitoyonさんの紹介記事がくわしい.

さて,すばらしく情報量のおおいIT勉強会カレンダーなのですが,開催されている勉強会が多すぎでちょっと見やすいとは言えません.これはしかたないので,個人的に行きそうな勉強会だけのカレンダーにするためのフィルタースクリプトを書きました.

use strict;
use warnings;
use utf8;
use Encode;
use Data::ICal;
use URI::Fetch;

my $IT_CAL_URL = "http://www.google.com/calendar/ical/fvijvohm91uifvd9hratehf65k%40group.calendar.google.com/public/basic.ics";

my $res = URI::Fetch->fetch($IT_CAL_URL)
    or die URI::Fetch->errstr;

# Data::ICalがマルチバイト文字を壊すのでutf8フラグを立てて対処
my $data = decode_utf8($res->content);
my $calendar = Data::ICal->new(data=> $data);

my $entries = $calendar->entries;
$calendar->{entries} = []; # 無理矢理entriesを初期化する
for my $entry (@$entries) {
    my $summaries = $entry->property('summary');
    unless ($summaries) {
        $calendar->add_entry($entry);
        next;
    }
    my $summary = $summaries->[0];
    $calendar->add_entry($entry) if $summary->value =~ m/(?:大阪|梅田|京都|兵庫|神戸|滋賀)/xms;
}

my $output = $calendar->as_string;
print encode_utf8($output);
$ perl ical_filter.pl > /path/to/ical

とかやって使います.関西圏の勉強会だけを見れてすっきり.

あとはこれを,GoogleCalendarで使えるように自分のWebサーバにicalを置くようにして,それを適当にcronで1週間に一回くらい更新するようにしてます.

微妙にはまったポイントがあって,GoogleCalendarに普通に作ったicalファイルを登録すると文字化けしまくってしまいました.どうやら,GoogleCalendarはHTTPのヘッダのContentTypeのcharsetで文字コードを判別するみたいなので,icalをおいてるWebサーバのhttpd.confに

# ical形式のcharsetをUTF-8に設定
AddCharset UTF-8 .ics

とか書く必要があるようです.AddCharsetとかはじめて使ったぜ.

追記

id:hasegawayosukeさんの情報によるとGoogleがデフォルトでフィルター機構を用意しているらしいです.

http://www.google.com/calendar/ical/fvijvohm91uifvd9hratehf65k@group.calendar.google.com/public/full?q=%E5%A4%A7%E9%98%AA%7C%E6%A2%85%E7%94%B0%7C%E4%BA%AC%E9%83%BD%7C%E5%85%B5%E5%BA%AB%7C%E7%A5%9E%E6%88%B8%7C%E6%BB%8B%E8%B3%80
# q = "大阪|梅田|京都|兵庫|神戸|滋賀"

で上のスクリプトと全く同じことができますね.なんかがりがりスクリプト書く必要なかったなー.GData++;

でもなんか,GoogleCalendarやiCalに登録しようとするとうまく行かなかったりするので要調査.