■
ナタリーがいつまでまっても要求をのんでくれない
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'));