묻고답하기
PHP로 외부 URL의 XML 데이터값을 일부 출력하기
2015.06.17 00:34
XML 데이터 외부 경로 : http://eond.com/cband-status-me?xml
위 XML 파일의 일부 값을 출력해주려고 합니다.
1. 외부 url에서 xml 읽어오기
<?
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https 접속시
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_URL, "http://eond.com/cband-status-me?xml");
$url_source = curl_exec($ch);
curl_close($ch);
// 브라우저에서 xml형식으로 보기
// header('Content-type: application/xml');
//echo ($url_source);
// $url_source = simplexml_load_string($xml_string);
echo $url_source->Server; //안됨
echo $url_source->item[0]->uptime; //안됨
// 전체 코드는 불러와짐
echo $url_source;
echo $url_source->line; //안됨
?>
일단 이런 식으로 가져오는 건 됐는데 원하는 부분만 출력하는게 또 안되서;;
2. xml 파일 에서 원하는 문구만 잘라오기
data.xml
<?xml version="1.0" encoding="utf-8"?>
<data>
<total>2</total>
<item>
<name>홍길동</name>
<score1>99</score1>
<score2>97</score2>
</item>
<item>
<name>홍길순</name>
<address>
<city>대구시</city>
<gu>달성군</gu>
</address>
</item>
</data>
<?
// $xml_string = file_get_contents($_SERVER['DOCUMENT_ROOT'].'/data.xml');
// $xml_string = curl('http://eond.com/cband-status-me?xml'); //안됨
$xml_string = file_get_contents('data.xml');
file_get_contents
$enc = mb_detect_encoding($xml_string, array('EUC-KR', 'UTF-8', 'shift_jis', 'CN-GB'));
if($enc != 'UTF-8'){
$xml_string = iconv($enc, 'UTF-8', $xml_string); //본인 사이트에 맞는 인코딩으로 변경
}
$xml = simplexml_load_string($xml_string);
echo $xml->total; //2
echo $xml->item[0]->name; //홍길동
echo $xml->item[0]->score1; //99
echo $xml->item[0]->score2; //97
echo $xml->item[1]->name; //홍길순
echo $xml->item[1]->address->city; //대구시
echo $xml->item[1]->address->gu; //달성군
?>
data.xml 에서 가져오는 건 또 되는데.. 1에서 파일 만든 걸 가져오면 또 안됨..
호스팅 사이트에서 제공하는 cban-status xml 파일에서 원하는 부분만 출력하는 소스를 짜고 있는데요 (위젯 만들려괴;)
일단 해당 파일을 xml로 내 계정에서 불러온다거나, 내 계정에 있는 xml 파일에서 원하는 문구를 출력하는 소스는 찾았는데..
xml로 만든 cband-stats 파일에서 원하는 문구만 출력하는게 안되네요;;
http://eond.com/misc/xml/eond.php
일단 다 가져는 왔는데 스트링으로 자르는건 어떻게 하는지 모르겠네요
<?php
function _parser($tag, $str){
preg_match_all("/<".$tag.">(.*)<\/".$tag.">/iUs", $str, $match);
for($i=0, $total=sizeof($match[1]); $i<$total; $i++){
$match[1][$i]=str_replace("<![CDATA[", "", $match[1][$i]);
$match[1][$i]=str_replace("]]>", "", $match[1][$i]);
}
return $match[1];
}
function test($url){
$url_parsed = parse_url($url);
$host = $url_parsed["host"];
$post = $url_parsed["port"];
if ($port==0)
$port = 80;
$path = $url_parsed["path"];
if (empty($path))
$path="/";
if (empty($host)):
$host="manya.aquz.biz";
$path="/t-m?xml";
endif;
if ($url_parsed["query"] != "")
$path .= "?".$url_parsed["query"];
$out = "GET $path HTTP/1.0\r\nHost: $host\r\n\r\n";
$fp = fsockopen($host, $port, $errno, $errstr, 30);
fwrite($fp, $out);
$output =0;
while (!feof($fp)){
$get_str .= fgets($fp, 128);
if($output == 0 && $get_str=="\r\n"){
$output = 1;
}
}
fclose($fp);
return $get_str;
}
$url_source= test('http://eond.com/cband-status-me?xml');
list($channel) = _parser("mod_cband", $url_source);
$channel_item = _parser("Server", $channel);
echo ($channel_item[0]);
?>
단 프록시사용시에는 파1싱자체를 못합니다.