채택완료

RSS 갯수를 정하고 싶습니다.

2021-07-23 (금) 23:52:23 2,421

요즘 RSS 때문에 계속 헤매고있네요~~~

아래는 GamZehYaavor 님 블로그에서 퍼왔는데 RSS 나오는 갯수가 정할 수가 없어 문의드립니다.

----------------------------------------------------------------------------------

Copy
<?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개 / 댓글 1개

채택된 답변
+20 포인트
2021-07-24 (토) 00:29:18
Copy
<?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;  
 }
}

반복문 끝나고 한 줄 추가해서 원하는 크기만큼 구하는 방법도 있습니다.

다만, 위의 조건 만족 시 반복문을 벗어나는 방법보다 효율이 떨어집니다.

Copy
<?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); // ★ 지정한 크기만큼 할당

답변에 대한 댓글 1개

2021-07-24 (토) 01:32:17
감사드립니다. 첫번째 소스가 갯수를 정할수있습니다.
늦은밤 감사드립니다.~~~~~

답변을 작성하려면 로그인이 필요합니다.