RSS 갯수를 정하고 싶습니다.
관련링크
본문
요즘 RSS 때문에 계속 헤매고있네요~~~
아래는 GamZehYaavor 님 블로그에서 퍼왔는데 RSS 나오는 갯수가 정할 수가 없어 문의드립니다.
----------------------------------------------------------------------------------
<?php
include 'dbinfo.inc';
$items = array();
$i = 0;
$xmlReader = new XMLReader();
$xmlReader->open("rss주소", null, LIBXML_NOBLANKS);
$isParserActive = false;
$simpleNodeTypes = array("pubDate", "media:description", "media:title");
while ($xmlReader->read()) {
$nodeType = $xmlReader->nodeType;
if ($nodeType != XMLReader::ELEMENT && $nodeType != XMLReader::END_ELEMENT) {
continue;
}
else if ($xmlReader->name == "item")
{
if (($nodeType == XMLReader::END_ELEMENT) && $isParserActive){
$i++;
}
$isParserActive = ($nodeType != XMLReader::END_ELEMENT);
}
if (!$isParserActive || $nodeType == XMLReader::END_ELEMENT){
continue;
}
$name = $xmlReader->name;
if (in_array ($name, $simpleNodeTypes))
{ // Skip to the text node
$xmlReader->read ();
$value = $xmlReader->value;
$items[$i][$name] = $value;
} else if ($name == "media:thumbnail") {
$items[$i]['thumbnail_url'] = $xmlReader->getAttribute("url");
} else if ($name == "media:content") {
$items[$i]['content_url'] = $xmlReader->getAttribute("url");
$items[$i]['type'] = $xmlReader->getAttribute("type");
} else if ($name == "media:category") {
$xmlReader->read ();
$items[$i]['tag'] = $xmlReader->value;
}
}
?>
!-->
답변 1
<?php
include 'dbinfo.inc';
$items = array();
$i = 0;
$limit = 10; // ★ 제한
$xmlReader = new XMLReader();
$xmlReader->open("rss주소", null, LIBXML_NOBLANKS);
$isParserActive = false;
$simpleNodeTypes = array("pubDate", "media:description", "media:title");
while ($xmlReader->read()) {
if ( $i>=$limit ) break; // ★ 제한 벗어남
$nodeType = $xmlReader->nodeType;
if ($nodeType != XMLReader::ELEMENT && $nodeType != XMLReader::END_ELEMENT) {
continue;
}
else if ($xmlReader->name == "item")
{
if (($nodeType == XMLReader::END_ELEMENT) && $isParserActive){
$i++;
}
$isParserActive = ($nodeType != XMLReader::END_ELEMENT);
}
if (!$isParserActive || $nodeType == XMLReader::END_ELEMENT){
continue;
}
$name = $xmlReader->name;
if (in_array ($name, $simpleNodeTypes))
{ // Skip to the text node
$xmlReader->read ();
$value = $xmlReader->value;
$items[$i][$name] = $value;
} else if ($name == "media:thumbnail") {
$items[$i]['thumbnail_url'] = $xmlReader->getAttribute("url");
} else if ($name == "media:content") {
$items[$i]['content_url'] = $xmlReader->getAttribute("url");
$items[$i]['type'] = $xmlReader->getAttribute("type");
} else if ($name == "media:category") {
$xmlReader->read ();
$items[$i]['tag'] = $xmlReader->value;
}
}
반복문 끝나고 한 줄 추가해서 원하는 크기만큼 구하는 방법도 있습니다.
다만, 위의 조건 만족 시 반복문을 벗어나는 방법보다 효율이 떨어집니다.
<?php
include 'dbinfo.inc';
$items = array();
$i = 0;
$xmlReader = new XMLReader();
$xmlReader->open("rss주소", null, LIBXML_NOBLANKS);
$isParserActive = false;
$simpleNodeTypes = array("pubDate", "media:description", "media:title");
while ($xmlReader->read()) {
$nodeType = $xmlReader->nodeType;
if ($nodeType != XMLReader::ELEMENT && $nodeType != XMLReader::END_ELEMENT) {
continue;
}
else if ($xmlReader->name == "item")
{
if (($nodeType == XMLReader::END_ELEMENT) && $isParserActive){
$i++;
}
$isParserActive = ($nodeType != XMLReader::END_ELEMENT);
}
if (!$isParserActive || $nodeType == XMLReader::END_ELEMENT){
continue;
}
$name = $xmlReader->name;
if (in_array ($name, $simpleNodeTypes))
{ // Skip to the text node
$xmlReader->read ();
$value = $xmlReader->value;
$items[$i][$name] = $value;
} else if ($name == "media:thumbnail") {
$items[$i]['thumbnail_url'] = $xmlReader->getAttribute("url");
} else if ($name == "media:content") {
$items[$i]['content_url'] = $xmlReader->getAttribute("url");
$items[$i]['type'] = $xmlReader->getAttribute("type");
} else if ($name == "media:category") {
$xmlReader->read ();
$items[$i]['tag'] = $xmlReader->value;
}
}
$items = array_slice($items, 0, 10); // ★ 지정한 크기만큼 할당
답변을 작성하시기 전에 로그인 해주세요.