Loading...
PHP 의 DOMDocument 클래스를 이용한 HTML 문서 meta content 추출 서포트 함수
REDINFO
약 1년전 2022-11-20 01:54:46

meta 태그란 사이트 문서 head 상에 삽입된 태그로 흔히 웹 문서 검색 시 해당 문서의 정보 데이터를 설정하는 역활을 한다.  이러한 meta 태그는 종류가 여러가지고 보통 검색 시에 활용하기도 하지만 특정 사이트 인증 및 설정 시에도 사용이 된다. 

 

본래 PHP 에서는 메타태그를 가져올 수 있는 get_meta_tags() 함수가 제공이 되는데 이 함수는 og 태그안에 있는 데이터는 가져오지 않기때문에 브라우저상 DOM 데이터를 파싱하여 가져오는 수 밖에 없다.  하지만 정규식을 통해 파싱을 한다는건 엄청난 노가다일 수 밖에 없는데 이때 PHP 에서 제공되는 클래스를 활용하면 손쉽게 가져올 수 가 있다. 

 

get_meta_tags() | 기본 함수

먼저 위에서 언급한 PHP 에서 기본으로 제공되는 get_meta_tags() 함수의 예제를 살펴보면 아래와 같다. 

<?php
$response = get_meta_content('https://blog.redinfo.co.kr');
echo '<pre>';
print_r($response);
echo '</pre>';

echo '<h1>get_meta_tags() 함수 예제</h1>';
$response = get_meta_tags('https://blog.redinfo.co.kr');
echo '<pre>';
print_r($response);
echo '</pre>';
?>

 

| 결과화면 

 

get_meta_content() | 서포트 함수

위의 get_meta_tags() 함수를 이용하여 출력한 결과 og 데이터는 가져오지를 못한다. 따라서 og 태그처럼 meta property 속성이 있거나 name 속성이 있는 데이터를 모두 가져오는 방법이 있는데 이는 아래 예제를 참고하길 바란다. 

<?php 
function get_meta_content($url){
	$page_content = file_get_contents($url);
	$dom_obj = new DOMDocument();

	// 로드시 한글깨짐 방지를 위한 언어셋 설정 처리
	@$dom_obj->loadHTML("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">".$page_content);

	$data = array();
	if( empty($url)){ return array(); }
	foreach($dom_obj->getElementsByTagName('meta') as $meta) {  
		if( !empty($meta->getAttribute('property'))){
			$data[$meta->getAttribute('property')] = $meta->getAttribute('content');
		}
		if( !empty($meta->getAttribute('name'))){
			$data[$meta->getAttribute('name')] = $meta->getAttribute('content');
		}		
	}
	return $data;
}

echo '<h1>DOMDocument() 클리스를 이용한 예제</h1>';
$response = get_meta_content('https://blog.redinfo.co.kr');
echo '<pre>';
print_r($response);
echo '</pre>';

 

|결과화면

위의 예제를 보면 아래와 같이 loadHTML() 메소드 사용시 별도 처리가 된것을 알 수 있다. 이는 언어셋으로 인한 한글 깨짐 방지를 위해 추가하였다. 

@$dom_obj->loadHTML("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">".$page_content);

 

참고로 DOMDocument() 클래스의 경우 PHP 기본제공되는 클래스로 아래의 PHP 그룹에서 상세 정보를 확인 가능하다.

 
PHP: DOMDocument::__construct - Manual
PHP: DOMDocument::__construct - Manual
www.php.net/manual/en/domdocument.construct

 

이 포스트글이 도움이 되었나요?
4
카테고리 연관글

Comment

댓글작성

0(500) | 1(30)