테스트 사이트 - 개발 중인 베타 버전입니다

사이트방문 검색키워드를 통계내고싶은데요..

· 14년 전 · 1906
<style type="text/css">
#m3stats_tbl {border-collapse:collapse;}
#m3stats_tbl td {border:solid 1px #7777777;}
#m3stats_tbl_title {font-weight:700;text-align:center;}
.m3stats_align_c {text-align:center;}
</style>

<script type="text/javascript">
function fcount_submit(ymd, gr_id, bo_table)
{
var f = document.fcount;
f.ymd.value = ymd;
f.gr_id.value = gr_id;
f.bo_table.value = bo_table;
f.action = "<?=$PHP_SELF?>";
f.submit();
}
</script>

<?
// 날짜 설정
if(!$fr_date) $fr_date = date("Y-m-d", strtotime("0 days ago"));
if(!$to_date) $to_date = $g4[time_ymd];

// 주사 방지
$fr_date = substr($fr_date, 0, 10);
$to_date = substr($to_date, 0, 10);
$site = substr($site, 0, 10);
$site_ori = $site;

// 검색사이트들
$site_arr = array("Naver", "Daum", "Yahoo", "Nate", "Google", "Bing");
$surl_arr = array("Naver" => "%search.naver.com%", "Daum" => "%search.daum.net%", "Yahoo" => "%search.yahoo.com%", "Nate" => "%nate.com%", "Google" => "http://www.google.%", "Bing" => "http://www.bing.com%");
$svar_arr = array("Naver" => "query", "Daum" => "q", "Yahoo" => "p", "Nate" => "q", "Google" => "q", "Bing" => "q");
?>

<style type="text/css">
#m3tbl { border:solid 1px #CCC; border-collapse:collapse;}
#m3tbl th { border:solid 1px #CCC; text-align:center;}
#m3tbl td { border:solid 1px #CCC; text-align:center; padding:2px 8px;}
#div_m3sq ul { display:inline; padding:0px; margin:3px; }
#div_m3sq ul li { display:inline; padding:5px 12px 5px 12px; border:solid 1px #CCC; background:#f0f2f8;}
</style>

<div id="div_m3sq">
<br /><br />
<img src=./img/bul2.gif border=0 align=absmiddle> <b>사이트 유입 검색어(키워드) 분석기</b><br /><br />
<ul>
<li><a href="<?=$PHP_SELF?>?to_date=<?=$to_date?>&fr_date=<?=$fr_date?>">전체사이트</a></li>
<? foreach($site_arr as $site) { ?>
<li><a href="<?=$PHP_SELF?>?site=<?=$site?>&to_date=<?=$to_date?>&fr_date=<?=$fr_date?>"><b><em><?=$site?></em></b></a></li>
<? } ?>
</ul>
<br />
<br />

<form method="get" action="<?=$_SERVER[PHP_SELF]?>">
<input type="hidden" name="site" value="<?=$site_ori?>" />
시작 : <input type="text" name="fr_date" value="<?=$fr_date?>" size="10" />
끝 : <input type="text" name="to_date" value="<?=$to_date?>" size="10" />
<input type="submit" value=" go " /><br />
</form><br />
<form action="javascript:;" onsubmit="findsq(getElementById('sq').value)" />
결과내 검색 : <input type="text" id="sq" name="sq" value="<?=$sq?>" />
<input type="submit" value=" search " />
<input type="button" value=" reset " onclick="resetsq()" />
<span id="search_cnt"></span><br />
</form>
<br />

<?
// vi_referer에서 사이트 찾고, vi_date로 범위 정하기, 정렬은 vi_id 역순 (속도 개선 필요)
if(in_array($site_ori, $site_arr)) {
$where1 = "vi_referer LIKE '{$surl_arr[$site_ori]}' ";
}
else { // 5개 사이트 모두 포함
$where1 = " ( ";
foreach($surl_arr as $site => $surl) {
$where1 .= " vi_referer LIKE '$surl' OR ";
}
$where1 .= " 0 )";
}

$query = sql_query("select * from `$g4[visit_table]` where $where1 AND vi_date>='$fr_date' AND vi_date<='$to_date' order by vi_id desc");
?>
<table id="m3tbl">
<tr><th width="90">방문 날짜</td>
<th>방문 시간</td>
<th>검색 사이트</td>
<th>검색 키워드</td>
</tr>
<?
$cnt = 0;
$cnt2 = array();
while($row = sql_fetch_array($query)) {
// 어느 사이트인지 찾기
foreach($surl_arr as $site => $surl) {
if(strstr($row[vi_referer], str_replace("%", "", $surl))) {
$engine = $site;
break;
}
}
// 검색문자열 찾기
$regex = "/(\?|&){$svar_arr[$engine]}\=([^&]*)/i";
preg_match($regex, $row[vi_referer], $matches);
$querystr = $matches[2];
// 보통 검색어 사이를 +로 넘긴다
$querystr = str_replace("+", " ", $querystr);
// %ab 이런 식으로 된 걸 바꿔주기
$querystr = urldecode($querystr);
// 네이버는 unicode로 된 경우도 있어서
if($engine=="Naver") $querystr = utf8_urldecode($querystr);
// 캐릭터셋이 UTF-8인 경우는 EUC-KR로 고치기 (UTF-8 유저는 EUC-KR과 UTF-8을 서로 바꿔주면 될 듯)
$charset = mb_detect_encoding($querystr, "ASCII, UTF-8, EUC-KR");
if($charset=="UTF-8") $querystr = iconv("UTF-8", "EUC-KR", $querystr);
// 자잘한 처리들
$querystr = trim($querystr);
$querystr = htmlspecialchars($querystr);
// 가끔 빈 것들도 있다 -_-
if(!strlen($querystr)) continue;
// 에코
echo "<tr><td>$row[vi_date]</td>";
echo "<td>$row[vi_time]</td>";
echo "<td><a href=\"$PHP_SELF?site=$engine\"><img src=\"$g4[admin_path]/img/".strtolower($engine).".jpg\" /></a></td>";
echo "<td style=\"text-align:left\" id=\"m3sqtd[$cnt]\"><a href=\"$row[vi_referer]\" target=\"_blank\">$querystr</a></td></tr>\n";
// 카운트용 변수
$cnt++;
$cnt2[$engine]++;
}
ksort($cnt2);

// 베짱이님 제공 함수
function utf8_urldecode($str, $chr_set='CP949') {
$callback_function = create_function('$matches, $chr_set="'.$chr_set.'"', 'return iconv("UTF-16BE", $chr_set, pack("n*", hexdec($matches[1])));');
return rawurldecode(preg_replace_callback('/%u([[:alnum:]]{4})/', $callback_function, $str));
}

?>
</table><br />
전체 : 최근 <?=$days=(strtotime($to_date)-strtotime($fr_date))/(24*60*60)+1?> 일간, <strong><em><?=$cnt?></em></strong> 회 키워드 방문 (1일 평균 : <strong><em><?=sprintf("%.1f",$cnt/$days)?></em></strong> 회)<br /><br />
<? if(!$site_ori) { // 모든 사이트의 경우 비율 분석
foreach($cnt2 as $engine => $count) {
echo "$engine : $count (".sprintf("%.1f",$count/$cnt*100)."%)<br />";
}
}?>

</div>

<script type="text/javascript">
function findsq(sq) {
if(sq=="") return;
var i = 0;
var search_cnt = 0; // 결과내 검색 개수
while(a = document.getElementById("m3sqtd["+i+"]")) {
if(a.innerText.toLowerCase().match(sq.toLowerCase())) { // 찾는 값이 있으면 보이기
a.parentNode.style.display="";
search_cnt++;
} else { // 찾는 값이 없으면 숨기기
a.parentNode.style.display="none";
}
i++;
}
document.getElementById("search_cnt").innerText = "결과내 검색 : " + search_cnt + "건";
}
function resetsq() {
var i = 0;
while(a = document.getElementById("m3sqtd["+i+"]")) {
a.parentNode.style.display=""; // 모든 행의 display 속성 reset
i++;
}
document.getElementById("search_cnt").innerText = "";
document.getElementById("sq").value = "";
}
</script>

========================================================================
visit_keyword.php파일 소스인데요..
위의 소스를 수정해서 사이트를 방문한 검색키워드의 통계를 냈으면 하는데 어떻게 수정하면좋을지...
자세히 좀 알려주시면 고맙겠습니다.

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

게시글 목록

번호 제목
284508
284499
284492
284490
284484
284481
284478
284476
284474
284472
284470
284458
284457
284454
284453
284447
284446
284444
284441
284440