ご無沙汰しています。
ちょっと思いついたので作ってみました。
■birthday.pl
use strict; use WWW::Mixi; use Jcode; ##定義 my $config_title = "マイミク誕生日カレンダ"; my $config_login = 'your_address@mixi.jp'; my $config_password = 'your_password'; ##ログイン my $mixi = WWW::Mixi->new($config_login, $config_password); $mixi->login; $mixi->delay(2/60); ##準備 my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time); my $today = sprintf("%02d%02d", $mon +1, $mday); $config_title = cv($config_title); ##マイミク一覧を取得 my @friends; my $list_url = '/list_friend.pl'; while($list_url ne ''){ push @friends, $mixi->get_list_friend($list_url); my $next = $mixi->parse_list_friend_next(); $list_url = ($next) ? $next->{'link'} : ''; } ##誕生日データ生成 output(iCal_head()); foreach my $friend(@friends){ my $friend_name = $friend->{'subject'}; my $friend_link = $friend->{'link'}; my $friend_data = $mixi->get_show_friend_profile($friend->{'link'}); if ($friend_data->{'誕生日'} =~ /(\d+)月(\d+)日/s) { my $friend_bd = sprintf("%02d%02d", $1, $2); # 誕生日が過ぎてるなら来年の日付にする my $this_data_ymd = sprintf("%04d%02d%02d", 1900 + $year + (($today > $friend_bd) ? 1 : 0), $1, $2); my $this_data_summary = cv("${friend_name}の誕生日"); my $this_data = << "EOD"; BEGIN:VEVENT UID:${friend_link} DESCRIPTION:${friend_link} [${this_data_summary}] DTSTART:${this_data_ymd} DTEND:${this_data_ymd} SUMMARY:$this_data_summary END:VEVENT EOD output($this_data); } } output(iCal_tail()); sub output{ my $src = shift; print jcode($src)->utf8; } sub cv { #http://www.villagewood.net/blog/archives/000204.html my $src = shift; my @out = unpack("C*",jcode($src)->ucs2); my $answer = ''; for(my $i=0; $i < $#out; $i = $i + 2){ $answer .= '&#'.($out[$i] * 256 + $out[$i + 1]) . ';'; } $answer; } sub iCal_head { << "EOD"; BEGIN:VCALENDAR PRODID:mixi - birthday list VERSION:2.0 METHOD:PUBLISH CALSCALE:GREGORIAN X-WR-CALNAME:${config_title} X-WR-CALDESC:${config_title} X-WR-TIMEZONE:Asia/Tokyo EOD } sub iCal_tail { << "EOD"; BEGIN:VTIMEZONE TZID:Asia/Tokyo BEGIN:STANDARD DTSTART:19700101T000000 TZOFFSETFROM:+0900 TZOFFSETTO:+0900 END:STANDARD END:VTIMEZONE END:VCALENDAR EOD }
EUC-jpで保存してみてくださいませ。
■使い方
とりあえずこんな感じで実行してみてくださいな。
perl birthday.pl > mymixibd.ics
これで生成されたicsファイルをGoogle Calendarの Manage calendars から Import Calendar を選び、生成したmymixibd.icsをimportすればOKです。
My Calendarsで「Birthdays」という名前で作って、そこに流し込んだら色分けできるのでいいと思いますよ。
使い捨てスクリプトなので、適当にお使いください。