Changeset 1654
- Timestamp:
- 01/01/2008 09:06:25 PM (12 months ago)
- Files:
-
- 1 modified
-
trunk/system/helpers/feed.php (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/system/helpers/feed.php
r1481 r1654 27 27 $limit = (int) $limit; 28 28 29 // Create a DOM parser30 $ parser = new DOMDocument;29 // Disable error reporting while opening the feed 30 $ER = error_reporting(0); 31 31 32 if (is_file($feed)) 32 // Allow loading by filename or raw XML string. 33 $feed = is_file($feed) ? simplexml_load_file($feed) : simplexml_load_string($feed); 34 35 // Restore error reporting 36 error_reporting($ER); 37 38 // Feed could not be loaded 39 if ($feed === FALSE) 40 return array(); 41 42 // Detect the feed type. RSS 1.0/2.0 and Atom 1.0 are supported. 43 $feed = isset($feed->channel) ? $feed->xpath('//item') : $feed->entry; 44 45 $i = 0; 46 $items = array(); 47 48 foreach ($feed as $item) 33 49 { 34 // Load by file 35 $parser->load($feed); 36 } 37 else 38 { 39 // Load XML in the string 40 $parser->loadXML($feed); 50 if ($i++ === $limit) 51 break; 52 53 $items[] = (array) $item; 41 54 } 42 55 43 // Reset the feed to an empty array 44 $feed = array(); 45 46 // Choose the name of the entry (RSS or Atom). Atom feeds use <feed> 47 // as the XML container, RSS uses <rdf>. 48 $entry = ($parser->getElementsByTagName('feed')->length > 0) ? 'entry' : 'item'; 49 50 // Parse each of the RSS items 51 foreach($parser->getElementsByTagName($entry) as $index => $node) 52 { 53 if ($limit > 0 AND $index >= $limit) 54 break; 55 56 // Create a new data set 57 $item = array(); 58 59 // Get all the of fields in the feed item 60 foreach($node->childNodes as $node) 61 { 62 // Only add XML element nodes 63 if ($node->nodeType === XML_ELEMENT_NODE) 64 { 65 $item[$node->nodeName] = $node->nodeValue; 66 } 67 } 68 69 // Add the item data to the feed 70 $feed[] = $item; 71 } 72 73 return $feed; 56 return $items; 74 57 } 75 58
