83 lines
1.9 KiB
PHP
83 lines
1.9 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace PicoFeed;
|
||
|
|
||
|
class Atom extends Parser
|
||
|
{
|
||
|
public function execute()
|
||
|
{
|
||
|
$this->content = $this->normalizeData($this->content);
|
||
|
|
||
|
\libxml_use_internal_errors(true);
|
||
|
|
||
|
$xml = \simplexml_load_string($this->content);
|
||
|
|
||
|
if ($xml === false) {
|
||
|
|
||
|
if ($this->debug) $this->displayXmlErrors();
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
$this->url = $this->getUrl($xml);
|
||
|
$this->title = (string) $xml->title;
|
||
|
$this->id = (string) $xml->id;
|
||
|
$this->updated = strtotime((string) $xml->updated);
|
||
|
$author = (string) $xml->author->name;
|
||
|
|
||
|
foreach ($xml->entry as $entry) {
|
||
|
|
||
|
if (isset($entry->author->name)) {
|
||
|
|
||
|
$author = $entry->author->name;
|
||
|
}
|
||
|
|
||
|
$item = new \StdClass;
|
||
|
$item->id = (string) $entry->id;
|
||
|
$item->title = (string) $entry->title;
|
||
|
$item->url = $this->getUrl($entry);
|
||
|
$item->updated = strtotime((string) $entry->updated);
|
||
|
$item->author = $author;
|
||
|
$item->content = $this->filterHtml($this->getContent($entry), $item->url);
|
||
|
|
||
|
$this->items[] = $item;
|
||
|
}
|
||
|
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
|
||
|
public function getContent($entry)
|
||
|
{
|
||
|
if (isset($entry->content) && ! empty($entry->content)) {
|
||
|
|
||
|
if (count($entry->content->children())) {
|
||
|
|
||
|
return (string) $entry->content->asXML();
|
||
|
}
|
||
|
else {
|
||
|
|
||
|
return (string) $entry->content;
|
||
|
}
|
||
|
}
|
||
|
else if (isset($entry->summary) && ! empty($entry->summary)) {
|
||
|
|
||
|
return (string) $entry->summary;
|
||
|
}
|
||
|
|
||
|
return '';
|
||
|
}
|
||
|
|
||
|
|
||
|
public function getUrl($xml)
|
||
|
{
|
||
|
foreach ($xml->link as $link) {
|
||
|
|
||
|
if ((string) $link['type'] === 'text/html') {
|
||
|
|
||
|
return (string) $link['href'];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return (string) $xml->link['href'];
|
||
|
}
|
||
|
}
|