성인 컨텐츠 표시 (Adsense Prohibited Content)

위키에 구글 애드센스(Adsense)를 달고 있다. 페이지 내용에 따라 구글에서 가끔 이멜이 날라오는데, "3일이내에 광고 내리지 않으면, 니 사이트를 접겠다.." 라는 것이다.

대부분 (19금) 관련 내용이다.

구글 애드센스 금지된 컨텐츠 내용을 보면 성인물이나 기타 변태적인 내용이 있는 경우 광고 게시를 금지한다고 한다.

지가 알아서 해주면 좋으련만, 귀찮다고 방심하면, 애드센스 계정이 짤릴 수도 있다.

이것을 해결하기 위해

  1. 템플릿에 애드센스를 표시해주는 부분에 페이지의 이름을 비교해서 광고를 표시하지 않도록 했었는데, 하나하나씩 페이지이름을 넣자니 귀찮다.
  2. 페이지의 이름에 특정 단어가 들어가면 표시하지 않도록 했었는데, (예; sora, sex, condom 등) 페이지 이름에 특정 단어를 일부러 삽입하는 것도 이상했다.

그래서,

페이지를 수정 후 저장할 때1) 특정 단어가 있으면, 페이지를 "성인" 컨텐츠가 있는 것으로 표시하고 (메타데이터에 표시) 템플릿에서 이것을 검사하여 구글 애드센스를 표시하지 않도록 하는 방법을 구현했다.

간단하다.

action.php
<?php
/**
 * adsense Plugin
 * 
 * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
 * @author     s c yoo <[email protected]>
 */
if(!defined('DOKU_INC')) die();
 
class action_plugin_adsense extends DokuWiki_Action_Plugin {
 
	var $functions = null;
 
	function register(&$controller) 
	{
		$controller->register_hook
             ('IO_WIKIPAGE_WRITE', 'BEFORE', $this, 'adsense__adsense');
	}
 
	function adsense__adsense(&$event, $args) {
            global $ID;
		$adult = p_get_metadata($ID, "adult");
		if ($adult == null) $adult=false;
		if (preg_match('/19금/si',$event->data[0][1]))
		{
			$adult=true;
		} else
		{
			$adult=false;
		}
		p_set_metadata($ID, array('adult' => $adult));
		return ;
	}
}

페이지 내용에 "19금" 이 포함되어 있으면, 페이지 정보 (메타데이터)의 "adult"항목에 (p_set_metadata 함수) 표시하고, 템플릿에서 나중에 이것을 사용하도록 하면된다

if (p_get_metadata($ID,"adult")) {
 $noadsense=true; // 처리...
}
누구나 수정하실 수 있습니다. 위키 사용법 참고하세요.
1)
페이지 저장할 때 한번이지만, 내용전체를 검색하기 때문에… 속도 문제가 혹시 ?

역링크