본문 바로가기
프로그램.코딩

접속자 국가파악

by landzz 2015. 1. 15.

작업중 접속자 위치파악(국가)이 필요해서 검색기록남김

까페24호스팅의 경우 $_SERVER 변수에 [HTTP_HOSTING_CONTINENT_CODE] => AS - 대륙 [HTTP_HOSTING_COUNTRY_CODE] => KR - 국가 으로 나오는것 확인

ip로 확인하는방법도 있는데 (기존방법) 기존엔 geoip 데이터를 디비에 셋팅해서 사용했으나 검색중에 좋은것을발견함. http://stackoverflow.com/questions/12553160/getting-visitors-country-from-their-ip http://www.geoplugin.com/ 인데 무료로 제공하는듯 스택답변에는 xml로 되있던데 json도 되는것확인 http://www.geoplugin.net/xml.gp?ip=아이피 http://www.geoplugin.net/json.gp?ip=아이피 우리나라는 호스팅환경상 url로 컨텐츠열기가 금기되있어서 (file_get_contents,fopen) 소켓으로 자료받아와서 가공처리함. json결과 : query ip : 125.209.222.142

//
//
$_test = get_socket('http://www.geoplugin.net/json.gp',array('ip'=>'125.209.222.142'));
$_ret = json_decode($_test['content'],true);
Array
(
    [geoplugin_request] => 125.209.222.142
    [geoplugin_status] => 200
    [geoplugin_credit] => Some of the returned data includes GeoLite data created by MaxMind, available from http://www.maxmind.com.
    [geoplugin_city] => Seongnam
    [geoplugin_region] => Gyeonggi
    [geoplugin_areaCode] => 0
    [geoplugin_dmaCode] => 0
    [geoplugin_countryCode] => KR
    [geoplugin_countryName] => Korea, Republic of
    [geoplugin_continentCode] => AS
    [geoplugin_latitude] => 37.438599
    [geoplugin_longitude] => 127.137802
    [geoplugin_regionCode] => 13
    [geoplugin_regionName] => Gyeonggi
    [geoplugin_currencyCode] => KRW
    [geoplugin_currencySymbol] => ₩
    [geoplugin_currencySymbol_UTF8] => ₩
    [geoplugin_currencyConverter] => 1079.6754
)
//
//
상세한 ip별 좌표, 통화,환율까지 알려줌... ======================================== 추가 모바일기기사용시 geolocation 으로 좌표가져오기
//
//
//위치정보가져오기
$('#location_text').click(function(){
loadLocation();
});
function loadLocation() {
	if (navigator.geolocation) {
		$('#location_text').val('위치조회중...');
		getloc();
	} else {
		$('#location_text').val('위치정보를 사용할수 없습니다.');
	}
}
function getloc() {
	navigator.geolocation.watchPosition(updateLocation, handleLocationError, {maximumAge:2000});
}
function updateLocation(position) {
	var latitude = position.coords.latitude;
	var longitude = position.coords.longitude;
	var accuracy = position.coords.accuracy;
	var loc_txt = latitude + ',' + longitude+'('+accuracy+')';
	$('#location_text').val(loc_txt);
}
function handleLocationError(error) {
	switch(error.code) {
		case error.UNKNOWN_ERROR:
			$('#location_text').val('알수없는 에러발생.');
		break;
		case error.PERMISSION_DENIED:
			$('#location_text').val('위치정보사용에 동의해주세요');
		break;
		case error.POSITION_UNAVAILABLE:
			$('#location_text').val('위치정보를 사용할수 없는 상태입니다.');
		break;
		case error.TIMEOUT:
			$('#location_text').val('시간초과');
		break;
	}
}
</script>
//
//
=============================================================================== 추가 좌표로 한글주소얻기 (구글이용) https://developers.google.com/maps/documentation/geocoding/?hl=ko
//
//
$_param = array('latlng'=> '좌표위도,좌표경도' ,'sensor'=>'false', 'language'=>'ko');
//$_google = get_socket('http://maps.googleapis.com/maps/api/geocode/json',$_param,'GET'); -> 구글에선 안되서 curl 사용
//$_gres = json_decode($_google['content'],true);

$curlObj = curl_init();
curl_setopt($curlObj, CURLOPT_URL, 'https://maps.googleapis.com/maps/api/geocode/json?'.http_build_query($_param));
curl_setopt($curlObj, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curlObj, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curlObj, CURLOPT_HEADER, 0);
curl_setopt($curlObj, CURLOPT_HTTPHEADER, array('Content-type:text/html;'));
$response = curl_exec($curlObj);
$json = json_decode($response,true);
curl_close($curlObj);
var_dump($json);

//주소로 좌표얻을땐 위 $_param 값셋팅
$_param = array('address '=> '주소' ,'sensor'=>'false', 'language'=>'ko');
//
//
구글맵연동 js : http://work.gooroo.co.kr/test/google_map.php

댓글