merge_items() public static method

If you're merging multiple feeds together, they need to all have dates for the items or else SimplePie will refuse to sort them.
public static merge_items ( array $urls, integer $start, integer $end, integer $limit ) : array
$urls array List of SimplePie feed objects to merge
$start integer Starting item
$end integer Number of items to return
$limit integer Maximum number of items per feed
return array
Example #1
0
 /**
  * Get all items from the feed
  *
  * This is better suited for {@link http://php.net/for for()} loops, whereas
  * {@see get_items()} is better suited for
  * {@link http://php.net/foreach foreach()} loops.
  *
  * @see get_item_quantity
  * @since Beta 2
  * @param int $start Index to start at
  * @param int $end Number of items to return. 0 for all items after `$start`
  * @return array|null List of {@see SimplePie_Item} objects
  */
 public function get_items($start = 0, $end = 0)
 {
     if (!isset($this->data['items'])) {
         if (!empty($this->multifeed_objects)) {
             $this->data['items'] = SimplePie::merge_items($this->multifeed_objects, $start, $end, $this->item_limit);
         } else {
             $this->data['items'] = array();
             if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'entry')) {
                 $keys = array_keys($items);
                 foreach ($keys as $key) {
                     $this->data['items'][] = $this->registry->create('Item', array($this, $items[$key]));
                 }
             }
             if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'entry')) {
                 $keys = array_keys($items);
                 foreach ($keys as $key) {
                     $this->data['items'][] = $this->registry->create('Item', array($this, $items[$key]));
                 }
             }
             if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'item')) {
                 $keys = array_keys($items);
                 foreach ($keys as $key) {
                     $this->data['items'][] = $this->registry->create('Item', array($this, $items[$key]));
                 }
             }
             if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'item')) {
                 $keys = array_keys($items);
                 foreach ($keys as $key) {
                     $this->data['items'][] = $this->registry->create('Item', array($this, $items[$key]));
                 }
             }
             if ($items = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'item')) {
                 $keys = array_keys($items);
                 foreach ($keys as $key) {
                     $this->data['items'][] = $this->registry->create('Item', array($this, $items[$key]));
                 }
             }
         }
     }
     if (!empty($this->data['items'])) {
         // If we want to order it by date, check if all items have a date, and then sort it
         if ($this->order_by_date && empty($this->multifeed_objects)) {
             if (!isset($this->data['ordered_items'])) {
                 $do_sort = true;
                 foreach ($this->data['items'] as $item) {
                     if (!$item->get_date('U')) {
                         $do_sort = false;
                         break;
                     }
                 }
                 $item = null;
                 $this->data['ordered_items'] = $this->data['items'];
                 if ($do_sort) {
                     usort($this->data['ordered_items'], array(get_class($this), 'sort_items'));
                 }
             }
             $items = $this->data['ordered_items'];
         } else {
             $items = $this->data['items'];
         }
         // Slice the data as desired
         if ($end === 0) {
             return array_slice($items, $start);
         } else {
             return array_slice($items, $start, $end);
         }
     } else {
         return array();
     }
 }
Example #2
0
    // TODO use regex to get the hostname instead of this flakey PHP function.
    $class = preg_replace("/www\\./", "", $class);
    // Remove `www.`.
    $class = preg_replace("/\\.(com|org|net)/", "", $class);
    // Remove top level domains. Add more as you see fit.
    $class = preg_replace("/\\./", "_", $class);
    // Replace `.`s with `_`s.
    return $class;
}
date_default_timezone_set('America/Chicago');
// Change this to your timezone.
require_once 'simplepie.inc';
foreach ($feeds as $feed) {
    $merge[] = new SimplePie($feed);
}
$merged = SimplePie::merge_items($merge, 0, 20);
// Get the 20 most recent items.
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
	<title>Someone's Lifestream</title>
	<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
</head>
<body>

	<h1>My Lifesteam</h1>
<?php 
$thedate = '';
foreach ($merged as $item) {
    if ($thedate != $item->get_date('F j, Y')) {
 public function get_items($start = 0, $end = 0)
 {
     if (!isset($this->data['items'])) {
         if (!empty($this->multifeed_objects)) {
             $this->data['items'] = SimplePie::merge_items($this->multifeed_objects, $start, $end, $this->item_limit);
         } else {
             $this->data['items'] = array();
             if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'entry')) {
                 $keys = array_keys($items);
                 foreach ($keys as $key) {
                     $this->data['items'][] = new $this->item_class($this, $items[$key]);
                 }
             }
             if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'entry')) {
                 $keys = array_keys($items);
                 foreach ($keys as $key) {
                     $this->data['items'][] = new $this->item_class($this, $items[$key]);
                 }
             }
             if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'item')) {
                 $keys = array_keys($items);
                 foreach ($keys as $key) {
                     $this->data['items'][] = new $this->item_class($this, $items[$key]);
                 }
             }
             if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'item')) {
                 $keys = array_keys($items);
                 foreach ($keys as $key) {
                     $this->data['items'][] = new $this->item_class($this, $items[$key]);
                 }
             }
             if ($items = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'item')) {
                 $keys = array_keys($items);
                 foreach ($keys as $key) {
                     $this->data['items'][] = new $this->item_class($this, $items[$key]);
                 }
             }
         }
     }
     if (!empty($this->data['items'])) {
         if ($this->order_by_date && empty($this->multifeed_objects)) {
             if (!isset($this->data['ordered_items'])) {
                 $do_sort = true;
                 foreach ($this->data['items'] as $item) {
                     if (!$item->get_date('U')) {
                         $do_sort = false;
                         break;
                     }
                 }
                 $item = null;
                 $this->data['ordered_items'] = $this->data['items'];
                 if ($do_sort) {
                     usort($this->data['ordered_items'], array(&$this, 'sort_items'));
                 }
             }
             $items = $this->data['ordered_items'];
         } else {
             $items = $this->data['items'];
         }
         if ($end === 0) {
             return array_slice($items, $start);
         } else {
             return array_slice($items, $start, $end);
         }
     } else {
         return array();
     }
 }
Example #4
0
 /**
  * Get all items from the feed
  *
  * This is better suited for {@link http://php.net/for for()} loops, whereas
  * {@see get_items()} is better suited for
  * {@link http://php.net/foreach foreach()} loops.
  *
  * @see get_item_quantity
  * @since Beta 2
  * @param int $start Index to start at
  * @param int $end Number of items to return. 0 for all items after `$start`
  * @return SimplePie_Item[]|null List of {@see SimplePie_Item} objects
  */
 public function get_items($start = 0, $end = 0)
 {
     if (!isset($this->data['items'])) {
         if (!empty($this->multifeed_objects)) {
             $this->data['items'] = SimplePie::merge_items($this->multifeed_objects, $start, $end, $this->item_limit);
             if (empty($this->data['items'])) {
                 return array();
             }
             return $this->data['items'];
         }
         $this->data['items'] = array();
         if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'entry')) {
             $keys = array_keys($items);
             foreach ($keys as $key) {
                 $this->data['items'][] = $this->registry->create('Item', array($this, $items[$key]));
             }
         }
         if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'entry')) {
             $keys = array_keys($items);
             foreach ($keys as $key) {
                 $this->data['items'][] = $this->registry->create('Item', array($this, $items[$key]));
             }
         }
         if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'item')) {
             $keys = array_keys($items);
             foreach ($keys as $key) {
                 $this->data['items'][] = $this->registry->create('Item', array($this, $items[$key]));
             }
         }
         if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'item')) {
             $keys = array_keys($items);
             foreach ($keys as $key) {
                 $this->data['items'][] = $this->registry->create('Item', array($this, $items[$key]));
             }
         }
         if ($items = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'item')) {
             $keys = array_keys($items);
             foreach ($keys as $key) {
                 $this->data['items'][] = $this->registry->create('Item', array($this, $items[$key]));
             }
         }
     }
     if (empty($this->data['items'])) {
         return array();
     }
     if ($this->order_by_date) {
         if (!isset($this->data['ordered_items'])) {
             $this->data['ordered_items'] = $this->data['items'];
             usort($this->data['ordered_items'], array(get_class($this), 'sort_items'));
         }
         $items = $this->data['ordered_items'];
     } else {
         $items = $this->data['items'];
     }
     // Slice the data as desired
     if ($end === 0) {
         return array_slice($items, $start);
     } else {
         return array_slice($items, $start, $end);
     }
 }