1<?php
2/**
3 * SimplePie
4 *
5 * A PHP-Based RSS and Atom Feed Framework.
6 * Takes the hard work out of managing a complete RSS/Atom solution.
7 *
8 * Copyright (c) 2004-2016, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without modification, are
12 * permitted provided that the following conditions are met:
13 *
14 * 	* Redistributions of source code must retain the above copyright notice, this list of
15 * 	  conditions and the following disclaimer.
16 *
17 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
18 * 	  of conditions and the following disclaimer in the documentation and/or other materials
19 * 	  provided with the distribution.
20 *
21 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
22 * 	  to endorse or promote products derived from this software without specific prior
23 * 	  written permission.
24 *
25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
26 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
27 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
28 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
32 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33 * POSSIBILITY OF SUCH DAMAGE.
34 *
35 * @package SimplePie
36 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
37 * @author Ryan Parman
38 * @author Sam Sneddon
39 * @author Ryan McCue
40 * @link http://simplepie.org/ SimplePie
41 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
42 */
43
44
45/**
46 * Manages all item-related data
47 *
48 * Used by {@see SimplePie::get_item()} and {@see SimplePie::get_items()}
49 *
50 * This class can be overloaded with {@see SimplePie::set_item_class()}
51 *
52 * @package SimplePie
53 * @subpackage API
54 */
55class SimplePie_Item
56{
57	/**
58	 * Parent feed
59	 *
60	 * @access private
61	 * @var SimplePie
62	 */
63	var $feed;
64
65	/**
66	 * Raw data
67	 *
68	 * @access private
69	 * @var array
70	 */
71	var $data = array();
72
73	/**
74	 * Registry object
75	 *
76	 * @see set_registry
77	 * @var SimplePie_Registry
78	 */
79	protected $registry;
80
81	/**
82	 * Create a new item object
83	 *
84	 * This is usually used by {@see SimplePie::get_items} and
85	 * {@see SimplePie::get_item}. Avoid creating this manually.
86	 *
87	 * @param SimplePie $feed Parent feed
88	 * @param array $data Raw data
89	 */
90	public function __construct($feed, $data)
91	{
92		$this->feed = $feed;
93		$this->data = $data;
94	}
95
96	/**
97	 * Set the registry handler
98	 *
99	 * This is usually used by {@see SimplePie_Registry::create}
100	 *
101	 * @since 1.3
102	 * @param SimplePie_Registry $registry
103	 */
104	public function set_registry(SimplePie_Registry $registry)
105	{
106		$this->registry = $registry;
107	}
108
109	/**
110	 * Get a string representation of the item
111	 *
112	 * @return string
113	 */
114	public function __toString()
115	{
116		return md5(serialize($this->data));
117	}
118
119	/**
120	 * Remove items that link back to this before destroying this object
121	 */
122	public function __destruct()
123	{
124		if (!gc_enabled())
125		{
126			unset($this->feed);
127		}
128	}
129
130	/**
131	 * Get data for an item-level element
132	 *
133	 * This method allows you to get access to ANY element/attribute that is a
134	 * sub-element of the item/entry tag.
135	 *
136	 * See {@see SimplePie::get_feed_tags()} for a description of the return value
137	 *
138	 * @since 1.0
139	 * @see http://simplepie.org/wiki/faq/supported_xml_namespaces
140	 * @param string $namespace The URL of the XML namespace of the elements you're trying to access
141	 * @param string $tag Tag name
142	 * @return array
143	 */
144	public function get_item_tags($namespace, $tag)
145	{
146		if (isset($this->data['child'][$namespace][$tag]))
147		{
148			return $this->data['child'][$namespace][$tag];
149		}
150
151		return null;
152	}
153
154	/**
155	 * Get the base URL value from the parent feed
156	 *
157	 * Uses `<xml:base>`
158	 *
159	 * @param array $element
160	 * @return string
161	 */
162	public function get_base($element = array())
163	{
164		return $this->feed->get_base($element);
165	}
166
167	/**
168	 * Sanitize feed data
169	 *
170	 * @access private
171	 * @see SimplePie::sanitize()
172	 * @param string $data Data to sanitize
173	 * @param int $type One of the SIMPLEPIE_CONSTRUCT_* constants
174	 * @param string $base Base URL to resolve URLs against
175	 * @return string Sanitized data
176	 */
177	public function sanitize($data, $type, $base = '')
178	{
179		return $this->feed->sanitize($data, $type, $base);
180	}
181
182	/**
183	 * Get the parent feed
184	 *
185	 * Note: this may not work as you think for multifeeds!
186	 *
187	 * @link http://simplepie.org/faq/typical_multifeed_gotchas#missing_data_from_feed
188	 * @since 1.0
189	 * @return SimplePie
190	 */
191	public function get_feed()
192	{
193		return $this->feed;
194	}
195
196	/**
197	 * Get the unique identifier for the item
198	 *
199	 * This is usually used when writing code to check for new items in a feed.
200	 *
201	 * Uses `<atom:id>`, `<guid>`, `<dc:identifier>` or the `about` attribute
202	 * for RDF. If none of these are supplied (or `$hash` is true), creates an
203	 * MD5 hash based on the permalink, title and content.
204	 *
205	 * @since Beta 2
206	 * @param boolean $hash Should we force using a hash instead of the supplied ID?
207	 * @param string|false $fn User-supplied function to generate an hash
208	 * @return string|null
209	 */
210	public function get_id($hash = false, $fn = 'md5')
211	{
212		if (!$hash)
213		{
214			if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'id'))
215			{
216				return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
217			}
218			elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'id'))
219			{
220				return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
221			}
222			elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'guid'))
223			{
224				return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
225			}
226			elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'identifier'))
227			{
228				return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
229			}
230			elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'identifier'))
231			{
232				return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
233			}
234			elseif (isset($this->data['attribs'][SIMPLEPIE_NAMESPACE_RDF]['about']))
235			{
236				return $this->sanitize($this->data['attribs'][SIMPLEPIE_NAMESPACE_RDF]['about'], SIMPLEPIE_CONSTRUCT_TEXT);
237			}
238		}
239		if ($fn === false)
240		{
241			return null;
242		}
243		elseif (!is_callable($fn))
244		{
245			trigger_error('User-supplied function $fn must be callable', E_USER_WARNING);
246			$fn = 'md5';
247		}
248		return call_user_func($fn,
249		       $this->get_permalink().$this->get_title().$this->get_content());
250	}
251
252	/**
253	 * Get the title of the item
254	 *
255	 * Uses `<atom:title>`, `<title>` or `<dc:title>`
256	 *
257	 * @since Beta 2 (previously called `get_item_title` since 0.8)
258	 * @return string|null
259	 */
260	public function get_title()
261	{
262		if (!isset($this->data['title']))
263		{
264			if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title'))
265			{
266				$this->data['title'] = $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
267			}
268			elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title'))
269			{
270				$this->data['title'] = $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
271			}
272			elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title'))
273			{
274				$this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
275			}
276			elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title'))
277			{
278				$this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
279			}
280			elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title'))
281			{
282				$this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
283			}
284			elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title'))
285			{
286				$this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
287			}
288			elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title'))
289			{
290				$this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
291			}
292			else
293			{
294				$this->data['title'] = null;
295			}
296		}
297		return $this->data['title'];
298	}
299
300	/**
301	 * Get the content for the item
302	 *
303	 * Prefers summaries over full content , but will return full content if a
304	 * summary does not exist.
305	 *
306	 * To prefer full content instead, use {@see get_content}
307	 *
308	 * Uses `<atom:summary>`, `<description>`, `<dc:description>` or
309	 * `<itunes:subtitle>`
310	 *
311	 * @since 0.8
312	 * @param boolean $description_only Should we avoid falling back to the content?
313	 * @return string|null
314	 */
315	public function get_description($description_only = false)
316	{
317		if (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'summary')) &&
318		    ($return = $this->sanitize($tags[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($tags[0]['attribs'])), $this->get_base($tags[0]))))
319		{
320			return $return;
321		}
322		elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'summary')) &&
323		        ($return = $this->sanitize($tags[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($tags[0]['attribs'])), $this->get_base($tags[0]))))
324		{
325			return $return;
326		}
327		elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description')) &&
328		        ($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($tags[0]))))
329		{
330			return $return;
331		}
332		elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description')) &&
333		        ($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($tags[0]))))
334		{
335			return $return;
336		}
337		elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description')) &&
338		        ($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)))
339		{
340			return $return;
341		}
342		elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description')) &&
343		        ($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)))
344		{
345			return $return;
346		}
347		elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary')) &&
348		        ($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($tags[0]))))
349		{
350			return $return;
351		}
352		elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle')) &&
353		        ($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)))
354		{
355			return $return;
356		}
357		elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description')) &&
358		        ($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_HTML)))
359		{
360			return $return;
361		}
362
363		elseif (!$description_only)
364		{
365			return $this->get_content(true);
366		}
367
368		return null;
369	}
370
371	/**
372	 * Get the content for the item
373	 *
374	 * Prefers full content over summaries, but will return a summary if full
375	 * content does not exist.
376	 *
377	 * To prefer summaries instead, use {@see get_description}
378	 *
379	 * Uses `<atom:content>` or `<content:encoded>` (RSS 1.0 Content Module)
380	 *
381	 * @since 1.0
382	 * @param boolean $content_only Should we avoid falling back to the description?
383	 * @return string|null
384	 */
385	public function get_content($content_only = false)
386	{
387		if (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'content')) &&
388		    ($return = $this->sanitize($tags[0]['data'], $this->registry->call('Misc', 'atom_10_content_construct_type', array($tags[0]['attribs'])), $this->get_base($tags[0]))))
389		{
390			return $return;
391		}
392		elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'content')) &&
393		        ($return = $this->sanitize($tags[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($tags[0]['attribs'])), $this->get_base($tags[0]))))
394		{
395			return $return;
396		}
397		elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT, 'encoded')) &&
398		        ($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($tags[0]))))
399		{
400			return $return;
401		}
402		elseif (!$content_only)
403		{
404			return $this->get_description(true);
405		}
406
407		return null;
408	}
409
410	/**
411	 * Get the media:thumbnail of the item
412	 *
413	 * Uses `<media:thumbnail>`
414	 *
415	 *
416	 * @return array|null
417	 */
418	public function get_thumbnail()
419	{
420		if (!isset($this->data['thumbnail']))
421		{
422			if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail'))
423			{
424				$this->data['thumbnail'] = $return[0]['attribs'][''];
425			}
426			else
427			{
428				$this->data['thumbnail'] = null;
429			}
430		}
431		return $this->data['thumbnail'];
432	}
433
434	/**
435	 * Get a category for the item
436	 *
437	 * @since Beta 3 (previously called `get_categories()` since Beta 2)
438	 * @param int $key The category that you want to return.  Remember that arrays begin with 0, not 1
439	 * @return SimplePie_Category|null
440	 */
441	public function get_category($key = 0)
442	{
443		$categories = $this->get_categories();
444		if (isset($categories[$key]))
445		{
446			return $categories[$key];
447		}
448
449		return null;
450	}
451
452	/**
453	 * Get all categories for the item
454	 *
455	 * Uses `<atom:category>`, `<category>` or `<dc:subject>`
456	 *
457	 * @since Beta 3
458	 * @return SimplePie_Category[]|null List of {@see SimplePie_Category} objects
459	 */
460	public function get_categories()
461	{
462		$categories = array();
463
464		$type = 'category';
465		foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, $type) as $category)
466		{
467			$term = null;
468			$scheme = null;
469			$label = null;
470			if (isset($category['attribs']['']['term']))
471			{
472				$term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT);
473			}
474			if (isset($category['attribs']['']['scheme']))
475			{
476				$scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
477			}
478			if (isset($category['attribs']['']['label']))
479			{
480				$label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
481			}
482			$categories[] = $this->registry->create('Category', array($term, $scheme, $label, $type));
483		}
484		foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, $type) as $category)
485		{
486			// This is really the label, but keep this as the term also for BC.
487			// Label will also work on retrieving because that falls back to term.
488			$term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
489			if (isset($category['attribs']['']['domain']))
490			{
491				$scheme = $this->sanitize($category['attribs']['']['domain'], SIMPLEPIE_CONSTRUCT_TEXT);
492			}
493			else
494			{
495				$scheme = null;
496			}
497			$categories[] = $this->registry->create('Category', array($term, $scheme, null, $type));
498		}
499
500		$type = 'subject';
501		foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, $type) as $category)
502		{
503			$categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null, $type));
504		}
505		foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, $type) as $category)
506		{
507			$categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null, $type));
508		}
509
510		if (!empty($categories))
511		{
512			return array_unique($categories);
513		}
514
515		return null;
516	}
517
518	/**
519	 * Get an author for the item
520	 *
521	 * @since Beta 2
522	 * @param int $key The author that you want to return.  Remember that arrays begin with 0, not 1
523	 * @return SimplePie_Author|null
524	 */
525	public function get_author($key = 0)
526	{
527		$authors = $this->get_authors();
528		if (isset($authors[$key]))
529		{
530			return $authors[$key];
531		}
532
533		return null;
534	}
535
536	/**
537	 * Get a contributor for the item
538	 *
539	 * @since 1.1
540	 * @param int $key The contrbutor that you want to return.  Remember that arrays begin with 0, not 1
541	 * @return SimplePie_Author|null
542	 */
543	public function get_contributor($key = 0)
544	{
545		$contributors = $this->get_contributors();
546		if (isset($contributors[$key]))
547		{
548			return $contributors[$key];
549		}
550
551		return null;
552	}
553
554	/**
555	 * Get all contributors for the item
556	 *
557	 * Uses `<atom:contributor>`
558	 *
559	 * @since 1.1
560	 * @return SimplePie_Author[]|null List of {@see SimplePie_Author} objects
561	 */
562	public function get_contributors()
563	{
564		$contributors = array();
565		foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'contributor') as $contributor)
566		{
567			$name = null;
568			$uri = null;
569			$email = null;
570			if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data']))
571			{
572				$name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
573			}
574			if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data']))
575			{
576				$uri = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]));
577			}
578			if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data']))
579			{
580				$email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
581			}
582			if ($name !== null || $email !== null || $uri !== null)
583			{
584				$contributors[] = $this->registry->create('Author', array($name, $uri, $email));
585			}
586		}
587		foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'contributor') as $contributor)
588		{
589			$name = null;
590			$url = null;
591			$email = null;
592			if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data']))
593			{
594				$name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
595			}
596			if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data']))
597			{
598				$url = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]));
599			}
600			if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data']))
601			{
602				$email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
603			}
604			if ($name !== null || $email !== null || $url !== null)
605			{
606				$contributors[] = $this->registry->create('Author', array($name, $url, $email));
607			}
608		}
609
610		if (!empty($contributors))
611		{
612			return array_unique($contributors);
613		}
614
615		return null;
616	}
617
618	/**
619	 * Get all authors for the item
620	 *
621	 * Uses `<atom:author>`, `<author>`, `<dc:creator>` or `<itunes:author>`
622	 *
623	 * @since Beta 2
624	 * @return SimplePie_Author[]|null List of {@see SimplePie_Author} objects
625	 */
626	public function get_authors()
627	{
628		$authors = array();
629		foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author)
630		{
631			$name = null;
632			$uri = null;
633			$email = null;
634			if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data']))
635			{
636				$name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
637			}
638			if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data']))
639			{
640				$uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]));
641			}
642			if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data']))
643			{
644				$email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
645			}
646			if ($name !== null || $email !== null || $uri !== null)
647			{
648				$authors[] = $this->registry->create('Author', array($name, $uri, $email));
649			}
650		}
651		if ($author = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author'))
652		{
653			$name = null;
654			$url = null;
655			$email = null;
656			if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data']))
657			{
658				$name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
659			}
660			if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data']))
661			{
662				$url = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]));
663			}
664			if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data']))
665			{
666				$email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
667			}
668			if ($name !== null || $email !== null || $url !== null)
669			{
670				$authors[] = $this->registry->create('Author', array($name, $url, $email));
671			}
672		}
673		if ($author = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'author'))
674		{
675			$authors[] = $this->registry->create('Author', array(null, null, $this->sanitize($author[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)));
676		}
677		foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author)
678		{
679			$authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
680		}
681		foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author)
682		{
683			$authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
684		}
685		foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author)
686		{
687			$authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
688		}
689
690		if (!empty($authors))
691		{
692			return array_unique($authors);
693		}
694		elseif (($source = $this->get_source()) && ($authors = $source->get_authors()))
695		{
696			return $authors;
697		}
698		elseif ($authors = $this->feed->get_authors())
699		{
700			return $authors;
701		}
702
703		return null;
704	}
705
706	/**
707	 * Get the copyright info for the item
708	 *
709	 * Uses `<atom:rights>` or `<dc:rights>`
710	 *
711	 * @since 1.1
712	 * @return string
713	 */
714	public function get_copyright()
715	{
716		if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights'))
717		{
718			return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
719		}
720		elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights'))
721		{
722			return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
723		}
724		elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights'))
725		{
726			return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
727		}
728
729		return null;
730	}
731
732	/**
733	 * Get the posting date/time for the item
734	 *
735	 * Uses `<atom:published>`, `<atom:updated>`, `<atom:issued>`,
736	 * `<atom:modified>`, `<pubDate>` or `<dc:date>`
737	 *
738	 * Note: obeys PHP's timezone setting. To get a UTC date/time, use
739	 * {@see get_gmdate}
740	 *
741	 * @since Beta 2 (previously called `get_item_date` since 0.8)
742	 *
743	 * @param string $date_format Supports any PHP date format from {@see http://php.net/date} (empty for the raw data)
744	 * @return int|string|null
745	 */
746	public function get_date($date_format = 'j F Y, g:i a')
747	{
748		if (!isset($this->data['date']))
749		{
750			if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'published'))
751			{
752				$this->data['date']['raw'] = $return[0]['data'];
753			}
754			elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'pubDate'))
755			{
756				$this->data['date']['raw'] = $return[0]['data'];
757			}
758			elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'date'))
759			{
760				$this->data['date']['raw'] = $return[0]['data'];
761			}
762			elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'date'))
763			{
764				$this->data['date']['raw'] = $return[0]['data'];
765			}
766			elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'updated'))
767			{
768				$this->data['date']['raw'] = $return[0]['data'];
769			}
770			elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'issued'))
771			{
772				$this->data['date']['raw'] = $return[0]['data'];
773			}
774			elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'created'))
775			{
776				$this->data['date']['raw'] = $return[0]['data'];
777			}
778			elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'modified'))
779			{
780				$this->data['date']['raw'] = $return[0]['data'];
781			}
782
783			if (!empty($this->data['date']['raw']))
784			{
785				$parser = $this->registry->call('Parse_Date', 'get');
786				$this->data['date']['parsed'] = $parser->parse($this->data['date']['raw']);
787			}
788			else
789			{
790				$this->data['date'] = null;
791			}
792		}
793		if ($this->data['date'])
794		{
795			$date_format = (string) $date_format;
796			switch ($date_format)
797			{
798				case '':
799					return $this->sanitize($this->data['date']['raw'], SIMPLEPIE_CONSTRUCT_TEXT);
800
801				case 'U':
802					return $this->data['date']['parsed'];
803
804				default:
805					return date($date_format, $this->data['date']['parsed']);
806			}
807		}
808
809		return null;
810	}
811
812	/**
813	 * Get the update date/time for the item
814	 *
815	 * Uses `<atom:updated>`
816	 *
817	 * Note: obeys PHP's timezone setting. To get a UTC date/time, use
818	 * {@see get_gmdate}
819	 *
820	 * @param string $date_format Supports any PHP date format from {@see http://php.net/date} (empty for the raw data)
821	 * @return int|string|null
822	 */
823	public function get_updated_date($date_format = 'j F Y, g:i a')
824	{
825		if (!isset($this->data['updated']))
826		{
827			if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'updated'))
828			{
829				$this->data['updated']['raw'] = $return[0]['data'];
830			}
831
832			if (!empty($this->data['updated']['raw']))
833			{
834				$parser = $this->registry->call('Parse_Date', 'get');
835				$this->data['updated']['parsed'] = $parser->parse($this->data['updated']['raw']);
836			}
837			else
838			{
839				$this->data['updated'] = null;
840			}
841		}
842		if ($this->data['updated'])
843		{
844			$date_format = (string) $date_format;
845			switch ($date_format)
846			{
847				case '':
848					return $this->sanitize($this->data['updated']['raw'], SIMPLEPIE_CONSTRUCT_TEXT);
849
850				case 'U':
851					return $this->data['updated']['parsed'];
852
853				default:
854					return date($date_format, $this->data['updated']['parsed']);
855			}
856		}
857
858		return null;
859	}
860
861	/**
862	 * Get the localized posting date/time for the item
863	 *
864	 * Returns the date formatted in the localized language. To display in
865	 * languages other than the server's default, you need to change the locale
866	 * with {@link http://php.net/setlocale setlocale()}. The available
867	 * localizations depend on which ones are installed on your web server.
868	 *
869	 * @since 1.0
870	 *
871	 * @param string $date_format Supports any PHP date format from {@see http://php.net/strftime} (empty for the raw data)
872	 * @return int|string|null
873	 */
874	public function get_local_date($date_format = '%c')
875	{
876		if (!$date_format)
877		{
878			return $this->sanitize($this->get_date(''), SIMPLEPIE_CONSTRUCT_TEXT);
879		}
880		elseif (($date = $this->get_date('U')) !== null && $date !== false)
881		{
882			return strftime($date_format, $date);
883		}
884
885		return null;
886	}
887
888	/**
889	 * Get the posting date/time for the item (UTC time)
890	 *
891	 * @see get_date
892	 * @param string $date_format Supports any PHP date format from {@see http://php.net/date}
893	 * @return int|string|null
894	 */
895	public function get_gmdate($date_format = 'j F Y, g:i a')
896	{
897		$date = $this->get_date('U');
898		if ($date === null)
899		{
900			return null;
901		}
902
903		return gmdate($date_format, $date);
904	}
905
906	/**
907	 * Get the update date/time for the item (UTC time)
908	 *
909	 * @see get_updated_date
910	 * @param string $date_format Supports any PHP date format from {@see http://php.net/date}
911	 * @return int|string|null
912	 */
913	public function get_updated_gmdate($date_format = 'j F Y, g:i a')
914	{
915		$date = $this->get_updated_date('U');
916		if ($date === null)
917		{
918			return null;
919		}
920
921		return gmdate($date_format, $date);
922	}
923
924	/**
925	 * Get the permalink for the item
926	 *
927	 * Returns the first link available with a relationship of "alternate".
928	 * Identical to {@see get_link()} with key 0
929	 *
930	 * @see get_link
931	 * @since 0.8
932	 * @return string|null Permalink URL
933	 */
934	public function get_permalink()
935	{
936		$link = $this->get_link();
937		$enclosure = $this->get_enclosure(0);
938		if ($link !== null)
939		{
940			return $link;
941		}
942		elseif ($enclosure !== null)
943		{
944			return $enclosure->get_link();
945		}
946
947		return null;
948	}
949
950	/**
951	 * Get a single link for the item
952	 *
953	 * @since Beta 3
954	 * @param int $key The link that you want to return.  Remember that arrays begin with 0, not 1
955	 * @param string $rel The relationship of the link to return
956	 * @return string|null Link URL
957	 */
958	public function get_link($key = 0, $rel = 'alternate')
959	{
960		$links = $this->get_links($rel);
961		if ($links && $links[$key] !== null)
962		{
963			return $links[$key];
964		}
965
966		return null;
967	}
968
969	/**
970	 * Get all links for the item
971	 *
972	 * Uses `<atom:link>`, `<link>` or `<guid>`
973	 *
974	 * @since Beta 2
975	 * @param string $rel The relationship of links to return
976	 * @return array|null Links found for the item (strings)
977	 */
978	public function get_links($rel = 'alternate')
979	{
980		if (!isset($this->data['links']))
981		{
982			$this->data['links'] = array();
983			foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link') as $link)
984			{
985				if (isset($link['attribs']['']['href']))
986				{
987					$link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
988					$this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
989
990				}
991			}
992			foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link') as $link)
993			{
994				if (isset($link['attribs']['']['href']))
995				{
996					$link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
997					$this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
998				}
999			}
1000			if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link'))
1001			{
1002				$this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
1003			}
1004			if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link'))
1005			{
1006				$this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
1007			}
1008			if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link'))
1009			{
1010				$this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
1011			}
1012			if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'guid'))
1013			{
1014				if (!isset($links[0]['attribs']['']['isPermaLink']) || strtolower(trim($links[0]['attribs']['']['isPermaLink'])) === 'true')
1015				{
1016					$this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
1017				}
1018			}
1019
1020			$keys = array_keys($this->data['links']);
1021			foreach ($keys as $key)
1022			{
1023				if ($this->registry->call('Misc', 'is_isegment_nz_nc', array($key)))
1024				{
1025					if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]))
1026					{
1027						$this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]);
1028						$this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key];
1029					}
1030					else
1031					{
1032						$this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key];
1033					}
1034				}
1035				elseif (substr($key, 0, 41) === SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY)
1036				{
1037					$this->data['links'][substr($key, 41)] =& $this->data['links'][$key];
1038				}
1039				$this->data['links'][$key] = array_unique($this->data['links'][$key]);
1040			}
1041		}
1042		if (isset($this->data['links'][$rel]))
1043		{
1044			return $this->data['links'][$rel];
1045		}
1046
1047		return null;
1048	}
1049
1050	/**
1051	 * Get an enclosure from the item
1052	 *
1053	 * Supports the <enclosure> RSS tag, as well as Media RSS and iTunes RSS.
1054	 *
1055	 * @since Beta 2
1056	 * @todo Add ability to prefer one type of content over another (in a media group).
1057	 * @param int $key The enclosure that you want to return.  Remember that arrays begin with 0, not 1
1058	 * @return SimplePie_Enclosure|null
1059	 */
1060	public function get_enclosure($key = 0, $prefer = null)
1061	{
1062		$enclosures = $this->get_enclosures();
1063		if (isset($enclosures[$key]))
1064		{
1065			return $enclosures[$key];
1066		}
1067
1068		return null;
1069	}
1070
1071	/**
1072	 * Get all available enclosures (podcasts, etc.)
1073	 *
1074	 * Supports the <enclosure> RSS tag, as well as Media RSS and iTunes RSS.
1075	 *
1076	 * At this point, we're pretty much assuming that all enclosures for an item
1077	 * are the same content.  Anything else is too complicated to
1078	 * properly support.
1079	 *
1080	 * @since Beta 2
1081	 * @todo Add support for end-user defined sorting of enclosures by type/handler (so we can prefer the faster-loading FLV over MP4).
1082	 * @todo If an element exists at a level, but its value is empty, we should fall back to the value from the parent (if it exists).
1083	 * @return SimplePie_Enclosure[]|null List of SimplePie_Enclosure items
1084	 */
1085	public function get_enclosures()
1086	{
1087		if (!isset($this->data['enclosures']))
1088		{
1089			$this->data['enclosures'] = array();
1090
1091			// Elements
1092			$captions_parent = null;
1093			$categories_parent = null;
1094			$copyrights_parent = null;
1095			$credits_parent = null;
1096			$description_parent = null;
1097			$duration_parent = null;
1098			$hashes_parent = null;
1099			$keywords_parent = null;
1100			$player_parent = null;
1101			$ratings_parent = null;
1102			$restrictions_parent = null;
1103			$thumbnails_parent = null;
1104			$title_parent = null;
1105
1106			// Let's do the channel and item-level ones first, and just re-use them if we need to.
1107			$parent = $this->get_feed();
1108
1109			// CAPTIONS
1110			if ($captions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'text'))
1111			{
1112				foreach ($captions as $caption)
1113				{
1114					$caption_type = null;
1115					$caption_lang = null;
1116					$caption_startTime = null;
1117					$caption_endTime = null;
1118					$caption_text = null;
1119					if (isset($caption['attribs']['']['type']))
1120					{
1121						$caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
1122					}
1123					if (isset($caption['attribs']['']['lang']))
1124					{
1125						$caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
1126					}
1127					if (isset($caption['attribs']['']['start']))
1128					{
1129						$caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
1130					}
1131					if (isset($caption['attribs']['']['end']))
1132					{
1133						$caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
1134					}
1135					if (isset($caption['data']))
1136					{
1137						$caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1138					}
1139					$captions_parent[] = $this->registry->create('Caption', array($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text));
1140				}
1141			}
1142			elseif ($captions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'text'))
1143			{
1144				foreach ($captions as $caption)
1145				{
1146					$caption_type = null;
1147					$caption_lang = null;
1148					$caption_startTime = null;
1149					$caption_endTime = null;
1150					$caption_text = null;
1151					if (isset($caption['attribs']['']['type']))
1152					{
1153						$caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
1154					}
1155					if (isset($caption['attribs']['']['lang']))
1156					{
1157						$caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
1158					}
1159					if (isset($caption['attribs']['']['start']))
1160					{
1161						$caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
1162					}
1163					if (isset($caption['attribs']['']['end']))
1164					{
1165						$caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
1166					}
1167					if (isset($caption['data']))
1168					{
1169						$caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1170					}
1171					$captions_parent[] = $this->registry->create('Caption', array($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text));
1172				}
1173			}
1174			if (is_array($captions_parent))
1175			{
1176				$captions_parent = array_values(array_unique($captions_parent));
1177			}
1178
1179			// CATEGORIES
1180			foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'category') as $category)
1181			{
1182				$term = null;
1183				$scheme = null;
1184				$label = null;
1185				if (isset($category['data']))
1186				{
1187					$term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1188				}
1189				if (isset($category['attribs']['']['scheme']))
1190				{
1191					$scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
1192				}
1193				else
1194				{
1195					$scheme = 'http://search.yahoo.com/mrss/category_schema';
1196				}
1197				if (isset($category['attribs']['']['label']))
1198				{
1199					$label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
1200				}
1201				$categories_parent[] = $this->registry->create('Category', array($term, $scheme, $label));
1202			}
1203			foreach ((array) $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'category') as $category)
1204			{
1205				$term = null;
1206				$scheme = null;
1207				$label = null;
1208				if (isset($category['data']))
1209				{
1210					$term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1211				}
1212				if (isset($category['attribs']['']['scheme']))
1213				{
1214					$scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
1215				}
1216				else
1217				{
1218					$scheme = 'http://search.yahoo.com/mrss/category_schema';
1219				}
1220				if (isset($category['attribs']['']['label']))
1221				{
1222					$label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
1223				}
1224				$categories_parent[] = $this->registry->create('Category', array($term, $scheme, $label));
1225			}
1226			foreach ((array) $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'category') as $category)
1227			{
1228				$term = null;
1229				$scheme = 'http://www.itunes.com/dtds/podcast-1.0.dtd';
1230				$label = null;
1231				if (isset($category['attribs']['']['text']))
1232				{
1233					$label = $this->sanitize($category['attribs']['']['text'], SIMPLEPIE_CONSTRUCT_TEXT);
1234				}
1235				$categories_parent[] = $this->registry->create('Category', array($term, $scheme, $label));
1236
1237				if (isset($category['child'][SIMPLEPIE_NAMESPACE_ITUNES]['category']))
1238				{
1239					foreach ((array) $category['child'][SIMPLEPIE_NAMESPACE_ITUNES]['category'] as $subcategory)
1240					{
1241						if (isset($subcategory['attribs']['']['text']))
1242						{
1243							$label = $this->sanitize($subcategory['attribs']['']['text'], SIMPLEPIE_CONSTRUCT_TEXT);
1244						}
1245						$categories_parent[] = $this->registry->create('Category', array($term, $scheme, $label));
1246					}
1247				}
1248			}
1249			if (is_array($categories_parent))
1250			{
1251				$categories_parent = array_values(array_unique($categories_parent));
1252			}
1253
1254			// COPYRIGHT
1255			if ($copyright = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'copyright'))
1256			{
1257				$copyright_url = null;
1258				$copyright_label = null;
1259				if (isset($copyright[0]['attribs']['']['url']))
1260				{
1261					$copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
1262				}
1263				if (isset($copyright[0]['data']))
1264				{
1265					$copyright_label = $this->sanitize($copyright[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1266				}
1267				$copyrights_parent = $this->registry->create('Copyright', array($copyright_url, $copyright_label));
1268			}
1269			elseif ($copyright = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'copyright'))
1270			{
1271				$copyright_url = null;
1272				$copyright_label = null;
1273				if (isset($copyright[0]['attribs']['']['url']))
1274				{
1275					$copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
1276				}
1277				if (isset($copyright[0]['data']))
1278				{
1279					$copyright_label = $this->sanitize($copyright[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1280				}
1281				$copyrights_parent = $this->registry->create('Copyright', array($copyright_url, $copyright_label));
1282			}
1283
1284			// CREDITS
1285			if ($credits = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'credit'))
1286			{
1287				foreach ($credits as $credit)
1288				{
1289					$credit_role = null;
1290					$credit_scheme = null;
1291					$credit_name = null;
1292					if (isset($credit['attribs']['']['role']))
1293					{
1294						$credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
1295					}
1296					if (isset($credit['attribs']['']['scheme']))
1297					{
1298						$credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
1299					}
1300					else
1301					{
1302						$credit_scheme = 'urn:ebu';
1303					}
1304					if (isset($credit['data']))
1305					{
1306						$credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1307					}
1308					$credits_parent[] = $this->registry->create('Credit', array($credit_role, $credit_scheme, $credit_name));
1309				}
1310			}
1311			elseif ($credits = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'credit'))
1312			{
1313				foreach ($credits as $credit)
1314				{
1315					$credit_role = null;
1316					$credit_scheme = null;
1317					$credit_name = null;
1318					if (isset($credit['attribs']['']['role']))
1319					{
1320						$credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
1321					}
1322					if (isset($credit['attribs']['']['scheme']))
1323					{
1324						$credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
1325					}
1326					else
1327					{
1328						$credit_scheme = 'urn:ebu';
1329					}
1330					if (isset($credit['data']))
1331					{
1332						$credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1333					}
1334					$credits_parent[] = $this->registry->create('Credit', array($credit_role, $credit_scheme, $credit_name));
1335				}
1336			}
1337			if (is_array($credits_parent))
1338			{
1339				$credits_parent = array_values(array_unique($credits_parent));
1340			}
1341
1342			// DESCRIPTION
1343			if ($description_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'description'))
1344			{
1345				if (isset($description_parent[0]['data']))
1346				{
1347					$description_parent = $this->sanitize($description_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1348				}
1349			}
1350			elseif ($description_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'description'))
1351			{
1352				if (isset($description_parent[0]['data']))
1353				{
1354					$description_parent = $this->sanitize($description_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1355				}
1356			}
1357
1358			// DURATION
1359			if ($duration_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'duration'))
1360			{
1361				$seconds = null;
1362				$minutes = null;
1363				$hours = null;
1364				if (isset($duration_parent[0]['data']))
1365				{
1366					$temp = explode(':', $this->sanitize($duration_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
1367					if (sizeof($temp) > 0)
1368					{
1369						$seconds = (int) array_pop($temp);
1370					}
1371					if (sizeof($temp) > 0)
1372					{
1373						$minutes = (int) array_pop($temp);
1374						$seconds += $minutes * 60;
1375					}
1376					if (sizeof($temp) > 0)
1377					{
1378						$hours = (int) array_pop($temp);
1379						$seconds += $hours * 3600;
1380					}
1381					unset($temp);
1382					$duration_parent = $seconds;
1383				}
1384			}
1385
1386			// HASHES
1387			if ($hashes_iterator = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'hash'))
1388			{
1389				foreach ($hashes_iterator as $hash)
1390				{
1391					$value = null;
1392					$algo = null;
1393					if (isset($hash['data']))
1394					{
1395						$value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1396					}
1397					if (isset($hash['attribs']['']['algo']))
1398					{
1399						$algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
1400					}
1401					else
1402					{
1403						$algo = 'md5';
1404					}
1405					$hashes_parent[] = $algo.':'.$value;
1406				}
1407			}
1408			elseif ($hashes_iterator = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'hash'))
1409			{
1410				foreach ($hashes_iterator as $hash)
1411				{
1412					$value = null;
1413					$algo = null;
1414					if (isset($hash['data']))
1415					{
1416						$value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1417					}
1418					if (isset($hash['attribs']['']['algo']))
1419					{
1420						$algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
1421					}
1422					else
1423					{
1424						$algo = 'md5';
1425					}
1426					$hashes_parent[] = $algo.':'.$value;
1427				}
1428			}
1429			if (is_array($hashes_parent))
1430			{
1431				$hashes_parent = array_values(array_unique($hashes_parent));
1432			}
1433
1434			// KEYWORDS
1435			if ($keywords = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'keywords'))
1436			{
1437				if (isset($keywords[0]['data']))
1438				{
1439					$temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
1440					foreach ($temp as $word)
1441					{
1442						$keywords_parent[] = trim($word);
1443					}
1444				}
1445				unset($temp);
1446			}
1447			elseif ($keywords = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'keywords'))
1448			{
1449				if (isset($keywords[0]['data']))
1450				{
1451					$temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
1452					foreach ($temp as $word)
1453					{
1454						$keywords_parent[] = trim($word);
1455					}
1456				}
1457				unset($temp);
1458			}
1459			elseif ($keywords = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'keywords'))
1460			{
1461				if (isset($keywords[0]['data']))
1462				{
1463					$temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
1464					foreach ($temp as $word)
1465					{
1466						$keywords_parent[] = trim($word);
1467					}
1468				}
1469				unset($temp);
1470			}
1471			elseif ($keywords = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'keywords'))
1472			{
1473				if (isset($keywords[0]['data']))
1474				{
1475					$temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
1476					foreach ($temp as $word)
1477					{
1478						$keywords_parent[] = trim($word);
1479					}
1480				}
1481				unset($temp);
1482			}
1483			if (is_array($keywords_parent))
1484			{
1485				$keywords_parent = array_values(array_unique($keywords_parent));
1486			}
1487
1488			// PLAYER
1489			if ($player_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'player'))
1490			{
1491				if (isset($player_parent[0]['attribs']['']['url']))
1492				{
1493					$player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
1494				}
1495			}
1496			elseif ($player_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'player'))
1497			{
1498				if (isset($player_parent[0]['attribs']['']['url']))
1499				{
1500					$player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
1501				}
1502			}
1503
1504			// RATINGS
1505			if ($ratings = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'rating'))
1506			{
1507				foreach ($ratings as $rating)
1508				{
1509					$rating_scheme = null;
1510					$rating_value = null;
1511					if (isset($rating['attribs']['']['scheme']))
1512					{
1513						$rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
1514					}
1515					else
1516					{
1517						$rating_scheme = 'urn:simple';
1518					}
1519					if (isset($rating['data']))
1520					{
1521						$rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1522					}
1523					$ratings_parent[] = $this->registry->create('Rating', array($rating_scheme, $rating_value));
1524				}
1525			}
1526			elseif ($ratings = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'explicit'))
1527			{
1528				foreach ($ratings as $rating)
1529				{
1530					$rating_scheme = 'urn:itunes';
1531					$rating_value = null;
1532					if (isset($rating['data']))
1533					{
1534						$rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1535					}
1536					$ratings_parent[] = $this->registry->create('Rating', array($rating_scheme, $rating_value));
1537				}
1538			}
1539			elseif ($ratings = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'rating'))
1540			{
1541				foreach ($ratings as $rating)
1542				{
1543					$rating_scheme = null;
1544					$rating_value = null;
1545					if (isset($rating['attribs']['']['scheme']))
1546					{
1547						$rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
1548					}
1549					else
1550					{
1551						$rating_scheme = 'urn:simple';
1552					}
1553					if (isset($rating['data']))
1554					{
1555						$rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1556					}
1557					$ratings_parent[] = $this->registry->create('Rating', array($rating_scheme, $rating_value));
1558				}
1559			}
1560			elseif ($ratings = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'explicit'))
1561			{
1562				foreach ($ratings as $rating)
1563				{
1564					$rating_scheme = 'urn:itunes';
1565					$rating_value = null;
1566					if (isset($rating['data']))
1567					{
1568						$rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1569					}
1570					$ratings_parent[] = $this->registry->create('Rating', array($rating_scheme, $rating_value));
1571				}
1572			}
1573			if (is_array($ratings_parent))
1574			{
1575				$ratings_parent = array_values(array_unique($ratings_parent));
1576			}
1577
1578			// RESTRICTIONS
1579			if ($restrictions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'restriction'))
1580			{
1581				foreach ($restrictions as $restriction)
1582				{
1583					$restriction_relationship = null;
1584					$restriction_type = null;
1585					$restriction_value = null;
1586					if (isset($restriction['attribs']['']['relationship']))
1587					{
1588						$restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
1589					}
1590					if (isset($restriction['attribs']['']['type']))
1591					{
1592						$restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
1593					}
1594					if (isset($restriction['data']))
1595					{
1596						$restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1597					}
1598					$restrictions_parent[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value));
1599				}
1600			}
1601			elseif ($restrictions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'block'))
1602			{
1603				foreach ($restrictions as $restriction)
1604				{
1605					$restriction_relationship = 'allow';
1606					$restriction_type = null;
1607					$restriction_value = 'itunes';
1608					if (isset($restriction['data']) && strtolower($restriction['data']) === 'yes')
1609					{
1610						$restriction_relationship = 'deny';
1611					}
1612					$restrictions_parent[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value));
1613				}
1614			}
1615			elseif ($restrictions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'restriction'))
1616			{
1617				foreach ($restrictions as $restriction)
1618				{
1619					$restriction_relationship = null;
1620					$restriction_type = null;
1621					$restriction_value = null;
1622					if (isset($restriction['attribs']['']['relationship']))
1623					{
1624						$restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
1625					}
1626					if (isset($restriction['attribs']['']['type']))
1627					{
1628						$restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
1629					}
1630					if (isset($restriction['data']))
1631					{
1632						$restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1633					}
1634					$restrictions_parent[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value));
1635				}
1636			}
1637			elseif ($restrictions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'block'))
1638			{
1639				foreach ($restrictions as $restriction)
1640				{
1641					$restriction_relationship = 'allow';
1642					$restriction_type = null;
1643					$restriction_value = 'itunes';
1644					if (isset($restriction['data']) && strtolower($restriction['data']) === 'yes')
1645					{
1646						$restriction_relationship = 'deny';
1647					}
1648					$restrictions_parent[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value));
1649				}
1650			}
1651			if (is_array($restrictions_parent))
1652			{
1653				$restrictions_parent = array_values(array_unique($restrictions_parent));
1654			}
1655			else
1656			{
1657				$restrictions_parent = array(new SimplePie_Restriction('allow', null, 'default'));
1658			}
1659
1660			// THUMBNAILS
1661			if ($thumbnails = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail'))
1662			{
1663				foreach ($thumbnails as $thumbnail)
1664				{
1665					if (isset($thumbnail['attribs']['']['url']))
1666					{
1667						$thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
1668					}
1669				}
1670			}
1671			elseif ($thumbnails = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail'))
1672			{
1673				foreach ($thumbnails as $thumbnail)
1674				{
1675					if (isset($thumbnail['attribs']['']['url']))
1676					{
1677						$thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
1678					}
1679				}
1680			}
1681
1682			// TITLES
1683			if ($title_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'title'))
1684			{
1685				if (isset($title_parent[0]['data']))
1686				{
1687					$title_parent = $this->sanitize($title_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1688				}
1689			}
1690			elseif ($title_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'title'))
1691			{
1692				if (isset($title_parent[0]['data']))
1693				{
1694					$title_parent = $this->sanitize($title_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1695				}
1696			}
1697
1698			// Clear the memory
1699			unset($parent);
1700
1701			// Attributes
1702			$bitrate = null;
1703			$channels = null;
1704			$duration = null;
1705			$expression = null;
1706			$framerate = null;
1707			$height = null;
1708			$javascript = null;
1709			$lang = null;
1710			$length = null;
1711			$medium = null;
1712			$samplingrate = null;
1713			$type = null;
1714			$url = null;
1715			$width = null;
1716
1717			// Elements
1718			$captions = null;
1719			$categories = null;
1720			$copyrights = null;
1721			$credits = null;
1722			$description = null;
1723			$hashes = null;
1724			$keywords = null;
1725			$player = null;
1726			$ratings = null;
1727			$restrictions = null;
1728			$thumbnails = null;
1729			$title = null;
1730
1731			// If we have media:group tags, loop through them.
1732			foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'group') as $group)
1733			{
1734				if(isset($group['child']) && isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content']))
1735				{
1736					// If we have media:content tags, loop through them.
1737					foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content)
1738					{
1739						if (isset($content['attribs']['']['url']))
1740						{
1741							// Attributes
1742							$bitrate = null;
1743							$channels = null;
1744							$duration = null;
1745							$expression = null;
1746							$framerate = null;
1747							$height = null;
1748							$javascript = null;
1749							$lang = null;
1750							$length = null;
1751							$medium = null;
1752							$samplingrate = null;
1753							$type = null;
1754							$url = null;
1755							$width = null;
1756
1757							// Elements
1758							$captions = null;
1759							$categories = null;
1760							$copyrights = null;
1761							$credits = null;
1762							$description = null;
1763							$hashes = null;
1764							$keywords = null;
1765							$player = null;
1766							$ratings = null;
1767							$restrictions = null;
1768							$thumbnails = null;
1769							$title = null;
1770
1771							// Start checking the attributes of media:content
1772							if (isset($content['attribs']['']['bitrate']))
1773							{
1774								$bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT);
1775							}
1776							if (isset($content['attribs']['']['channels']))
1777							{
1778								$channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT);
1779							}
1780							if (isset($content['attribs']['']['duration']))
1781							{
1782								$duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT);
1783							}
1784							else
1785							{
1786								$duration = $duration_parent;
1787							}
1788							if (isset($content['attribs']['']['expression']))
1789							{
1790								$expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT);
1791							}
1792							if (isset($content['attribs']['']['framerate']))
1793							{
1794								$framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT);
1795							}
1796							if (isset($content['attribs']['']['height']))
1797							{
1798								$height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT);
1799							}
1800							if (isset($content['attribs']['']['lang']))
1801							{
1802								$lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
1803							}
1804							if (isset($content['attribs']['']['fileSize']))
1805							{
1806								$length = ceil($content['attribs']['']['fileSize']);
1807							}
1808							if (isset($content['attribs']['']['medium']))
1809							{
1810								$medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT);
1811							}
1812							if (isset($content['attribs']['']['samplingrate']))
1813							{
1814								$samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT);
1815							}
1816							if (isset($content['attribs']['']['type']))
1817							{
1818								$type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
1819							}
1820							if (isset($content['attribs']['']['width']))
1821							{
1822								$width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT);
1823							}
1824							$url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
1825
1826							// Checking the other optional media: elements. Priority: media:content, media:group, item, channel
1827
1828							// CAPTIONS
1829							if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text']))
1830							{
1831								foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption)
1832								{
1833									$caption_type = null;
1834									$caption_lang = null;
1835									$caption_startTime = null;
1836									$caption_endTime = null;
1837									$caption_text = null;
1838									if (isset($caption['attribs']['']['type']))
1839									{
1840										$caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
1841									}
1842									if (isset($caption['attribs']['']['lang']))
1843									{
1844										$caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
1845									}
1846									if (isset($caption['attribs']['']['start']))
1847									{
1848										$caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
1849									}
1850									if (isset($caption['attribs']['']['end']))
1851									{
1852										$caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
1853									}
1854									if (isset($caption['data']))
1855									{
1856										$caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1857									}
1858									$captions[] = $this->registry->create('Caption', array($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text));
1859								}
1860								if (is_array($captions))
1861								{
1862									$captions = array_values(array_unique($captions));
1863								}
1864							}
1865							elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text']))
1866							{
1867								foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption)
1868								{
1869									$caption_type = null;
1870									$caption_lang = null;
1871									$caption_startTime = null;
1872									$caption_endTime = null;
1873									$caption_text = null;
1874									if (isset($caption['attribs']['']['type']))
1875									{
1876										$caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
1877									}
1878									if (isset($caption['attribs']['']['lang']))
1879									{
1880										$caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
1881									}
1882									if (isset($caption['attribs']['']['start']))
1883									{
1884										$caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
1885									}
1886									if (isset($caption['attribs']['']['end']))
1887									{
1888										$caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
1889									}
1890									if (isset($caption['data']))
1891									{
1892										$caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1893									}
1894									$captions[] = $this->registry->create('Caption', array($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text));
1895								}
1896								if (is_array($captions))
1897								{
1898									$captions = array_values(array_unique($captions));
1899								}
1900							}
1901							else
1902							{
1903								$captions = $captions_parent;
1904							}
1905
1906							// CATEGORIES
1907							if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category']))
1908							{
1909								foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category)
1910								{
1911									$term = null;
1912									$scheme = null;
1913									$label = null;
1914									if (isset($category['data']))
1915									{
1916										$term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1917									}
1918									if (isset($category['attribs']['']['scheme']))
1919									{
1920										$scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
1921									}
1922									else
1923									{
1924										$scheme = 'http://search.yahoo.com/mrss/category_schema';
1925									}
1926									if (isset($category['attribs']['']['label']))
1927									{
1928										$label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
1929									}
1930									$categories[] = $this->registry->create('Category', array($term, $scheme, $label));
1931								}
1932							}
1933							if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category']))
1934							{
1935								foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category)
1936								{
1937									$term = null;
1938									$scheme = null;
1939									$label = null;
1940									if (isset($category['data']))
1941									{
1942										$term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1943									}
1944									if (isset($category['attribs']['']['scheme']))
1945									{
1946										$scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
1947									}
1948									else
1949									{
1950										$scheme = 'http://search.yahoo.com/mrss/category_schema';
1951									}
1952									if (isset($category['attribs']['']['label']))
1953									{
1954										$label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
1955									}
1956									$categories[] = $this->registry->create('Category', array($term, $scheme, $label));
1957								}
1958							}
1959							if (is_array($categories) && is_array($categories_parent))
1960							{
1961								$categories = array_values(array_unique(array_merge($categories, $categories_parent)));
1962							}
1963							elseif (is_array($categories))
1964							{
1965								$categories = array_values(array_unique($categories));
1966							}
1967							elseif (is_array($categories_parent))
1968							{
1969								$categories = array_values(array_unique($categories_parent));
1970							}
1971
1972							// COPYRIGHTS
1973							if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright']))
1974							{
1975								$copyright_url = null;
1976								$copyright_label = null;
1977								if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url']))
1978								{
1979									$copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
1980								}
1981								if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data']))
1982								{
1983									$copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1984								}
1985								$copyrights = $this->registry->create('Copyright', array($copyright_url, $copyright_label));
1986							}
1987							elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright']))
1988							{
1989								$copyright_url = null;
1990								$copyright_label = null;
1991								if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url']))
1992								{
1993									$copyright_url = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
1994								}
1995								if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data']))
1996								{
1997									$copyright_label = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
1998								}
1999								$copyrights = $this->registry->create('Copyright', array($copyright_url, $copyright_label));
2000							}
2001							else
2002							{
2003								$copyrights = $copyrights_parent;
2004							}
2005
2006							// CREDITS
2007							if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit']))
2008							{
2009								foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit)
2010								{
2011									$credit_role = null;
2012									$credit_scheme = null;
2013									$credit_name = null;
2014									if (isset($credit['attribs']['']['role']))
2015									{
2016										$credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
2017									}
2018									if (isset($credit['attribs']['']['scheme']))
2019									{
2020										$credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
2021									}
2022									else
2023									{
2024										$credit_scheme = 'urn:ebu';
2025									}
2026									if (isset($credit['data']))
2027									{
2028										$credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2029									}
2030									$credits[] = $this->registry->create('Credit', array($credit_role, $credit_scheme, $credit_name));
2031								}
2032								if (is_array($credits))
2033								{
2034									$credits = array_values(array_unique($credits));
2035								}
2036							}
2037							elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit']))
2038							{
2039								foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit)
2040								{
2041									$credit_role = null;
2042									$credit_scheme = null;
2043									$credit_name = null;
2044									if (isset($credit['attribs']['']['role']))
2045									{
2046										$credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
2047									}
2048									if (isset($credit['attribs']['']['scheme']))
2049									{
2050										$credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
2051									}
2052									else
2053									{
2054										$credit_scheme = 'urn:ebu';
2055									}
2056									if (isset($credit['data']))
2057									{
2058										$credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2059									}
2060									$credits[] = $this->registry->create('Credit', array($credit_role, $credit_scheme, $credit_name));
2061								}
2062								if (is_array($credits))
2063								{
2064									$credits = array_values(array_unique($credits));
2065								}
2066							}
2067							else
2068							{
2069								$credits = $credits_parent;
2070							}
2071
2072							// DESCRIPTION
2073							if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description']))
2074							{
2075								$description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2076							}
2077							elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description']))
2078							{
2079								$description = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2080							}
2081							else
2082							{
2083								$description = $description_parent;
2084							}
2085
2086							// HASHES
2087							if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash']))
2088							{
2089								foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash)
2090								{
2091									$value = null;
2092									$algo = null;
2093									if (isset($hash['data']))
2094									{
2095										$value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2096									}
2097									if (isset($hash['attribs']['']['algo']))
2098									{
2099										$algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
2100									}
2101									else
2102									{
2103										$algo = 'md5';
2104									}
2105									$hashes[] = $algo.':'.$value;
2106								}
2107								if (is_array($hashes))
2108								{
2109									$hashes = array_values(array_unique($hashes));
2110								}
2111							}
2112							elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash']))
2113							{
2114								foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash)
2115								{
2116									$value = null;
2117									$algo = null;
2118									if (isset($hash['data']))
2119									{
2120										$value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2121									}
2122									if (isset($hash['attribs']['']['algo']))
2123									{
2124										$algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
2125									}
2126									else
2127									{
2128										$algo = 'md5';
2129									}
2130									$hashes[] = $algo.':'.$value;
2131								}
2132								if (is_array($hashes))
2133								{
2134									$hashes = array_values(array_unique($hashes));
2135								}
2136							}
2137							else
2138							{
2139								$hashes = $hashes_parent;
2140							}
2141
2142							// KEYWORDS
2143							if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords']))
2144							{
2145								if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data']))
2146								{
2147									$temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
2148									foreach ($temp as $word)
2149									{
2150										$keywords[] = trim($word);
2151									}
2152									unset($temp);
2153								}
2154								if (is_array($keywords))
2155								{
2156									$keywords = array_values(array_unique($keywords));
2157								}
2158							}
2159							elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords']))
2160							{
2161								if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data']))
2162								{
2163									$temp = explode(',', $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
2164									foreach ($temp as $word)
2165									{
2166										$keywords[] = trim($word);
2167									}
2168									unset($temp);
2169								}
2170								if (is_array($keywords))
2171								{
2172									$keywords = array_values(array_unique($keywords));
2173								}
2174							}
2175							else
2176							{
2177								$keywords = $keywords_parent;
2178							}
2179
2180							// PLAYER
2181							if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
2182							{
2183								$player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
2184							}
2185							elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
2186							{
2187								$player = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
2188							}
2189							else
2190							{
2191								$player = $player_parent;
2192							}
2193
2194							// RATINGS
2195							if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating']))
2196							{
2197								foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating)
2198								{
2199									$rating_scheme = null;
2200									$rating_value = null;
2201									if (isset($rating['attribs']['']['scheme']))
2202									{
2203										$rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
2204									}
2205									else
2206									{
2207										$rating_scheme = 'urn:simple';
2208									}
2209									if (isset($rating['data']))
2210									{
2211										$rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2212									}
2213									$ratings[] = $this->registry->create('Rating', array($rating_scheme, $rating_value));
2214								}
2215								if (is_array($ratings))
2216								{
2217									$ratings = array_values(array_unique($ratings));
2218								}
2219							}
2220							elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating']))
2221							{
2222								foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating)
2223								{
2224									$rating_scheme = null;
2225									$rating_value = null;
2226									if (isset($rating['attribs']['']['scheme']))
2227									{
2228										$rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
2229									}
2230									else
2231									{
2232										$rating_scheme = 'urn:simple';
2233									}
2234									if (isset($rating['data']))
2235									{
2236										$rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2237									}
2238									$ratings[] = $this->registry->create('Rating', array($rating_scheme, $rating_value));
2239								}
2240								if (is_array($ratings))
2241								{
2242									$ratings = array_values(array_unique($ratings));
2243								}
2244							}
2245							else
2246							{
2247								$ratings = $ratings_parent;
2248							}
2249
2250							// RESTRICTIONS
2251							if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction']))
2252							{
2253								foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction)
2254								{
2255									$restriction_relationship = null;
2256									$restriction_type = null;
2257									$restriction_value = null;
2258									if (isset($restriction['attribs']['']['relationship']))
2259									{
2260										$restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
2261									}
2262									if (isset($restriction['attribs']['']['type']))
2263									{
2264										$restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
2265									}
2266									if (isset($restriction['data']))
2267									{
2268										$restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2269									}
2270									$restrictions[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value));
2271								}
2272								if (is_array($restrictions))
2273								{
2274									$restrictions = array_values(array_unique($restrictions));
2275								}
2276							}
2277							elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction']))
2278							{
2279								foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction)
2280								{
2281									$restriction_relationship = null;
2282									$restriction_type = null;
2283									$restriction_value = null;
2284									if (isset($restriction['attribs']['']['relationship']))
2285									{
2286										$restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
2287									}
2288									if (isset($restriction['attribs']['']['type']))
2289									{
2290										$restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
2291									}
2292									if (isset($restriction['data']))
2293									{
2294										$restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2295									}
2296									$restrictions[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value));
2297								}
2298								if (is_array($restrictions))
2299								{
2300									$restrictions = array_values(array_unique($restrictions));
2301								}
2302							}
2303							else
2304							{
2305								$restrictions = $restrictions_parent;
2306							}
2307
2308							// THUMBNAILS
2309							if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail']))
2310							{
2311								foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
2312								{
2313									$thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
2314								}
2315								if (is_array($thumbnails))
2316								{
2317									$thumbnails = array_values(array_unique($thumbnails));
2318								}
2319							}
2320							elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail']))
2321							{
2322								foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
2323								{
2324									$thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
2325								}
2326								if (is_array($thumbnails))
2327								{
2328									$thumbnails = array_values(array_unique($thumbnails));
2329								}
2330							}
2331							else
2332							{
2333								$thumbnails = $thumbnails_parent;
2334							}
2335
2336							// TITLES
2337							if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title']))
2338							{
2339								$title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2340							}
2341							elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title']))
2342							{
2343								$title = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2344							}
2345							else
2346							{
2347								$title = $title_parent;
2348							}
2349
2350							$this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width));
2351						}
2352					}
2353				}
2354			}
2355
2356			// If we have standalone media:content tags, loop through them.
2357			if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content']))
2358			{
2359				foreach ((array) $this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content)
2360				{
2361					if (isset($content['attribs']['']['url']) || isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
2362					{
2363						// Attributes
2364						$bitrate = null;
2365						$channels = null;
2366						$duration = null;
2367						$expression = null;
2368						$framerate = null;
2369						$height = null;
2370						$javascript = null;
2371						$lang = null;
2372						$length = null;
2373						$medium = null;
2374						$samplingrate = null;
2375						$type = null;
2376						$url = null;
2377						$width = null;
2378
2379						// Elements
2380						$captions = null;
2381						$categories = null;
2382						$copyrights = null;
2383						$credits = null;
2384						$description = null;
2385						$hashes = null;
2386						$keywords = null;
2387						$player = null;
2388						$ratings = null;
2389						$restrictions = null;
2390						$thumbnails = null;
2391						$title = null;
2392
2393						// Start checking the attributes of media:content
2394						if (isset($content['attribs']['']['bitrate']))
2395						{
2396							$bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT);
2397						}
2398						if (isset($content['attribs']['']['channels']))
2399						{
2400							$channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT);
2401						}
2402						if (isset($content['attribs']['']['duration']))
2403						{
2404							$duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT);
2405						}
2406						else
2407						{
2408							$duration = $duration_parent;
2409						}
2410						if (isset($content['attribs']['']['expression']))
2411						{
2412							$expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT);
2413						}
2414						if (isset($content['attribs']['']['framerate']))
2415						{
2416							$framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT);
2417						}
2418						if (isset($content['attribs']['']['height']))
2419						{
2420							$height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT);
2421						}
2422						if (isset($content['attribs']['']['lang']))
2423						{
2424							$lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
2425						}
2426						if (isset($content['attribs']['']['fileSize']))
2427						{
2428							$length = ceil($content['attribs']['']['fileSize']);
2429						}
2430						if (isset($content['attribs']['']['medium']))
2431						{
2432							$medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT);
2433						}
2434						if (isset($content['attribs']['']['samplingrate']))
2435						{
2436							$samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT);
2437						}
2438						if (isset($content['attribs']['']['type']))
2439						{
2440							$type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
2441						}
2442						if (isset($content['attribs']['']['width']))
2443						{
2444							$width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT);
2445						}
2446						if (isset($content['attribs']['']['url']))
2447						{
2448							$url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
2449						}
2450						// Checking the other optional media: elements. Priority: media:content, media:group, item, channel
2451
2452						// CAPTIONS
2453						if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text']))
2454						{
2455							foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption)
2456							{
2457								$caption_type = null;
2458								$caption_lang = null;
2459								$caption_startTime = null;
2460								$caption_endTime = null;
2461								$caption_text = null;
2462								if (isset($caption['attribs']['']['type']))
2463								{
2464									$caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
2465								}
2466								if (isset($caption['attribs']['']['lang']))
2467								{
2468									$caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
2469								}
2470								if (isset($caption['attribs']['']['start']))
2471								{
2472									$caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
2473								}
2474								if (isset($caption['attribs']['']['end']))
2475								{
2476									$caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
2477								}
2478								if (isset($caption['data']))
2479								{
2480									$caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2481								}
2482								$captions[] = $this->registry->create('Caption', array($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text));
2483							}
2484							if (is_array($captions))
2485							{
2486								$captions = array_values(array_unique($captions));
2487							}
2488						}
2489						else
2490						{
2491							$captions = $captions_parent;
2492						}
2493
2494						// CATEGORIES
2495						if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category']))
2496						{
2497							foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category)
2498							{
2499								$term = null;
2500								$scheme = null;
2501								$label = null;
2502								if (isset($category['data']))
2503								{
2504									$term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2505								}
2506								if (isset($category['attribs']['']['scheme']))
2507								{
2508									$scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
2509								}
2510								else
2511								{
2512									$scheme = 'http://search.yahoo.com/mrss/category_schema';
2513								}
2514								if (isset($category['attribs']['']['label']))
2515								{
2516									$label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
2517								}
2518								$categories[] = $this->registry->create('Category', array($term, $scheme, $label));
2519							}
2520						}
2521						if (is_array($categories) && is_array($categories_parent))
2522						{
2523							$categories = array_values(array_unique(array_merge($categories, $categories_parent)));
2524						}
2525						elseif (is_array($categories))
2526						{
2527							$categories = array_values(array_unique($categories));
2528						}
2529						elseif (is_array($categories_parent))
2530						{
2531							$categories = array_values(array_unique($categories_parent));
2532						}
2533						else
2534						{
2535							$categories = null;
2536						}
2537
2538						// COPYRIGHTS
2539						if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright']))
2540						{
2541							$copyright_url = null;
2542							$copyright_label = null;
2543							if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url']))
2544							{
2545								$copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
2546							}
2547							if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data']))
2548							{
2549								$copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2550							}
2551							$copyrights = $this->registry->create('Copyright', array($copyright_url, $copyright_label));
2552						}
2553						else
2554						{
2555							$copyrights = $copyrights_parent;
2556						}
2557
2558						// CREDITS
2559						if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit']))
2560						{
2561							foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit)
2562							{
2563								$credit_role = null;
2564								$credit_scheme = null;
2565								$credit_name = null;
2566								if (isset($credit['attribs']['']['role']))
2567								{
2568									$credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
2569								}
2570								if (isset($credit['attribs']['']['scheme']))
2571								{
2572									$credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
2573								}
2574								else
2575								{
2576									$credit_scheme = 'urn:ebu';
2577								}
2578								if (isset($credit['data']))
2579								{
2580									$credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2581								}
2582								$credits[] = $this->registry->create('Credit', array($credit_role, $credit_scheme, $credit_name));
2583							}
2584							if (is_array($credits))
2585							{
2586								$credits = array_values(array_unique($credits));
2587							}
2588						}
2589						else
2590						{
2591							$credits = $credits_parent;
2592						}
2593
2594						// DESCRIPTION
2595						if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description']))
2596						{
2597							$description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2598						}
2599						else
2600						{
2601							$description = $description_parent;
2602						}
2603
2604						// HASHES
2605						if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash']))
2606						{
2607							foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash)
2608							{
2609								$value = null;
2610								$algo = null;
2611								if (isset($hash['data']))
2612								{
2613									$value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2614								}
2615								if (isset($hash['attribs']['']['algo']))
2616								{
2617									$algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
2618								}
2619								else
2620								{
2621									$algo = 'md5';
2622								}
2623								$hashes[] = $algo.':'.$value;
2624							}
2625							if (is_array($hashes))
2626							{
2627								$hashes = array_values(array_unique($hashes));
2628							}
2629						}
2630						else
2631						{
2632							$hashes = $hashes_parent;
2633						}
2634
2635						// KEYWORDS
2636						if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords']))
2637						{
2638							if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data']))
2639							{
2640								$temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
2641								foreach ($temp as $word)
2642								{
2643									$keywords[] = trim($word);
2644								}
2645								unset($temp);
2646							}
2647							if (is_array($keywords))
2648							{
2649								$keywords = array_values(array_unique($keywords));
2650							}
2651						}
2652						else
2653						{
2654							$keywords = $keywords_parent;
2655						}
2656
2657						// PLAYER
2658						if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
2659						{
2660							if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'])) {
2661								$player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
2662							}
2663						}
2664						else
2665						{
2666							$player = $player_parent;
2667						}
2668
2669						// RATINGS
2670						if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating']))
2671						{
2672							foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating)
2673							{
2674								$rating_scheme = null;
2675								$rating_value = null;
2676								if (isset($rating['attribs']['']['scheme']))
2677								{
2678									$rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
2679								}
2680								else
2681								{
2682									$rating_scheme = 'urn:simple';
2683								}
2684								if (isset($rating['data']))
2685								{
2686									$rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2687								}
2688								$ratings[] = $this->registry->create('Rating', array($rating_scheme, $rating_value));
2689							}
2690							if (is_array($ratings))
2691							{
2692								$ratings = array_values(array_unique($ratings));
2693							}
2694						}
2695						else
2696						{
2697							$ratings = $ratings_parent;
2698						}
2699
2700						// RESTRICTIONS
2701						if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction']))
2702						{
2703							foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction)
2704							{
2705								$restriction_relationship = null;
2706								$restriction_type = null;
2707								$restriction_value = null;
2708								if (isset($restriction['attribs']['']['relationship']))
2709								{
2710									$restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
2711								}
2712								if (isset($restriction['attribs']['']['type']))
2713								{
2714									$restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
2715								}
2716								if (isset($restriction['data']))
2717								{
2718									$restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2719								}
2720								$restrictions[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value));
2721							}
2722							if (is_array($restrictions))
2723							{
2724								$restrictions = array_values(array_unique($restrictions));
2725							}
2726						}
2727						else
2728						{
2729							$restrictions = $restrictions_parent;
2730						}
2731
2732						// THUMBNAILS
2733						if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail']))
2734						{
2735							foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
2736							{
2737								if (isset($thumbnail['attribs']['']['url'])) {
2738									$thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
2739								}
2740							}
2741							if (is_array($thumbnails))
2742							{
2743								$thumbnails = array_values(array_unique($thumbnails));
2744							}
2745						}
2746						else
2747						{
2748							$thumbnails = $thumbnails_parent;
2749						}
2750
2751						// TITLES
2752						if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title']))
2753						{
2754							$title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
2755						}
2756						else
2757						{
2758							$title = $title_parent;
2759						}
2760
2761						$this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width));
2762					}
2763				}
2764			}
2765
2766			foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link') as $link)
2767			{
2768				if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] === 'enclosure')
2769				{
2770					// Attributes
2771					$bitrate = null;
2772					$channels = null;
2773					$duration = null;
2774					$expression = null;
2775					$framerate = null;
2776					$height = null;
2777					$javascript = null;
2778					$lang = null;
2779					$length = null;
2780					$medium = null;
2781					$samplingrate = null;
2782					$type = null;
2783					$url = null;
2784					$width = null;
2785
2786					$url = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
2787					if (isset($link['attribs']['']['type']))
2788					{
2789						$type = $this->sanitize($link['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
2790					}
2791					if (isset($link['attribs']['']['length']))
2792					{
2793						$length = ceil($link['attribs']['']['length']);
2794					}
2795					if (isset($link['attribs']['']['title']))
2796					{
2797						$title = $this->sanitize($link['attribs']['']['title'], SIMPLEPIE_CONSTRUCT_TEXT);
2798					}
2799					else
2800					{
2801						$title = $title_parent;
2802					}
2803
2804					// Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
2805					$this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title, $width));
2806				}
2807			}
2808
2809			foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link') as $link)
2810			{
2811				if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] === 'enclosure')
2812				{
2813					// Attributes
2814					$bitrate = null;
2815					$channels = null;
2816					$duration = null;
2817					$expression = null;
2818					$framerate = null;
2819					$height = null;
2820					$javascript = null;
2821					$lang = null;
2822					$length = null;
2823					$medium = null;
2824					$samplingrate = null;
2825					$type = null;
2826					$url = null;
2827					$width = null;
2828
2829					$url = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
2830					if (isset($link['attribs']['']['type']))
2831					{
2832						$type = $this->sanitize($link['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
2833					}
2834					if (isset($link['attribs']['']['length']))
2835					{
2836						$length = ceil($link['attribs']['']['length']);
2837					}
2838
2839					// Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
2840					$this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width));
2841				}
2842			}
2843
2844			if ($enclosure = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'enclosure'))
2845			{
2846				if (isset($enclosure[0]['attribs']['']['url']))
2847				{
2848					// Attributes
2849					$bitrate = null;
2850					$channels = null;
2851					$duration = null;
2852					$expression = null;
2853					$framerate = null;
2854					$height = null;
2855					$javascript = null;
2856					$lang = null;
2857					$length = null;
2858					$medium = null;
2859					$samplingrate = null;
2860					$type = null;
2861					$url = null;
2862					$width = null;
2863
2864					$url = $this->sanitize($enclosure[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($enclosure[0]));
2865					if (isset($enclosure[0]['attribs']['']['type']))
2866					{
2867						$type = $this->sanitize($enclosure[0]['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
2868					}
2869					if (isset($enclosure[0]['attribs']['']['length']))
2870					{
2871						$length = ceil($enclosure[0]['attribs']['']['length']);
2872					}
2873
2874					// Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
2875					$this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width));
2876				}
2877			}
2878
2879			if (sizeof($this->data['enclosures']) === 0 && ($url || $type || $length || $bitrate || $captions_parent || $categories_parent || $channels || $copyrights_parent || $credits_parent || $description_parent || $duration_parent || $expression || $framerate || $hashes_parent || $height || $keywords_parent || $lang || $medium || $player_parent || $ratings_parent || $restrictions_parent || $samplingrate || $thumbnails_parent || $title_parent || $width))
2880			{
2881				// Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
2882				$this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width));
2883			}
2884
2885			$this->data['enclosures'] = array_values(array_unique($this->data['enclosures']));
2886		}
2887		if (!empty($this->data['enclosures']))
2888		{
2889			return $this->data['enclosures'];
2890		}
2891
2892		return null;
2893	}
2894
2895	/**
2896	 * Get the latitude coordinates for the item
2897	 *
2898	 * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications
2899	 *
2900	 * Uses `<geo:lat>` or `<georss:point>`
2901	 *
2902	 * @since 1.0
2903	 * @link http://www.w3.org/2003/01/geo/ W3C WGS84 Basic Geo
2904	 * @link http://www.georss.org/ GeoRSS
2905	 * @return string|null
2906	 */
2907	public function get_latitude()
2908	{
2909		if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat'))
2910		{
2911			return (float) $return[0]['data'];
2912		}
2913		elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match))
2914		{
2915			return (float) $match[1];
2916		}
2917
2918		return null;
2919	}
2920
2921	/**
2922	 * Get the longitude coordinates for the item
2923	 *
2924	 * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications
2925	 *
2926	 * Uses `<geo:long>`, `<geo:lon>` or `<georss:point>`
2927	 *
2928	 * @since 1.0
2929	 * @link http://www.w3.org/2003/01/geo/ W3C WGS84 Basic Geo
2930	 * @link http://www.georss.org/ GeoRSS
2931	 * @return string|null
2932	 */
2933	public function get_longitude()
2934	{
2935		if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long'))
2936		{
2937			return (float) $return[0]['data'];
2938		}
2939		elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon'))
2940		{
2941			return (float) $return[0]['data'];
2942		}
2943		elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match))
2944		{
2945			return (float) $match[2];
2946		}
2947
2948		return null;
2949	}
2950
2951	/**
2952	 * Get the `<atom:source>` for the item
2953	 *
2954	 * @since 1.1
2955	 * @return SimplePie_Source|null
2956	 */
2957	public function get_source()
2958	{
2959		if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'source'))
2960		{
2961			return $this->registry->create('Source', array($this, $return[0]));
2962		}
2963
2964		return null;
2965	}
2966}
2967