2006년 11월 11일 토요일

microformat Parser (php4)

쓸만한 마이크로 포맷 파서가 없어서 뚝딱거려봄. php5버전으로 하려다, 아직은 php4가 대세라 php4로 제작.
hCard와 hCalendar만 지원. 나머지는 귀찮아서. 국내에서는 언제쯤 microformat을 쓸 수 있을까...


class O_MICROFORMAT extends METAOBJECT {
var $str;
var $domain;

function O_MICROFORMAT($str, $domain) {
$this->str = $str;
$this->domain = $domain;
}

function hCard()//{{{
{
$querys = array(
"url" => array("/@href"),
"n" => array(""),
"fn" => array(""),
"adr" => array(""),
"tel" => array(""),
"org" => array(""),
"role" =>array(""),
"email" =>array("/@href"),
"stem" => array("")
);
return $this->parse('vcard', $querys);
}//}}}

function hCalendar()//{{{
{
$querys = array(
"url" => array("/@href"),
"summary" => array(""),
"dtstart" => array("/@title"),
"dtend" => array("/@title"),
"location" => array("")
);
return $this->parse('vevent', $querys);
}//}}}

function parse($key, $querys) //{{{
{
$str = $this->str;

$dom = new DomDocument();
@$dom->loadHTML($str);

$xpath = new DOMXPath( $dom );
$events = $xpath->query("//*[contains(@class, '$key')]");

$parsed_events = array();
foreach( $events as $event )
{
$e = $this->parse_event( $dom, $event, $querys );
$parsed_events []= $e;
}
return $parsed_events;

} //}}}

function parse_event( $dom, $event, $querys) //{{{
{
$data = array();

$xpath = new DOMXPath( $dom );
foreach($querys as $query=>$val) {
$t = $xpath->query( ".//*[contains(@class,'{$query}')]{$val[0]}", $event );
$data[$query] = $t->length > 0 ? $t->item(0)->nodeValue : '';
if($query=="url") {
if(strtolower(substr(trim($data[$query]), 0, 7)) != "http://") {
$data[$query] = $this->domain . $data[$query];
}
}
if($query=="email") {
if(strtolower(substr($data[$query], 0, 7)) == "mailto:") {
$data[$query] = substr($data[$query], 7);
}
}
}

return $data;
}//}}}

}



댓글 없음:

댓글 쓰기