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 파일을 불러와야 한다.

 

 

하늘희

profile
てててててて
  • ?
    https://xe1.xpressengine.com/index.php?mid=download&package_id=22753634

    위젯 쓰실분은 이거 써보시고 피드백 주세요☺
  • ? profile

    피드백 : 좋음!

    근데 다소 희망사항은 지금은
    내일날씨를 보여주는데요....

    현재시간 부터 간격단위로 내일의 현시간 까지 날씨를 보여주면 좋겠다는 생각을 볼때마다 합니다.
    왜냐면 오전 오후 저녁 이렇게 날씨가 변하는 케이스가 종종 있는데 내일날씨 밖에 확인이 안되니 좀 애매한 거 같아요.

  • profile ?
    쿠플존 스킨이라도 된 것 한번 써보세요 ㅎㅎ..
    원하시는 항목들이 출력 될거에요..
    문제가 ㅠㅠ 제가 디자인을 정말 못합니다..
    그림만으로라도 디자인을 해주시면 스킨으로 만들어 올리겠습니다.
  • ? profile
    스킨은 지금 형태로 좋은거 같아요. 다만 내일날씨 -> 현재날씨 로 해서 시간 스타트를 현시간부터 해서 날씨를 보여주면 좋을 듯한게 저의 희망이죠. 저희 사이트에 날씨가 제공되고 있는데 아쉽게 내일날씨가 나가고 있어요~
  • profile ?
    가까운 미래(지금은 오늘 오후 3시의 예보가 가장 가깝게 뜹니다)가 아니라 지금(오후1시 12분) 날씨부터 보이면 좋겠단 의견이신거죠?
    나중에 한번 해보겠습니다!
  • ? profile
    저희는 내일 날씨만 뜨는데 현재날씨도 된다는 건가요? 가까운 미래가 제가 원하는게 맞아요. 저희는 날씨가 무조건 내일 06시 부터 출발해요.
  • profile ?
    누군가 커스텀 스킨을 만드실거라 생각해서 그렇게 했어요. 스킨마다 보여주는 지역 수도 다르고 시간대 표시도 달라요.
    딱! 쿠플존 스킨은 원하시는대로 뜹니다.
    모양도 더 예쁠거에요 ㅎㅎ

    PS.
    어떻게 생긴건지 궁금하시면  http://www.xn--4k0bm4xcwe.xn--3e0b707e/index.php?mid=page_AzPY49&m=0 들어가시면 달아두었습니다. 지역은 두 개 넣을 수 있는데 하나만 넣으셔도 돼요.  한 개 지역만 넣으면 뭔가 문제가 있네요.. 저녁에 살펴봐야 할거 같아요.
  • ? profile
    아.. 그렇군요. 그럼 자료 업데이트하고 구플존 스킨으로 꾸며볼게요. 감사합니다! 업데이트의 귀차늠 페이지수정의 귀차늠으로 안알아보고 있었네요 ㅋ
  • ? profile
    계속 하고 있는데 문의 드리려고 왔더니.. 한개만 넣어서 안되는거군요....
  • ? profile
    일단 편법으로 rss 주소만 두개 넣고 두번째거에는 타이틀을 빼버렸습니다.
  • profile ?
    오늘 저녁에 고친건 XE 타운 자료실에 올리겠습니다 :)
  • ? ?

    전국 중기예보는 안될까요?

    지역별로 하나하나 모두 넣기가 좀 많아서요. ^^;

  • ? profile
    방금설치해서 사용해보니 편리하고 좋습니다...아쉬운건 탭이 2개밖에 없는게 아쉽네요...10개정도면 좋겠단 생각을했습니다.
    저는 전국날씨를 다 봐야하는 사진사이트라서요...ㅎㅎ 고쳐서 쓸 능력은 안됍니다^^
  • ? ?
    중기예보는 스타일이 좀 달라서 만들게 되면 별도로 만들 것 같습니다 ㅠㅎㅎ
  • profile ?
    으헉.. 10개...
    시간 될 때 한번 해볼게요 @.@...
  • ? ?
    네 잘알겠습니다. :)
  • profile profile
    위젯을 계속 만드세요. 저희 사이트 처럼 ... 전 개인적으로 탭으로 열어보는거 보다 스크롤로 보는게 더 좋더라구요.
  • profile ?
    https://xetown.com/xepoint/104966 또는 https://github.com/misol/soo_kma_rss/releases/tag/0.3 에서 다운로드 받으실 수 있습니다.
  • profile ?
    10개로 지역을 확장했습니다. 쿠플존 스킨을 이용하시면 사용하실 수 있습니다.
    https://github.com/misol/soo_kma_rss/releases/tag/0.3 또는 https://xetown.com/xepoint/104966 에서 다운로드 받으실 수 있습니다.
  • ? profile
    와..감사합니다...정말고맙습니다^^
  • ? profile

    미솔님 발표시간이 01/01 09:00 표기되네요.

    날씨는 제대로 잘 나옵니다

  • profile ?
    오잉... 확인해볼게요 @_@
  • profile ?
    https://xetown.com/xepoint/105171 개선되었습니다!
    https://github.com/misol/soo_kma_rss/releases/tag/0.3.1 에서 받으실 수도 있습니다.
  • profile ?
    기상 예보 발표 시간 표시 오류 문제가 있어서 수정했습니다. https://github.com/misol/soo_kma_rss/releases/tag/0.3.1 에서 받으실 수 있습니다.
    xetown 에서 받으시려면 https://xetown.com/xepoint/105171 여기입니다.
  • ?

    호스팅에서는 경우에따라 캐싱이 불가능하고 simplexml_load_file() 함수사용이 불가능하여 소스수정이 필요합니다.
    캐싱은 파일로 처리하고, (이건 복잡하니 넘어감..) 함수사용전 ini_set("allow_url_fopen","1"); 먼저 선언해주시면 해당 함수 사용가능하니 참고하시기 바랍니다.

  • ?
    찾고있었던 자료입니다. 감사합니다