2012년 2월 10일 금요일

PHP XML parsing

RSS 내용을 파싱하기로 하였다.

RSS 소스 : http://feeds.nytimes.com/nyt/rss/World

domxml_open_mem() : XML 데이터를 파싱하여 DOM 객체(DomDocument)를 리턴한다.
DomDocument::get_elements_by_tagname() : 특정 태그 이름을 갖는 DomNode 들을 배열 형태로 리턴한다.
DomNode::child_nodes() : Node 가 포함하고 있는 Node 들을 배열 형태로 리턴한다.
DomNode::node_name() : 태그명을 리턴한다.
DomNode::get_content() : 태그가 갖고 있는 내용물을 리턴한다.

XML parsing 하는 소스
<!DOCTYPE html>

<html>
  <head>
    <meta http-equiv="Content-type" content="text/html; charset=utf8">
    <title>XML</title>
    <style type="text/css">
      div.item {border:2px solid black; margin:10px; padding:5px;}
      span.item-name {font-weight:bold;}
    </style>
  </head>
  
  <body>
  <?
  
  // Get XML Data
  $url = "http://feeds.nytimes.com/nyt/rss/World";
  
  $curl = curl_init();
  curl_setopt($curl, CURLOPT_URL, $url);
  curl_setopt($curl, CURLOPT_HEADER, 0);
  curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  $xml = curl_exec($curl);
  $info = curl_getinfo($curl);
  curl_close($curl);
  
  // Parse XML Data
  if (!$doc = domxml_open_mem($xml)) {
   echo "Could not load xml...";
  } else {
   $items = $doc->get_elements_by_tagname("item");
   foreach ($items as $item) {
    ?>
    <div class="item">
    <?
    $id = 0;
    $children = $item->child_nodes();
    foreach ($children as $child) {
     $name = $child->node_name();
        if ($name != "#text") {
          $content = $child->get_content();
          $content = htmlspecialchars($content, ENT_QUOTES, "UTF-8");
          $new = str_replace("\n", "< br / >", $content);
          echo "<span class='item-name'>{$name} : </span>{$new}< br / >";
        }
    }
    ?></div><?
   }
  }  
  ?>
  </body>
</html>

댓글 1개:

  1. html xmlns파싱(도와좀주세요)불법파싱 아닙니다^^
    1.https://www.sbobet.com/euro/football 여기에보면 1X2는 승무패를말합니다(여기의 리그,팀명,시간,배당)
    Asian Handicap 이것은 핸디캡 배당을 말합니다(여기의 리그,팀명,시간,배당및 기준값)
    2.https://www.sbobet.com/euro/basketball
    3.https://www.sbobet.com/euro/baseball 여기Money Line
    4.https://www.sbobet.com/euro/ice-hockey
    이것을 실시간으로 파싱하고 싶습니다
    로그인하면 보여지는 페이지가 있습니다(아이디kookoosujin 비번hanhan11551555)
    축구: http://85g1e6h603w6.asia.sbobet.com/web-root/restricted/default.aspx?loginname=754dfae2dec9d7168c641ecf1fa6b554&lang=ko-kr&sportId=1
    한국어로 선택하셔서보셔도되구요...우측에 더보기하면 안에 다른값들이 있는데 그것까지면 더욱좋구요..
    농구: 주소같네요
    --- IBCBET.COM ---
    www.ibcbet.com
    S6KW0100PN3
    asas1212
    축구 : http://d16k8.ibcbet.com/main.aspx Match Odds 1X2=승무패(여기의 리그,팀명,시간,배당)
    http://d16k8.ibcbet.com/main.aspx 같은데 여기 핸디 오버언더 부분들
    농구 야구 모두 주소같습니다
    사실 위에 배당들은 실시간으로 받아지면 좋겠습니다
    그값들이 종종 바뀌거든요..가능하심연락좀^^언어php
    kookoo009@nate.com

    답글삭제