From 867cb7dbf960dc0cfbf7e59d656d1337bb59c526 Mon Sep 17 00:00:00 2001 From: Bernhard Posselt Date: Wed, 17 Dec 2014 09:01:54 +0100 Subject: update picofeed, fix #695 --- .../picofeed/lib/PicoFeed/Reader/Reader.php | 43 ++++++---------------- 1 file changed, 12 insertions(+), 31 deletions(-) (limited to 'vendor/fguillot/picofeed/lib/PicoFeed/Reader/Reader.php') 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(' array(' array(' array(' array(' '//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,39 +181,20 @@ 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; } } return ''; } - /** - * 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 * -- cgit v1.2.3