diff options
Diffstat (limited to 'vendor/fguillot')
36 files changed, 216 insertions, 153 deletions
diff --git a/vendor/fguillot/picofeed/docs/feed-parsing.markdown b/vendor/fguillot/picofeed/docs/feed-parsing.markdown index d00e08364..6e7f2fdc2 100644 --- a/vendor/fguillot/picofeed/docs/feed-parsing.markdown +++ b/vendor/fguillot/picofeed/docs/feed-parsing.markdown @@ -45,23 +45,23 @@ Feed::id = tag:linuxfr.org,2005:/news Feed::title = LinuxFr.org : les dépêches Feed::feed_url = http://linuxfr.org/news.atom Feed::site_url = http://linuxfr.org/news -Feed::date = 1415138079 Feed::language = en-US Feed::description = Feed::logo = -Feed::items = 15 items +Feed::date = Thu, 26 Feb 15 09:33:08 +0100 Feed::isRTL() = false +Feed::items = 15 items ---- -Item::id = 38d8f48284fb03940cbb3aff9101089b81e44efb1281641bdd7c3e7e4bf3b0cd -Item::title = openSUSE 13.2 : nouvelle version du caméléon disponible ! -Item::url = http://linuxfr.org/news/opensuse-13-2-nouvelle-version-du-cameleon-disponible -Item::date = 1415122640 +Item::id = 56198c98ae852d21c369bfb5ffbc2ad13db2f3227236dde3e21ca1a9eb943faf +Item::title = Les brevets logiciels : un frein à l'innovation et la recherche (un nouvel exemple aux États-Unis) +Item::url = http://linuxfr.org/news/les-brevets-logiciels-un-frein-a-l-innovation-et-la-recherche-un-nouvel-exemple-aux-etats-unis Item::language = en-US -Item::author = Syvolc +Item::author = alenvers Item::enclosure_url = Item::enclosure_type = +Item::date = Thu, 26 Feb 15 09:33:08 +0100 Item::isRTL() = false -Item::content = 18307 bytes +Item::content = 6452 bytes .... ``` @@ -186,7 +186,7 @@ $feed->getId(); // Unique feed id $feed->getTitle(); // Feed title $feed->getFeedUrl(); // Feed url $feed->getSiteUrl(); // Website url -$feed->getDate(); // Feed last updated date +$feed->getDate(); // Feed last updated date (DateTime object) $feed->getLanguage(); // Feed language $feed->getDescription(); // Feed description $feed->getLogo(); // Feed logo (can be a large image, different from icon) @@ -196,7 +196,7 @@ $feed->getItems(); // List of item objects $feed->items[0]->getId(); // Item unique id (hash) $feed->items[0]->getTitle(); // Item title $feed->items[0]->getUrl(); // Item url -$feed->items[0]->getDate(); // Item published date (timestamp) +$feed->items[0]->getDate(); // Item published date (DateTime object) $feed->items[0]->getLanguage(); // Item language $feed->items[0]->getAuthor(); // Item author $feed->items[0]->getEnclosureUrl(); // Enclosure url diff --git a/vendor/fguillot/picofeed/docs/installation.markdown b/vendor/fguillot/picofeed/docs/installation.markdown index f132b32cc..9bf1450d1 100644 --- a/vendor/fguillot/picofeed/docs/installation.markdown +++ b/vendor/fguillot/picofeed/docs/installation.markdown @@ -6,7 +6,8 @@ Versions - Development version: master - Available versions: - - v0.1.1 (stable) + - v0.1.2 (stable) + - v0.1.1 - v0.1.0 - v0.0.2 - v0.0.1 @@ -21,7 +22,7 @@ Configure your `composer.json`: ```json { "require": { - "fguillot/picofeed": "0.1.1" + "fguillot/picofeed": "0.1.2" } } ``` @@ -29,7 +30,7 @@ Configure your `composer.json`: Or simply: ```bash -composer require fguillot/picofeed:0.1.1 +composer require fguillot/picofeed:0.1.2 ``` And download the code: diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Client/Grabber.php b/vendor/fguillot/picofeed/lib/PicoFeed/Client/Grabber.php index 52f2f0bf1..fe4890400 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Client/Grabber.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Client/Grabber.php @@ -123,8 +123,6 @@ class Grabber * @var array */ private $stripTags = array( - 'script', - 'style', 'nav', 'header', 'footer', @@ -276,11 +274,11 @@ class Grabber } if ($this->html) { + $html_encoding = XmlParser::getEncodingFromMetaTag($this->html); - Logger::setMessage(get_called_class().': Fix encoding'); - Logger::setMessage(get_called_class().': HTTP Encoding "'.$this->encoding.'"'); - - $this->html = Encoding::convert($this->html, $this->encoding); + // Encode everything in UTF-8 + Logger::setMessage(get_called_class().': HTTP Encoding "'.$this->encoding.'" ; HTML Encoding "'.$html_encoding.'"'); + $this->html = Encoding::convert($this->html, $html_encoding ?: $this->encoding); $this->html = Filter::stripHeadTags($this->html); Logger::setMessage(get_called_class().': Content length: '.strlen($this->html).' bytes'); diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Filter/Tag.php b/vendor/fguillot/picofeed/lib/PicoFeed/Filter/Tag.php index 647b7352f..aa7efe4bd 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Filter/Tag.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Filter/Tag.php @@ -158,6 +158,11 @@ class Tag public function removeBlacklistedTags($data) { $dom = XmlParser::getDomDocument($data); + + if ($dom === false) { + return ''; + } + $xpath = new DOMXpath($dom); $nodes = $xpath->query(implode(' | ', $this->tag_blacklist)); diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Atom.php b/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Atom.php index 9f2f108d8..21566527e 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Atom.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Atom.php @@ -131,7 +131,7 @@ class Atom extends Parser */ public function findFeedDate(SimpleXMLElement $xml, Feed $feed) { - $feed->date = $this->date->getTimestamp((string) $xml->updated); + $feed->date = $this->date->getDateTime((string) $xml->updated); } /** @@ -143,10 +143,15 @@ class Atom extends Parser */ public function findItemDate(SimpleXMLElement $entry, Item $item) { - $published = isset($entry->published) ? $this->date->getTimestamp((string) $entry->published) : 0; - $updated = isset($entry->updated) ? $this->date->getTimestamp((string) $entry->updated) : 0; + $published = isset($entry->published) ? $this->date->getDateTime((string) $entry->published) : null; + $updated = isset($entry->updated) ? $this->date->getDateTime((string) $entry->updated) : null; - $item->date = max($published, $updated) ?: time(); + if ($published !== null && $updated !== null) { + $item->date = max($published, $updated); + } + else { + $item->date = $updated ?: $published; + } } /** diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Parser/DateParser.php b/vendor/fguillot/picofeed/lib/PicoFeed/Parser/DateParser.php index 89f189e7a..92d0012ac 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Parser/DateParser.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Parser/DateParser.php @@ -21,7 +21,7 @@ class DateParser */ public $timezone = 'UTC'; - /** + /** * Supported formats [ 'format' => length ] * * @access public @@ -60,9 +60,9 @@ class DateParser * * @access public * @param string $value Original date format - * @return integer Timestamp + * @return DateTime */ - public function getTimestamp($value) + public function getDateTime($value) { $value = trim($value); @@ -73,14 +73,13 @@ class DateParser $truncated_value = substr($truncated_value, 0, $length); } - $timestamp = $this->getValidDate($format, $truncated_value); - if ($timestamp > 0) { - return $timestamp; + $date = $this->getValidDate($format, $truncated_value); + if ($date !== false) { + return $date; } } - $date = new DateTime('now', new DateTimeZone($this->timezone)); - return $date->getTimestamp(); + return $this->getCurrentDateTime(); } /** @@ -89,7 +88,7 @@ class DateParser * @access public * @param string $format Date format * @param string $value Original date value - * @return integer Timestamp + * @return DateTime */ public function getValidDate($format, $value) { @@ -100,10 +99,21 @@ class DateParser $errors = DateTime::getLastErrors(); if ($errors['error_count'] === 0 && $errors['warning_count'] === 0) { - return $date->getTimestamp(); + return $date; } } - return 0; + return false; + } + + /** + * Get the current datetime + * + * @access public + * @return DateTime + */ + public function getCurrentDateTime() + { + return new DateTime('now', new DateTimeZone($this->timezone)); } } diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Feed.php b/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Feed.php index 74e9ab4da..93831e746 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Feed.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Feed.php @@ -62,9 +62,9 @@ class Feed * Feed date * * @access public - * @var integer + * @var \DateTime */ - public $date = 0; + public $date = null; /** * Feed language @@ -100,10 +100,11 @@ class Feed { $output = ''; - foreach (array('id', 'title', 'feed_url', 'site_url', 'date', 'language', 'description', 'logo') as $property) { + foreach (array('id', 'title', 'feed_url', 'site_url', 'language', 'description', 'logo') as $property) { $output .= 'Feed::'.$property.' = '.$this->$property.PHP_EOL; } + $output .= 'Feed::date = '.$this->date->format(DATE_RFC822).PHP_EOL; $output .= 'Feed::isRTL() = '.($this->isRTL() ? 'true' : 'false').PHP_EOL; $output .= 'Feed::items = '.count($this->items).' items'.PHP_EOL; diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Item.php b/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Item.php index 3642cccea..1585131c7 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Item.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Item.php @@ -63,9 +63,9 @@ class Item * Item date * * @access public - * @var integer + * @var \DateTime */ - public $date = 0; + public $date = null; /** * Item content @@ -109,10 +109,11 @@ class Item { $output = ''; - foreach (array('id', 'title', 'url', 'date', 'language', 'author', 'enclosure_url', 'enclosure_type') as $property) { + foreach (array('id', 'title', 'url', 'language', 'author', 'enclosure_url', 'enclosure_type') as $property) { $output .= 'Item::'.$property.' = '.$this->$property.PHP_EOL; } + $output .= 'Item::date = '.$this->date->format(DATE_RFC822).PHP_EOL; $output .= 'Item::isRTL() = '.($this->isRTL() ? 'true' : 'false').PHP_EOL; $output .= 'Item::content = '.strlen($this->content).' bytes'.PHP_EOL; diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Rss10.php b/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Rss10.php index da57327ed..16c66a016 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Rss10.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Rss10.php @@ -33,7 +33,7 @@ class Rss10 extends Rss20 */ public function findFeedDate(SimpleXMLElement $xml, Feed $feed) { - $feed->date = $this->date->getTimestamp(XmlParser::getNamespaceValue($xml->channel, $this->namespaces, 'date')); + $feed->date = $this->date->getDateTime(XmlParser::getNamespaceValue($xml->channel, $this->namespaces, 'date')); } /** diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Rss20.php b/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Rss20.php index 114308f51..b5fb09580 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Rss20.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Rss20.php @@ -134,7 +134,7 @@ class Rss20 extends Parser public function findFeedDate(SimpleXMLElement $xml, Feed $feed) { $date = isset($xml->channel->pubDate) ? $xml->channel->pubDate : $xml->channel->lastBuildDate; - $feed->date = $this->date->getTimestamp((string) $date); + $feed->date = $this->date->getDateTime((string) $date); } /** @@ -156,7 +156,7 @@ class Rss20 extends Parser $date = (string) $entry->pubDate; } - $item->date = $this->date->getTimestamp($date); + $item->date = $this->date->getDateTime($date); } /** diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Parser/XmlParser.php b/vendor/fguillot/picofeed/lib/PicoFeed/Parser/XmlParser.php index 73a4a43a6..2c68c50a5 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Parser/XmlParser.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Parser/XmlParser.php @@ -90,10 +90,14 @@ class XmlParser * @static * @access public * @param string $input XML content - * @return \DOMNode + * @return \DOMNDocument */ public static function getDomDocument($input) { + if (empty($input)) { + return false; + } + $dom = self::scanInput($input, function ($in) { $dom = new DomDocument; $dom->loadXml($in, LIBXML_NONET); @@ -208,6 +212,49 @@ class XmlParser } /** + * Extract charset from meta tag + * + * @static + * @access public + * @param string $data meta tag content + * @return string + */ + public static function findCharset($data) + { + $result = explode('charset=', $data); + return isset($result[1]) ? $result[1] : $data; + } + + /** + * Get the encoding from a xml tag + * + * @static + * @access public + * @param string $data Input data + * @return string + */ + public static function getEncodingFromMetaTag($data) + { + $encoding = ''; + + $dom = static::getHtmlDocument($data); + $xpath = new DOMXPath($dom); + + $tags = array( + '/html/head/meta[translate(@http-equiv, "CENOPTY", "cenopty")="content-type"]/@content', //HTML4, convert upper to lower-case + '/html/head/meta/@charset', //HTML5 + ); + + $nodes = $xpath->query(implode(' | ', $tags)); + + foreach ($nodes as $node) { + $encoding = static::findCharset($node->nodeValue); + } + + return $encoding; + } + + /** * Get xml:lang value * * @static diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Rules/.wired.com.php b/vendor/fguillot/picofeed/lib/PicoFeed/Rules/.wired.com.php index 6e25f2c2e..32c0475d3 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Rules/.wired.com.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Rules/.wired.com.php @@ -5,8 +5,6 @@ return array( '//div[@class="entry"]', ), 'strip' => array( - '//script', - '//style', '//*[@id="linker_widget"]', '//*[contains(@class, "bio")]', '//*[contains(@class, "entry-footer")]', diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Rules/01net.com.php b/vendor/fguillot/picofeed/lib/PicoFeed/Rules/01net.com.php index 85c0e7eab..615ad7702 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Rules/01net.com.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Rules/01net.com.php @@ -5,7 +5,6 @@ return array( '//div[@class="article_ventre_box"]', ), 'strip' => array( - '//script', '//link', '//*[contains(@class, "article_navigation")]', '//h1', diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Rules/journaldugeek.com.php b/vendor/fguillot/picofeed/lib/PicoFeed/Rules/journaldugeek.com.php index 72de69135..ad0d67a1c 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Rules/journaldugeek.com.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Rules/journaldugeek.com.php @@ -3,8 +3,5 @@ return array( 'test_url' => 'http://www./2014/05/20/le-playstation-now-arrive-en-beta-fermee-aux-etats-unis/', 'body' => array( '//div[@class="post-content"]', - ), - 'strip' => array( - '//style' ) );
\ No newline at end of file diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Rules/lejapon.fr.php b/vendor/fguillot/picofeed/lib/PicoFeed/Rules/lejapon.fr.php index 8066c3d80..fbc2e53bc 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Rules/lejapon.fr.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Rules/lejapon.fr.php @@ -5,7 +5,6 @@ return array( '//div[@class="entry"]' ), 'strip' => array( - '//script', '//*[contains(@class, "addthis_toolbox")]', '//*[contains(@class, "addthis_default_style")]', '//*[@class="navigation small"]', diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Rules/smallhousebliss.com.php b/vendor/fguillot/picofeed/lib/PicoFeed/Rules/smallhousebliss.com.php index 395cadd8c..8bea4fbf9 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Rules/smallhousebliss.com.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Rules/smallhousebliss.com.php @@ -5,8 +5,6 @@ return array( '//div[@class="post-content"]', ), 'strip' => array( - '//style', - '//script', '//*[contains(@class, "gallery")]', '//*[contains(@class, "share")]', '//*[contains(@class, "wpcnt")]', diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Rules/spiegel.de.php b/vendor/fguillot/picofeed/lib/PicoFeed/Rules/spiegel.de.php index 3fb231615..375b17c35 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Rules/spiegel.de.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Rules/spiegel.de.php @@ -2,6 +2,6 @@ return array( 'test_url' => 'http://www.spiegel.de/politik/ausland/afrika-angola-geht-gegen-islam-vor-und-schliesst-moscheen-a-935788.html', 'body' => array( - '//h2[contains(@class, "article-section")]' + '//div[contains(@class, "article-section")]' ) );
\ No newline at end of file diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Rules/techcrunch.com.php b/vendor/fguillot/picofeed/lib/PicoFeed/Rules/techcrunch.com.php index 7f1a87022..bc4d5b86b 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Rules/techcrunch.com.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Rules/techcrunch.com.php @@ -6,8 +6,6 @@ return array( '//div[@class="body-copy"]', ), 'strip' => array( - '//script', - '//style', '//*[contains(@class, "module-crunchbase")]' ) ); diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Rules/undeadly.org.php b/vendor/fguillot/picofeed/lib/PicoFeed/Rules/undeadly.org.php index 1a7430448..f36ccfe01 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Rules/undeadly.org.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Rules/undeadly.org.php @@ -5,7 +5,6 @@ return array( '/html/body/table[3]/tbody/tr/td[1]/table[2]/tr/td[1]' ), 'strip' => array( - '//style', '//font', ), );
\ No newline at end of file diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Rules/www.bbc.co.uk.php b/vendor/fguillot/picofeed/lib/PicoFeed/Rules/www.bbc.co.uk.php index 3dfa2ea4a..54407812e 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Rules/www.bbc.co.uk.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Rules/www.bbc.co.uk.php @@ -6,9 +6,7 @@ return array( '//div[@class="indPost"]' ), 'strip' => array( - '//script', '//form', |