execute(); $feed = $response->body(); } elseif (is_file($feed)) { // Get file contents $feed = @file_get_contents($feed); // Feed could not be loaded if ($feed === FALSE) return []; } // Load the feed $feed = @simplexml_load_string($feed, 'SimpleXMLElement', LIBXML_NOCDATA); // Feed could not be loaded if ($feed === FALSE) return []; $namespaces = $feed->getNamespaces(TRUE); // Detect the feed type. RSS 1.0/2.0 and Atom 1.0 are supported. $feed = isset($feed->channel) ? $feed->xpath('//item') : $feed->entry; $i = 0; $items = []; foreach ($feed as $item) { if ($limit > 0 AND $i++ === $limit) break; $item_fields = (array) $item; // get namespaced tags foreach ($namespaces as $ns) { $item_fields += (array) $item->children($ns); } $items[] = $item_fields; } return $items; } /** * Creates a feed from the given parameters. * * @param array $info feed information * @param array $items items to add to the feed * @param string $encoding define which encoding to use * @return string */ public static function create($info, $items, $encoding = 'UTF-8') { $info += ['title' => 'Generated Feed', 'link' => '', 'generator' => 'KohanaPHP']; $feed = ''; $feed = simplexml_load_string($feed); foreach ($info as $name => $value) { if ($name === 'image') { // Create an image element $image = $feed->channel->addChild('image'); if ( ! isset($value['link'], $value['url'], $value['title'])) { throw new Kohana_Exception('Feed images require a link, url, and title'); } if (strpos($value['link'], '://') === FALSE) { // Convert URIs to URLs $value['link'] = URL::site($value['link'], 'http'); } if (strpos($value['url'], '://') === FALSE) { // Convert URIs to URLs $value['url'] = URL::site($value['url'], 'http'); } // Create the image elements $image->addChild('link', $value['link']); $image->addChild('url', $value['url']); $image->addChild('title', $value['title']); } else { if (($name === 'pubDate' OR $name === 'lastBuildDate') AND (is_int($value) OR ctype_digit($value))) { // Convert timestamps to RFC 822 formatted dates $value = date('r', $value); } elseif (($name === 'link' OR $name === 'docs') AND strpos($value, '://') === FALSE) { // Convert URIs to URLs $value = URL::site($value, 'http'); } // Add the info to the channel $feed->channel->addChild($name, $value); } } foreach ($items as $item) { // Add the item to the channel $row = $feed->channel->addChild('item'); foreach ($item as $name => $value) { if ($name === 'pubDate' AND (is_int($value) OR ctype_digit($value))) { // Convert timestamps to RFC 822 formatted dates $value = date('r', $value); } elseif (($name === 'link' OR $name === 'guid') AND strpos($value, '://') === FALSE) { // Convert URIs to URLs $value = URL::site($value, 'http'); } // Add the info to the row $row->addChild($name, $value); } } if (function_exists('dom_import_simplexml')) { // Convert the feed object to a DOM object $feed = dom_import_simplexml($feed)->ownerDocument; // DOM generates more readable XML $feed->formatOutput = TRUE; // Export the document as XML $feed = $feed->saveXML(); } else { // Export the document as XML $feed = $feed->asXML(); } return $feed; } }