동 띄어쓰기는 '네이버랩'에 아이템 체험 코너(;)에 있는 서비스인데 2008년 1월에 처음 등록되었지만 아직까지 API 로 제공되지는 않고 있습니다. 아직 체험 서비스이긴 한데 기능이 개선되고 있는지 아닌지 모르겠네요.
네이버에서 '오픈 API' 라든가 '개발자 센터'를 운영하면서 여러 유용한 프로그램과 서비스를 제공하고 있습니다. 이 외에도 디자이너들에게 유용한 웹표준 관련 정보를 공유하는 '널리'라든가, 네이버의 소식들을 전하는 '네이버 다이어리'나 검색 관련 정보나 팁들을 포스팅하는 '네이버 검색 공식 블로그'들을 운영하고 있습니다. 다만, 이러한 서비스에 대한 관심이 적어서 많은 분들이 활용을 못하고 있다는게 아쉽습니다. 개발자라면 위의 사이트들을 방문해 보시면 좋은 정보를 얻으실 수 있을 듯 합니다.
아무튼, 네이버 자동 띄어쓰기는 API 로 제공되지 않기 때문에, PHP 의 소켓 통신을 이용하여 결과를 요청하고 받아올 수 있습니다.
사실 소켓 통신을 하고 결과를 받아오는 건 좀 복잡한 작업이 이뤄집니다. RFC 표준을 지키며 서버와 통신해야 하는데 이렇게 하는 것도 쉬운일이 아니죠.
그러나 이런 고민은 하지 않아도 됩니다. PHP.net 의 'PEAR 프로젝트' 중에 'HTTP_Request' 가 있기 때문이죠.
PEAR 프로젝트에서 검색해보면 'HTTP_Request' 와 'HTTP_Request2' 두개가 있는데, 차이점은 'HTTP_Request2' 의 경우 PHP 5 기반으로 작성되어 있어 PHP 5 이상에서만 사용 가능합니다. (현재 'HTTP_Request' 팩키지는 개발이 중단되었습니다.)
여기에서는 PHP 5 기반의 HTTP_Request2 팩키지를 이용하여 사용합니다. (이 팩키지 사용시 Net_URL2 0.2.0 이 설치되어 있어야 하기 때문에 없는 분들은 설치 하시면 됩니다.)
PEAR 설치에 대해서는 이곳을 참고해보세요.
소켓 통신은 기본적으로, ① 주소로 요청 ② 결과 확인 ③ 결과 처리 로 이뤄집니다.
아래 코드는 '자동 띄어쓰기' 주소로 2개의 파라메터값(띄어쓰기할 문자열 포함)을 보낸뒤, 받은 결과를 정규식을 이용해 필요한 부분을 잘라내 결과로 돌려 줍니다. 이러한 일련의 작업은 다른 작업에도 동일하게 적용되기 때문에, 아래 코드를 응용하시면 됩니다.
※ 아래 함수 자체는 자유롭게 응용하여 사용해도 되지만, 취급되는 컨텐츠에 대해서는 저작권법을 위반하지 않는 한도내에서 사용하셔야 합니다. 이는 프로그램과 별개로 저작권법에 해당되는 것이기 때문에, 타 사이트의 내용을 긁어와 상업적으로 사용한다거나 출처를 속이거나, 무단 전재/게제를 금하는 내용을 게재하는 등의 경우 법적 문제가 발생할 수 있습니다.
※ 아래의 '자동 띄어쓰기' 네이버의 서비스를 이용하는 것이기 때문이 이를 이용해 상업적인 용도로 쓰거나, 네이버 서비스임을 감추고 다른 이름으로 서비스 한다거나 하는 등의 사용은 금해주시기 바랍니다.
function AutoSpacing($string) { $request_url = 'http://s.lab.naver.com/autospacing/?'; $post_values = Array( 'result_type' => 'paragraph', 'query' => $string ); if (strlen($string) > 10000) {// 글자수가 10000 글자를 넘는지 확인, 이상일 경우 오류 return false; } // HTTP_Request2 객체 생성, 생성시 POST 메소드로 설정 및 User-Agent 값 설정 $http =&new HTTP_Request2($request_url, 'POST'); $http->setHeader('User-Agent', 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)'); foreach ($post_values as $k => $v) {// POST 시 넘겨줄 파라메터 설정 $http->addPostParameter($k, $v); } // POST 요청 후 결과 객체를 받음 $response = $http->send(); if ($response->getStatus() != 200) {// HTTP 표준 응답 코드가 200 인지 검사 return false; } // 페이지 결과를 받아서 적용된 횟수와 띄어쓰기된 문자열을 검출 $page =&$response->getBody(); if ( ! preg_match('@<P class=result>.*?<STRONG>([\d]+)</STRONG>@i', $page, $m_counts) || ! preg_match('@<DIV style="CLEAR: both" class=wrap_spacing2>.*?<P>(.*?)</P>@is', $page,$m_content)) { return false; } return Array( 'counts' => $m_counts[1],// 띄어쓰기가 적용된 횟수 'string' => trim(strip_tags($m_content[1]))// 띄어쓰기된 문자열 ); }