| Current Path : /home/w/u/e/wuectly/www/03cbe/ |
| Current File : /home/w/u/e/wuectly/www/03cbe/Parser.tar |
Rss/MediaRssParser.php 0000604 00000002626 15245561512 0010720 0 ustar 00 <?php
/**
* Joomla! Content Management System
*
* @copyright (C) 2017 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Joomla\CMS\Feed\Parser\Rss;
defined('JPATH_PLATFORM') or die;
use Joomla\CMS\Feed\Feed;
use Joomla\CMS\Feed\FeedEntry;
use Joomla\CMS\Feed\Parser\NamespaceParserInterface;
/**
* RSS Feed Parser Namespace handler for MediaRSS.
*
* @link http://video.search.yahoo.com/mrss
* @since 3.1.4
*/
class MediaRssParser implements NamespaceParserInterface
{
/**
* Method to handle an element for the feed given that the media namespace is present.
*
* @param Feed $feed The Feed object being built from the parsed feed.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
public function processElementForFeed(Feed $feed, \SimpleXMLElement $el)
{
return;
}
/**
* Method to handle the feed entry element for the feed given that the media namespace is present.
*
* @param FeedEntry $entry The FeedEntry object being built from the parsed feed entry.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
public function processElementForFeedEntry(FeedEntry $entry, \SimpleXMLElement $el)
{
return;
}
}
Rss/ItunesRssParser.php 0000604 00000002651 15245561512 0011146 0 ustar 00 <?php
/**
* Joomla! Content Management System
*
* @copyright (C) 2017 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Joomla\CMS\Feed\Parser\Rss;
defined('JPATH_PLATFORM') or die;
use Joomla\CMS\Feed\Feed;
use Joomla\CMS\Feed\FeedEntry;
use Joomla\CMS\Feed\Parser\NamespaceParserInterface;
/**
* RSS Feed Parser Namespace handler for iTunes.
*
* @link https://itunespartner.apple.com/en/podcasts/overview
* @since 3.1.4
*/
class ItunesRssParser implements NamespaceParserInterface
{
/**
* Method to handle an element for the feed given that the itunes namespace is present.
*
* @param Feed $feed The Feed object being built from the parsed feed.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
public function processElementForFeed(Feed $feed, \SimpleXMLElement $el)
{
return;
}
/**
* Method to handle the feed entry element for the feed given that the itunes namespace is present.
*
* @param FeedEntry $entry The FeedEntry object being built from the parsed feed entry.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
public function processElementForFeedEntry(FeedEntry $entry, \SimpleXMLElement $el)
{
return;
}
}
AtomParser.php 0000604 00000015756 15245561512 0007352 0 ustar 00 <?php
/**
* Joomla! Content Management System
*
* @copyright (C) 2012 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Joomla\CMS\Feed\Parser;
defined('JPATH_PLATFORM') or die;
use Joomla\CMS\Feed\Feed;
use Joomla\CMS\Feed\FeedEntry;
use Joomla\CMS\Feed\FeedLink;
use Joomla\CMS\Feed\FeedParser;
/**
* ATOM Feed Parser class.
*
* @link http://www.atomenabled.org/developers/syndication/
* @since 3.1.4
*/
class AtomParser extends FeedParser
{
/**
* @var string The feed format version.
* @since 3.1.4
*/
protected $version;
/**
* Method to handle the `<author>` element for the feed.
*
* @param Feed $feed The Feed object being built from the parsed feed.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
protected function handleAuthor(Feed $feed, \SimpleXMLElement $el)
{
// Set the author information from the XML element.
$feed->setAuthor(
$this->inputFilter->clean((string) $el->name, 'html'),
filter_var((string) $el->email, FILTER_VALIDATE_EMAIL),
filter_var((string) $el->uri, FILTER_VALIDATE_URL)
);
}
/**
* Method to handle the `<contributor>` element for the feed.
*
* @param Feed $feed The Feed object being built from the parsed feed.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
protected function handleContributor(Feed $feed, \SimpleXMLElement $el)
{
$feed->addContributor(
$this->inputFilter->clean((string) $el->name, 'html'),
filter_var((string) $el->email, FILTER_VALIDATE_EMAIL),
filter_var((string) $el->uri, FILTER_VALIDATE_URL)
);
}
/**
* Method to handle the `<generator>` element for the feed.
*
* @param Feed $feed The Feed object being built from the parsed feed.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
protected function handleGenerator(Feed $feed, \SimpleXMLElement $el)
{
$feed->generator = $this->inputFilter->clean((string) $el, 'html');
}
/**
* Method to handle the `<id>` element for the feed.
*
* @param Feed $feed The Feed object being built from the parsed feed.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
protected function handleId(Feed $feed, \SimpleXMLElement $el)
{
$feed->uri = (string) $el;
}
/**
* Method to handle the `<link>` element for the feed.
*
* @param Feed $feed The Feed object being built from the parsed feed.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
protected function handleLink(Feed $feed, \SimpleXMLElement $el)
{
$link = new FeedLink;
$link->uri = (string) $el['href'];
$link->language = (string) $el['hreflang'];
$link->length = (int) $el['length'];
$link->relation = (string) $el['rel'];
$link->title = $this->inputFilter->clean((string) $el['title'], 'html');
$link->type = (string) $el['type'];
$feed->link = $link;
}
/**
* Method to handle the `<rights>` element for the feed.
*
* @param Feed $feed The Feed object being built from the parsed feed.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
protected function handleRights(Feed $feed, \SimpleXMLElement $el)
{
$feed->copyright = $this->inputFilter->clean((string) $el, 'html');
}
/**
* Method to handle the `<subtitle>` element for the feed.
*
* @param Feed $feed The Feed object being built from the parsed feed.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
protected function handleSubtitle(Feed $feed, \SimpleXMLElement $el)
{
$feed->description = $this->inputFilter->clean((string) $el, 'html');
}
/**
* Method to handle the `<title>` element for the feed.
*
* @param Feed $feed The Feed object being built from the parsed feed.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
protected function handleTitle(Feed $feed, \SimpleXMLElement $el)
{
$feed->title = $this->inputFilter->clean((string) $el, 'html');
}
/**
* Method to handle the `<updated>` element for the feed.
*
* @param Feed $feed The Feed object being built from the parsed feed.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
protected function handleUpdated(Feed $feed, \SimpleXMLElement $el)
{
$feed->updatedDate = $this->inputFilter->clean((string) $el, 'html');
}
/**
* Method to initialise the feed for parsing. Here we detect the version and advance the stream
* reader so that it is ready to parse feed elements.
*
* @return void
*
* @since 3.1.4
*/
protected function initialise()
{
// Read the version attribute.
$this->version = ($this->stream->getAttribute('version') == '0.3') ? '0.3' : '1.0';
// We want to move forward to the first element after the root element.
$this->moveToNextElement();
}
/**
* Method to handle a `<entry>` element for the feed.
*
* @param FeedEntry $entry The FeedEntry object being built from the parsed feed entry.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
protected function processFeedEntry(FeedEntry $entry, \SimpleXMLElement $el)
{
$entry->uri = (string) $el->id;
$entry->title = $this->inputFilter->clean((string) $el->title, 'html');
$entry->updatedDate = $this->inputFilter->clean((string) $el->updated, 'html');
$entry->content = $this->inputFilter->clean((string) $el->summary, 'html');
if (!$entry->content)
{
$entry->content = $this->inputFilter->clean((string) $el->content, 'html');
}
if (filter_var($entry->uri, FILTER_VALIDATE_URL) === false && !is_null($el->link) && $el->link)
{
$link = $el->link;
if (is_array($link))
{
$link = $this->bestLinkForUri($link);
}
$uri = (string) $link['href'];
if ($uri)
{
$entry->uri = $uri;
}
}
}
/**
* If there is more than one <link> in the feed entry, find the most appropriate one and return it.
*
* @param array $links Array of <link> elements from the feed entry.
*
* @return \SimpleXMLElement
*/
private function bestLinkForUri(array $links)
{
$linkPrefs = array('', 'self', 'alternate');
foreach ($linkPrefs as $pref)
{
foreach ($links as $link)
{
$rel = (string) $link['rel'];
if ($rel === $pref)
{
return $link;
}
}
}
return array_shift($links);
}
}
RssParser.php 0000604 00000027550 15245561512 0007214 0 ustar 00 <?php
/**
* Joomla! Content Management System
*
* @copyright (C) 2012 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Joomla\CMS\Feed\Parser;
defined('JPATH_PLATFORM') or die;
use Joomla\CMS\Feed\Feed;
use Joomla\CMS\Feed\FeedEntry;
use Joomla\CMS\Feed\FeedLink;
use Joomla\CMS\Feed\FeedParser;
use Joomla\CMS\Feed\FeedPerson;
/**
* RSS Feed Parser class.
*
* @link http://cyber.law.harvard.edu/rss/rss.html
* @since 3.1.4
*/
class RssParser extends FeedParser
{
/**
* @var string The feed element name for the entry elements.
* @since 3.1.4
*/
protected $entryElementName = 'item';
/**
* @var string The feed format version.
* @since 3.1.4
*/
protected $version;
/**
* Method to handle the `<category>` element for the feed.
*
* @param Feed $feed The Feed object being built from the parsed feed.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
protected function handleCategory(Feed $feed, \SimpleXMLElement $el)
{
// Get the data from the element.
$domain = (string) $el['domain'];
$category = $this->inputFilter->clean((string) $el, 'html');
$feed->addCategory($category, $domain);
}
/**
* Method to handle the `<cloud>` element for the feed.
*
* @param Feed $feed The Feed object being built from the parsed feed.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
protected function handleCloud(Feed $feed, \SimpleXMLElement $el)
{
$cloud = new \stdClass;
$cloud->domain = (string) $el['domain'];
$cloud->port = (string) $el['port'];
$cloud->path = (string) $el['path'];
$cloud->protocol = (string) $el['protocol'];
$cloud->registerProcedure = (string) $el['registerProcedure'];
$feed->cloud = $cloud;
}
/**
* Method to handle the `<copyright>` element for the feed.
*
* @param Feed $feed The Feed object being built from the parsed feed.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
protected function handleCopyright(Feed $feed, \SimpleXMLElement $el)
{
$feed->copyright = $this->inputFilter->clean((string) $el, 'html');
}
/**
* Method to handle the `<description>` element for the feed.
*
* @param Feed $feed The Feed object being built from the parsed feed.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
protected function handleDescription(Feed $feed, \SimpleXMLElement $el)
{
$feed->description = $this->inputFilter->clean((string) $el, 'html');
}
/**
* Method to handle the `<generator>` element for the feed.
*
* @param Feed $feed The Feed object being built from the parsed feed.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
protected function handleGenerator(Feed $feed, \SimpleXMLElement $el)
{
$feed->generator = $this->inputFilter->clean((string) $el, 'html');
}
/**
* Method to handle the `<image>` element for the feed.
*
* @param Feed $feed The Feed object being built from the parsed feed.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
protected function handleImage(Feed $feed, \SimpleXMLElement $el)
{
// Create a feed link object for the image.
$image = new FeedLink(
(string) $el->url,
null,
'logo',
null,
$this->inputFilter->clean((string) $el->title, 'html')
);
// Populate extra fields if they exist.
$image->link = (string) filter_var($el->link, FILTER_VALIDATE_URL);
$image->description = $this->inputFilter->clean((string) $el->description, 'html');
$image->height = (string) $el->height;
$image->width = (string) $el->width;
$feed->image = $image;
}
/**
* Method to handle the `<language>` element for the feed.
*
* @param Feed $feed The Feed object being built from the parsed feed.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
protected function handleLanguage(Feed $feed, \SimpleXMLElement $el)
{
$feed->language = $this->inputFilter->clean((string) $el, 'html');
}
/**
* Method to handle the `<lastBuildDate>` element for the feed.
*
* @param Feed $feed The Feed object being built from the parsed feed.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
protected function handleLastBuildDate(Feed $feed, \SimpleXMLElement $el)
{
$feed->updatedDate = $this->inputFilter->clean((string) $el, 'html');
}
/**
* Method to handle the `<link>` element for the feed.
*
* @param Feed $feed The Feed object being built from the parsed feed.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
protected function handleLink(Feed $feed, \SimpleXMLElement $el)
{
$link = new FeedLink;
$link->uri = (string) $el['href'];
$feed->link = $link;
}
/**
* Method to handle the `<managingEditor>` element for the feed.
*
* @param Feed $feed The Feed object being built from the parsed feed.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
protected function handleManagingEditor(Feed $feed, \SimpleXMLElement $el)
{
$feed->author = $this->processPerson((string) $el);
}
/**
* Method to handle the `<skipDays>` element for the feed.
*
* @param Feed $feed The Feed object being built from the parsed feed.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
protected function handleSkipDays(Feed $feed, \SimpleXMLElement $el)
{
// Initialise the array.
$days = array();
// Add all of the day values from the feed to the array.
foreach ($el->day as $day)
{
$days[] = (string) $day;
}
$feed->skipDays = $days;
}
/**
* Method to handle the `<skipHours>` element for the feed.
*
* @param Feed $feed The Feed object being built from the parsed feed.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
protected function handleSkipHours(Feed $feed, \SimpleXMLElement $el)
{
// Initialise the array.
$hours = array();
// Add all of the day values from the feed to the array.
foreach ($el->hour as $hour)
{
$hours[] = (int) $hour;
}
$feed->skipHours = $hours;
}
/**
* Method to handle the `<pubDate>` element for the feed.
*
* @param Feed $feed The Feed object being built from the parsed feed.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
protected function handlePubDate(Feed $feed, \SimpleXMLElement $el)
{
$feed->publishedDate = $this->inputFilter->clean((string) $el, 'html');
}
/**
* Method to handle the `<title>` element for the feed.
*
* @param Feed $feed The Feed object being built from the parsed feed.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
protected function handleTitle(Feed $feed, \SimpleXMLElement $el)
{
$feed->title = $this->inputFilter->clean((string) $el, 'html');
}
/**
* Method to handle the `<ttl>` element for the feed.
*
* @param Feed $feed The Feed object being built from the parsed feed.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
protected function handleTtl(Feed $feed, \SimpleXMLElement $el)
{
$feed->ttl = (integer) $this->inputFilter->clean((string) $el, 'int');
}
/**
* Method to handle the `<webmaster>` element for the feed.
*
* @param Feed $feed The Feed object being built from the parsed feed.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
protected function handleWebmaster(Feed $feed, \SimpleXMLElement $el)
{
// Get the tag contents and split it over the first space.
$tmp = (string) $el;
$tmp = explode(' ', $tmp, 2);
// This is really cheap parsing. Probably need to create a method to do this more robustly.
$name = null;
if (isset($tmp[1]))
{
$name = trim(
$this->inputFilter->clean($tmp[1], 'html'),
' ()'
);
}
$email = trim(
filter_var((string) $tmp[0], FILTER_VALIDATE_EMAIL)
);
$feed->addContributor($name, $email, null, 'webmaster');
}
/**
* Method to initialise the feed for parsing. Here we detect the version and advance the stream
* reader so that it is ready to parse feed elements.
*
* @return void
*
* @since 3.1.4
*/
protected function initialise()
{
// Read the version attribute.
$this->version = $this->stream->getAttribute('version');
// We want to move forward to the first element after the <channel> element.
$this->moveToNextElement('channel');
$this->moveToNextElement();
}
/**
* Method to handle a `<item>` element for the feed.
*
* @param FeedEntry $entry The FeedEntry object being built from the parsed feed entry.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
protected function processFeedEntry(FeedEntry $entry, \SimpleXMLElement $el)
{
$entry->uri = (string) filter_var($el->link, FILTER_VALIDATE_URL);
$entry->title = $this->inputFilter->clean((string) $el->title, 'html');
$entry->publishedDate = $this->inputFilter->clean((string) $el->pubDate, 'html');
$entry->updatedDate = $this->inputFilter->clean((string) $el->pubDate, 'html');
$entry->content = $this->inputFilter->clean((string) $el->description, 'html');
$entry->guid = $this->inputFilter->clean((string) $el->guid, 'html');
$entry->isPermaLink = $entry->guid === '' || (string) $el->guid['isPermaLink'] === 'false' ? false : true;
$entry->comments = $this->inputFilter->clean((string) $el->comments, 'html');
// Add the feed entry author if available.
$author = $this->inputFilter->clean((string) $el->author, 'html');
if (!empty($author))
{
$entry->author = $this->processPerson($author);
}
// Add any categories to the entry.
foreach ($el->category as $category)
{
$entry->addCategory((string) $category, (string) $category['domain']);
}
// Add any enclosures to the entry.
foreach ($el->enclosure as $enclosure)
{
$link = new FeedLink(
(string) $enclosure['url'],
null,
(string) $enclosure['type'],
null,
null,
(int) $enclosure['length']
);
$entry->addLink($link);
}
}
/**
* Method to parse a string with person data and return a FeedPerson object.
*
* @param string $data The string to parse for a person.
*
* @return FeedPerson
*
* @since 3.1.4
*/
protected function processPerson($data)
{
// Create a new person object.
$person = new FeedPerson;
// This is really cheap parsing, but so far good enough. :)
$data = explode(' ', $data, 2);
if (isset($data[1]))
{
$person->name = trim(
$this->inputFilter->clean($data[1], 'html'),
' ()'
);
}
// Set the email for the person.
$person->email = trim(
filter_var((string) $data[0], FILTER_VALIDATE_EMAIL)
);
return $person;
}
}
NamespaceParserInterface.php 0000604 00000002345 15245561512 0012155 0 ustar 00 <?php
/**
* Joomla! Content Management System
*
* @copyright (C) 2017 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Joomla\CMS\Feed\Parser;
defined('JPATH_PLATFORM') or die;
use Joomla\CMS\Feed\Feed;
use Joomla\CMS\Feed\FeedEntry;
/**
* Feed Namespace interface.
*
* @since 3.1.4
*/
interface NamespaceParserInterface
{
/**
* Method to handle an element for the feed given that a certain namespace is present.
*
* @param Feed $feed The Feed object being built from the parsed feed.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
public function processElementForFeed(Feed $feed, \SimpleXMLElement $el);
/**
* Method to handle the feed entry element for the feed given that a certain namespace is present.
*
* @param FeedEntry $entry The FeedEntry object being built from the parsed feed entry.
* @param \SimpleXMLElement $el The current XML element object to handle.
*
* @return void
*
* @since 3.1.4
*/
public function processElementForFeedEntry(FeedEntry $entry, \SimpleXMLElement $el);
}