1. 기상청 날씨 정보를 파싱해서 사이트에 효과를 줘보자.
2. 매번 파싱을 하게 되면 사이트 속도가 느려지므로 (생각보다 기상청이 느리다..) 캐시를 설정해서 사이트 이용에 지장이 없게 하자.
<?php //기상청 날씨 정보 파싱 //캐시 설정 // 캐시 이름 $w_cache_key = "weather_kma"; //캐시 간격 = 15분 $w_cache_time = 15; $oCacheHandler = CacheHandler::getInstance(); //캐시가 사용 가능하고 캐시 간격이 남아 있으면 ~ if($w_cache_time && $oCacheHandler->isSupport() && $oCacheHandler->isValid($w_cache_key,$w_cache_time)) { //캐시 정보를 가져온다. $weather = $oCacheHandler->get($w_cache_key,$w_cache_time); } // 만약 캐시가 없다면... else { //타겟 기상청 RSS (서울?) 이던가.. 전국이던가... $url = "http://www.kma.go.kr/wid/queryDFS.jsp?gridx=67&gridy=108"; // xml로 파싱 $xml = simplexml_load_file($url); //예보 시간 $weather = sprintf('%d',$xml->header->tm); if(count($xml->body->data) > 1) { //가장 최신의 날짜 정보를 저장한다. //온도 (단위: 섭씨) $weather .= sprintf(',%s',$xml->body->data[0]->temp); //날씨예보 = 눈, 비, 눈/비, 맑음, 흐림 등등등 $weather .= sprintf(',%s',$xml->body->data[0]->wfKor); } //캐시를 사용할 수 있으면~ if($oCacheHandler->isSupport()) { //캐시에 저장 $oCacheHandler->put($w_cache_key, $weather, $w_cache_time * 60); } } //캐시든 파싱이든 가져온 날짜 정보를 ,로 구분하여 배열로 ~ $_weather = explode(',',$weather); //메타 정보에 날짜 정보를 넣기 위한 작업 - 삭제해도 됨 단순 테스트 목적 foreach($_weather as $k => $v) { if($k == 0) { $weatherMeta = zDate($v,'Y-m-d H:i:s'); } else { $weatherMeta .= ', '.$v; } } Context::addMetaTag('weather', $weatherMeta); // 여기까지 메타를 위한 //날짜 정보가 있으면 각각 구분하여 변수로 할당해주자... if(count($_weather)) { $time = $_weather[0]; // 예보 시각 $temp = $_weather[1]; //현재온도 $weat = $_weather[2]; //날씨상태(맑음,구름조금,구름많음,흐림,비,눈/비,눈) } //여기서 부터 활용..! 날씨 상태에 눈이라는 단어가 있다면 snowly 변수룰 설정하고 true를 주자.. if(preg_match('/눈/',$weat)) { Context::set('snowly',true); } //활용은 레이아웃이든.. if 문이나 cond를 사용하여 snowly가 true면 눈내리는 효과를 뿌리면 된다. 끝. ?>
레이아웃 가장 상단에 배치하면 되겠다.
xe 관련 함수 사용이 있으므로 XE 안에서 돌아가거나 config.inc.php 파일을 불러와야 한다.
위젯 쓰실분은 이거 써보시고 피드백 주세요☺