rss파싱과 페이징 처리

<?php
 

$page = $_GET['page'];

$qstr = $_POST[query];

$query = iconv("euc-kr","utf-8",$qstr);
$key=''; //오픈api인증키 꼭 적으세요.

$shownum = 20; //한페이지에 20개를 출력한다는 뜻
$fp = fopen("http://openapi.naver.com/search?key=$key&display=".$shownum."&start=".($shownum*($page-1)+1)."&target=book&sort=sim&query=$query","r");
while (!feof($fp)) {
 $nadata .= fread($fp,1024);
 }
fclose($fp);

//$nadata = implode("",file("http://openapi.naver.com/search?key=사용자키로채우세요&display=".$shownum."&start=".($shownum*($page-1)+1)."&target=kin&sort=sim&query=$query"));

$naverarr = Xml2Array($nadata);
// 배열구조를 알고싶다면 주석을 제거하세요
//var_dump($naverarr);

//이부분은 file(),popen() 함수를 사용할때 중간에 끊어진 데이타를 이용해야 할 경우가 생깁니다.
//이경우 완벽한 XML문서가 아니므로 XMLparser를 사용 할 수 없기에 배열로 변환하는 방법을 선택했습니다.

$oarr = (count($naverarr["item"]) > 0) ? $naverarr["item"]: $naverarr["rss"][0]["body"]["channel"][0]["body"]["item"];


$total = (count($naverarr["item"]) > 0) ? $naverarr["total"][0]["body"] : $naverarr["rss"][0]["body"]["channel"][0]["body"]["total"][0]["body"];

 


//출력값을 배열에 저장한 이유는 $alldata[key]를 통해 여러개의 자료를 재 구축하기위해서입니다

for($s=0;$s<count($oarr);$s++){
 $alldata[] = " <font size=2><a href='". $oarr[$s]["body"]["link"][0]["body"]."' target=_blank>".
       html_entity_decode(iconv("utf-8","euc-kr",$oarr[$s]["body"]["title"][0]["body"])) ."</a><font>\n  -
       <font color=#808080       
        size=2>".html_entity_decode(iconv("utf-8","euc-kr",$oarr[$s]["body"]["description"][0]["body"])) ."</font>
       <br><font color=#808080 size=2>http://book.naver.com</font><hr color=#EEEEEE>\n";
 }


echo @implode("",$alldata); //
 

//xml형식의 문서를 배열로 변환하는 함수입니다. 완벽한 문서형태가 아니더라고 일부 이용가능합니다.
// var_dump()를 이용하여 배열의 구조를 출력하여 원하시는 내용을 추출하는 방법을 선택하세요

 Function Xml2Array($string,$parser_str = '"'){
  $match_ele_exp = '/<(\S+)([^>]*)>(.*?)<\/\\1>/s';
  $match_att_exp = "/(\S+)\=$parser_str([^$parser_str]*)$parser_str/s";
  preg_match_all($match_ele_exp, $string, $match);
  for($i=0,$count=count($match[1]);$i<$count;$i++){
   $key = $i;
   $val = $match[1][$i];
   $tmparray=array();
   preg_match_all($match_att_exp, $match[2][$i], $matchatt);
   for($s=0,$scount=count($matchatt[1]);$s<$scount;$s++)
    $tmparray[$matchatt[1][$s]] = $matchatt[2][$s];

   $match[3][$key] = trim($match[3][$key]);
   if(eregi("^<!\[CDATA\[(.*)\]\]>$",$match[3][$key],$cdatatmp)){
    $match[3][$key] = $cdatatmp[1];
    if($tmparray) $array[$val][] = array("att"=>$tmparray, "body" => $match[3][$key]);
    else $array[$val][] = array("body" => $match[3][$key]);
    }
   else if (preg_match($match_ele_exp, $match[3][$key]) ) {
    if($tmparray) $array[$val][] = array("att"=>$tmparray, "body" => Xml2Array($match[3][$key],$parser_str));
    else $array[$val][] = array("body" => Xml2Array($match[3][$key],$parser_str));
    }
   else {
    if($tmparray) $array[$val][] = array("att"=>$tmparray, "body" => $match[3][$key]);
    else $array[$val][] = array("body" => $match[3][$key]);
    }
   }
  return $array;
 }
?>



태초에 나는 개그이야기를 만들었다.
내말을 믿고 나를 따르면 천당,
내말을 믿지않고 나를 따르지 않으면 지옥,
나는 하늘나라(우주)에 사느니라.

그럼 난 외계인?