상세 컨텐츠

본문 제목

야후 날씨 xml 자료게시방법(php5용과 php4용)

PHP(Class)

by 김일국 2014. 1. 15. 16:30

본문

실행결과

http://time-space.biz/metro/index.html

아래는 php5소스

<?
 //지명위치코드 확인 Url http://query.yahooapis.com/v1/public/yql?q=select * from geo.places where text="seoul"&format=xml
  $xml = array('Seoul' => 1132599, 'Tokyo' => 1118370, 'Beijing' => 2151330);
  foreach($xml as $city => $code) {
   $url = 'http://weather.yahooapis.com/forecastrss?w='.$code.'&u=c';
   $ch = curl_init();
   $timeout = 5;
   @curl_setopt($ch, CURLOPT_URL, $url);
   @curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   @curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
   $yahooxml = @curl_exec($ch);
   @curl_close($ch);
   if (@simplexml_load_string($yahooxml))
   {
   $smplxml = @simplexml_load_string($yahooxml);
   @$smplxml->registerXpathNamespace('yweather', 'http://xml.weather.yahoo.com/ns/rss/1.0');
   @$children = $smplxml->xpath('//channel/item/yweather:condition'); 
   }
   else
   {
   $city = "Reload!";
   $children[0]['text'] = "http://weather.yahoo.com";
   $children[0]['date'] = "Traffic jam!";
   }
  ?>
  <div class="tile-content slide">
                    <div class="padding10" style="background: url(http://us.i1.yimg.com/us.yimg.com/i/us/we/52/<?=$children[0]['code']?>.gif) no-repeat top right;">
                        <h1 class="fg-white ntm"><?=$children[0]['temp']?>°</h1>
                        <h1 class="fg-white no-margin"><?=$city?></h1>
                        <h5 class="fg-white no-margin"><?=$children[0]['text']?></h5>
                        <p class="tertiary-text fg-white no-margin">Today</p>
                        <h4 class="fg-white no-margin"><?=$children[0]['date']?></h4>
                    </div>
                </div>
  <? } ?>
여기까지 소스

 

위에 사용된 curl 함수 설명

curl (Client URL Library Functions)이라는 모듈이 서버에 설치되어 있는지 확인(phpinfo()함수로 확인).

이것이 하는 역할은 내가 원하는 주소의 페이지에서 내가 임의의 값을 넣고 그 넣은 값으로 페이지에서 리턴되는 값을 받아오는 역할입니다. 웬만한 호스팅에서는 지원하고 있습니다.

실행방법

$ch = curl_init([String url])        /* curl 세션의 초기화 [파라메터는 선택사항]. */
curl_setopt($ch, OPTION, VALUE)  /* curl 옵션을 세팅한다. */
curl_setopt 의 OPTION
      CURLOPT_HEADER    : 헤더 정보를 받기 원한다면 이 옵션을 추가한다. VALUE : 1 OR true
      CURLOPT_NOBODY    : 본문의 정보를 받기 원하지 않는다면 이 옵션을 추가한다.
      CURLOPT_TIMEOUT  : curl 타임아웃을 설정한다.
      CURLOPT_URL            : 접속할 url정보를 설정
      CURLOPT_REFERER  : 리퍼러 정보를 설정
      CURLOPT_USERAGENT : 에이전트 정보를 설정
      CURLOPT_POST          : 전송 메소드를 post로 정의한다.
      CURLOPT_POSTFIELDS: POST 메소드라면 파라미터 값들을 이 옵션에 정의하면된다. 
curl_exec($ch)      /* curl을 실행 */
curl_errno($ch)    /* 에러번호를 가져온다. */
curl_error($ch)    /* 에러 메시지를 가져온다. */
curl_getinfo($ch)  /* 상태 정보를 리턴한다. */
curl_close($ch)  /* curl 세션을 닫는다 */

 

아래는 php4용 소스

<?
  //지명위치Url http://query.yahooapis.com/v1/public/yql?q=select * from geo.places where text="london"&format=xml
  $xml = array('Seoul' => 1132599, 'Tokyo' => 1118370, 'Beijing' => 2151330);
  foreach($xml as $city => $code) {
  //while (list($city, $code) = each($xml)) {
   $url = 'http://weather.yahooapis.com/forecastrss?w='.$code.'&u=c';
   $ch = @curl_init();
   $timeout = 5;
   @curl_setopt($ch, CURLOPT_URL, $url);
   @curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   @curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
   $yahooxml = @curl_exec($ch);
   @curl_close($ch);
   $data = $yahooxml;
                 $parser = xml_parser_create('UTF-8');
   xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
   xml_parse_into_struct($parser, $data, $vals, $index);
   xml_parser_free($parser);
   if($vals)
   {
   $day= $vals[28]["attributes"]["DAY"];
   $date= $vals[28]["attributes"]["DATE"];
   $hightemp= $vals[28]["attributes"]["HIGH"];
   $lowtemp= $vals[28]["attributes"]["LOW"];
   $text= $vals[28]["attributes"]["TEXT"];
   $code= $vals[28]["attributes"]["CODE"];
   }
   else
   {
   $city = "Reload!";
   $text = "http://weather.yahoo.com";
   $date = "Traffic jam!";
   }
  ?>
  <div class="tile-content slide">
                    <div class="padding10" style="background: url(http://us.i1.yimg.com/us.yimg.com/i/us/we/52/<?=$code?>.gif) no-repeat top right;">
                        <h1 class="fg-white ntm"><?=$hightemp."°~".$lowtemp?>°</h1>
                        <h1 class="fg-white no-margin"><?=$city?></h1>
                        <h5 class="fg-white no-margin"><?=$text?></h5>
                        <p class="tertiary-text fg-white no-margin">Today</p>
                        <h4 class="fg-white no-margin"><?=$day." ".$date?></h4>
                    </div>
                </div>
  <? } ?>

관련글 더보기

댓글 영역