ナタリーがいつまでまっても要求をのんでくれない
http://natalie.mu/bbs/show/id/21
てことで、natalieカレンダーからical生成スクリプト
icalcreatorクラスがあんまりきれいにやってくれないからあとで修正必要
こういう野良がはびこるのが嫌だったらical提供してください(>_<)

<?php
//@see http://blog.koshigoe.jp/archives/2007/04/phpxpath.html
require_once '/library/Diggin/Scraper.php';
//Scraperクラスは上のURLの改訂

$url = "http://natalie.mu/calendar"; 
$html = file_get_contents($url);

$tidy = new tidy;
$config = array(
           'indent'         => true,
           'output-xhtml'   => true,
           'wrap'           => 200);
$tidy->parseString($html, $config, 'utf8');
$tidy->cleanRepair();

$scraper = new Diggin_Scraper($tidy->value, False);

$results = $scraper->findAll('//td/a[@href="#"]');

$needle = 'detail_field-';
$needle2 = '/calendar/show/id/';
$natalieEventArray = array();

for ($i = 0; $i < $results->length; $i++) {
    $dom = new DOMDocument();
    $node = $dom->importNode($results->item($i), true);
    $dom->appendChild($node);
    $resultItem = Diggin_Scraper::numentToChar(trim($dom->saveHTML()));
    
    $yyyy_mm_dd = substr($resultItem, strpos($resultItem, $needle)+strlen($needle), 10);
    $id = (integer) substr($resultItem, strpos($resultItem, $needle2)+strlen($needle2), 5);
    
    $natalieEventArray[$i]["id"] = $id;
    $natalieEventArray[$i]["year"] = substr($yyyy_mm_dd, 0, 4);
    $natalieEventArray[$i]["month"] = substr($yyyy_mm_dd, 5, 2);
    $natalieEventArray[$i]["day"] = substr($yyyy_mm_dd, 8, 2);
    $natalieEventArray[$i]["value"] = trim(strip_tags($resultItem));
}

//print_r($natalieEventArray);

//@see http://www.kigkonsult.se/iCalcreator/
require_once '/library/iCalcreator.class.php';
$vcalendar = new vcalendar();

foreach($natalieEventArray as $natalieEvnet) {
    $vevent = new vevent();
    $vevent->setSummary($natalieEvnet["value"]);
    $vevent->setCategories('Music');
    $vevent->setDtstart($natalieEvnet["year"], $natalieEvnet["month"], $natalieEvnet["day"]);
    $vevent->setTzid("Asia/Tokyo");
    $vevent->setTzoffsetfrom("+0900");
    $vevent->setTzoffsetto("+0900");
    $vevent->setTzname("JST");
    $vevent->setDescription($natalieEvnet["value"]);
    $vevent->setLocation( 'Japan' );
    $vevent->setUrl($url);
    $vcalendar->addComponent($vevent);
}

$a = $vcalendar->createCalendar();
print_r(mb_convert_encoding($a,'UTF-8','auto'));