Sep 172012
 

대부분 개발자들은 개발을 하면서 HTML 파서를 각자 만들어서 사용을 하고 있습니다.
특히 검색 로봇을 만들어서 사용할 경우에는 HTML을 읽어서 파서를 만들어서 사용하는 경우가 많습니다.
그래서 저는 HTML 문법을 기반으로 하는 라인단위로 분리를 해서 사용하는 방법을 많이 사용했습니다.
(대부분 로봇을 Perl을 사용해서 만들었기 때문에 10라인 정도 되는 함수로 만들어서 잘 사용했으며, 대규모 분석시 적은 메모리로 빠른 처리가 가능합니다.)

하지만 최근 HTML 구조가 CSS 기반으로 이루어지다 보니 좀 더 복잡하게 구성되는 경우가 많습니다.
대신 HTML5의 경우에는 문서가 구조적으로 되어 있기 때문에 라인단위로 분석보다는 html을 parser해서 DOM과 같은 객체에 넣어 두고 분석을 하면 훨씬 편리하다.

물론 라인단위로 처리하거나, SAX로 처리하는 것보다 메모리나, 속도 측면에서는 문제가 많겠지만, 변경된 HTML구조에 빠르게 대응을 하고, 간단하게 개발할때에는 효과적인것 같아서 HTML parser 프로그램을 하나 소개합니다.

PHP로 되어 있으며, 간단히 라이브러리 파일만 include를 하고, 아래와 같이 사용하면 된다.
(PHP 기본 함수가 아니므로 아래 참고 URL에 있는 소스를 다운받아서 PHP 프로그램을 사용할때 추가해야 합니다.)

    include_once('simple_html_dom.php');
 
    $html = file_get_html("http://blog.sukmoonlee.com");
 
    foreach($html->find('ul') as $element) {
        foreach($element->find('a') as $e) {
            echo $e->href."\n";        
        }
    }
 
 
[smlee@localhost ~]$ php test.php
/wordpress/
/env.php
/geshi/contrib/example.php

참고URL: http://simplehtmldom.sourceforge.net/

Aug 282012
 

최근에 워드프레스에 관심이 있어서 소스를 보고 있습니다.
그리고 공개되어 있는 플러그인을 다운받아서 보고 있습니다.

PHP 소스를 보다 재미있는 함수를 하나 발견했습니다.
php를 사용하다 보면 열거형 배열을 사용하는 경우가 많습니다. 이런 경우 해당 열거형 배열의 이름이 긴 경우에는 간단한 변수명을 적는 것만으로도 소스의 양이 길어지게 됩니다.

하지만 php에서는 function 안에서 local 변수가 외부에 영향을 미치지 않으므로 function 안에서 열거형 배열을 extract 함수를 사용하여 변수명을 간결하게 사용하면 프로그램 가독성도 높이고, 간편하게 코딩이 가능해집니다.

<?php
 
/* Suppose that $var_array is an array returned from
   wddx_deserialize */
 
$size = "large";
$var_array = array("color" => "blue",
                   "size"  => "medium",
                   "shape" => "sphere");
extract($var_array, EXTR_PREFIX_SAME, "wddx");
 
echo "$color, $size, $shape, $wddx_size\n";
 
?>
Plugin from the creators of Brindes :: More at Plulz Wordpress Plugins