diff options
Diffstat (limited to 'vendor/fguillot/picofeed/lib/PicoFeed/Reader/Reader.php')
-rw-r--r-- | vendor/fguillot/picofeed/lib/PicoFeed/Reader/Reader.php | 43 |
1 files changed, 12 insertions, 31 deletions
diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Reader/Reader.php b/vendor/fguillot/picofeed/lib/PicoFeed/Reader/Reader.php index a64eb139c..5b807e251 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Reader/Reader.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Reader/Reader.php @@ -26,11 +26,11 @@ class Reader * @var array */ private $formats = array( - 'Atom' => array('<feed'), - 'Rss20' => array('<rss', '2.0'), - 'Rss92' => array('<rss', '0.92'), - 'Rss91' => array('<rss', '0.91'), - 'Rss10' => array('<rdf:'), + 'Atom' => '//feed', + 'Rss20' => '//rss[@version="2.0"]', + 'Rss92' => '//rss[@version="0.92"]', + 'Rss91' => '//rss[@version="0.91"]', + 'Rss10' => '//rdf', ); /** @@ -87,7 +87,7 @@ class Reader $client = $this->download($url, $last_modified, $etag); // It's already a feed or the feed was not modified - if (!$client->isModified() || $this->detectFormat($client->getContent())) { + if (! $client->isModified() || $this->detectFormat($client->getContent())) { return $client; } @@ -181,14 +181,14 @@ class Reader */ public function detectFormat($content) { - $first_tag = Filter::getFirstTag($content); - - Logger::setMessage(get_called_class().': DetectFormat(): '.$first_tag); + $dom = XmlParser::getHtmlDocument($content); + $xpath = new DOMXPath($dom); - foreach ($this->formats as $parser => $needles) { + foreach ($this->formats as $parser_name => $query) { + $nodes = $xpath->query($query); - if ($this->contains($first_tag, $needles)) { - return $parser; + if ($nodes->length === 1) { + return $parser_name; } } @@ -196,25 +196,6 @@ class Reader } /** - * Return true if all needles are found in the haystack - * - * @access private - * @param string $haystack Haystack - * @param string $needles Needles to find - * @return boolean - */ - private function contains($haystack, array $needles) - { - $results = array(); - - foreach ($needles as $needle) { - $results[] = strpos($haystack, $needle) !== false; - } - - return ! in_array(false, $results, true); - } - - /** * Add the prefix "http://" if the end-user just enter a domain name * * @access public |