diff options
author | Frédéric Guillot <fred@kanboard.net> | 2018-02-02 15:39:47 -0800 |
---|---|---|
committer | Frédéric Guillot <fred@kanboard.net> | 2018-02-02 15:39:47 -0800 |
commit | bab2fb3899cc243e2f67ccf787f3657b250f6e61 (patch) | |
tree | 07ddb755330b320fbd2e2803fdb978cfff3bd452 /vendor | |
parent | 5c4d06d26b808ea50d08f83ae02ac82373fd2208 (diff) |
Remove dependency on PicoFeed
Diffstat (limited to 'vendor')
340 files changed, 346 insertions, 15022 deletions
diff --git a/vendor/autoload.php b/vendor/autoload.php index 48156f07..f0391eef 100644 --- a/vendor/autoload.php +++ b/vendor/autoload.php @@ -4,4 +4,4 @@ require_once __DIR__ . '/composer/autoload_real.php'; -return ComposerAutoloaderInit52171af285e1b8005511556b6240be1b::getLoader(); +return ComposerAutoloaderInitbdc3716ceecc7570f8ff9a8407f0ca0e::getLoader(); diff --git a/vendor/bin/picofeed b/vendor/bin/picofeed deleted file mode 120000 index 7b63b542..00000000 --- a/vendor/bin/picofeed +++ /dev/null @@ -1 +0,0 @@ -../miniflux/picofeed/picofeed
\ No newline at end of file diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index 1cd0347b..4171bf4d 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -701,73 +701,6 @@ return array( 'PicoDb\\StatementHandler' => $vendorDir . '/fguillot/picodb/lib/PicoDb/StatementHandler.php', 'PicoDb\\Table' => $vendorDir . '/fguillot/picodb/lib/PicoDb/Table.php', 'PicoDb\\UrlParser' => $vendorDir . '/fguillot/picodb/lib/PicoDb/UrlParser.php', - 'PicoFeed\\Base' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Base.php', - 'PicoFeed\\Client\\Client' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Client/Client.php', - 'PicoFeed\\Client\\ClientException' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Client/ClientException.php', - 'PicoFeed\\Client\\Curl' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Client/Curl.php', - 'PicoFeed\\Client\\ForbiddenException' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Client/ForbiddenException.php', - 'PicoFeed\\Client\\HttpHeaders' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Client/HttpHeaders.php', - 'PicoFeed\\Client\\InvalidCertificateException' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Client/InvalidCertificateException.php', - 'PicoFeed\\Client\\InvalidUrlException' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Client/InvalidUrlException.php', - 'PicoFeed\\Client\\MaxRedirectException' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Client/MaxRedirectException.php', - 'PicoFeed\\Client\\MaxSizeException' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Client/MaxSizeException.php', - 'PicoFeed\\Client\\Stream' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Client/Stream.php', - 'PicoFeed\\Client\\TimeoutException' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Client/TimeoutException.php', - 'PicoFeed\\Client\\UnauthorizedException' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Client/UnauthorizedException.php', - 'PicoFeed\\Client\\Url' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Client/Url.php', - 'PicoFeed\\Config\\Config' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Config/Config.php', - 'PicoFeed\\Encoding\\Encoding' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Encoding/Encoding.php', - 'PicoFeed\\Filter\\Attribute' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Filter/Attribute.php', - 'PicoFeed\\Filter\\Filter' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Filter/Filter.php', - 'PicoFeed\\Filter\\Html' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Filter/Html.php', - 'PicoFeed\\Filter\\Tag' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Filter/Tag.php', - 'PicoFeed\\Generator\\ContentGeneratorInterface' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Generator/ContentGeneratorInterface.php', - 'PicoFeed\\Generator\\FileContentGenerator' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Generator/FileContentGenerator.php', - 'PicoFeed\\Generator\\YoutubeContentGenerator' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Generator/YoutubeContentGenerator.php', - 'PicoFeed\\Logging\\Logger' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Logging/Logger.php', - 'PicoFeed\\Parser\\Atom' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Parser/Atom.php', - 'PicoFeed\\Parser\\DateParser' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Parser/DateParser.php', - 'PicoFeed\\Parser\\Feed' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Parser/Feed.php', - 'PicoFeed\\Parser\\Item' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Parser/Item.php', - 'PicoFeed\\Parser\\MalformedXmlException' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Parser/MalformedXmlException.php', - 'PicoFeed\\Parser\\Parser' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Parser/Parser.php', - 'PicoFeed\\Parser\\ParserException' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Parser/ParserException.php', - 'PicoFeed\\Parser\\ParserInterface' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Parser/ParserInterface.php', - 'PicoFeed\\Parser\\Rss10' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Parser/Rss10.php', - 'PicoFeed\\Parser\\Rss20' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Parser/Rss20.php', - 'PicoFeed\\Parser\\Rss91' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Parser/Rss91.php', - 'PicoFeed\\Parser\\Rss92' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Parser/Rss92.php', - 'PicoFeed\\Parser\\XmlEntityException' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Parser/XmlEntityException.php', - 'PicoFeed\\Parser\\XmlParser' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Parser/XmlParser.php', - 'PicoFeed\\PicoFeedException' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/PicoFeedException.php', - 'PicoFeed\\Processor\\ContentFilterProcessor' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Processor/ContentFilterProcessor.php', - 'PicoFeed\\Processor\\ContentGeneratorProcessor' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Processor/ContentGeneratorProcessor.php', - 'PicoFeed\\Processor\\ItemPostProcessor' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Processor/ItemPostProcessor.php', - 'PicoFeed\\Processor\\ItemProcessorInterface' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Processor/ItemProcessorInterface.php', - 'PicoFeed\\Processor\\ScraperProcessor' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Processor/ScraperProcessor.php', - 'PicoFeed\\Reader\\Favicon' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Reader/Favicon.php', - 'PicoFeed\\Reader\\Reader' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Reader/Reader.php', - 'PicoFeed\\Reader\\ReaderException' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Reader/ReaderException.php', - 'PicoFeed\\Reader\\SubscriptionNotFoundException' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Reader/SubscriptionNotFoundException.php', - 'PicoFeed\\Reader\\UnsupportedFeedFormatException' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Reader/UnsupportedFeedFormatException.php', - 'PicoFeed\\Scraper\\CandidateParser' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Scraper/CandidateParser.php', - 'PicoFeed\\Scraper\\ParserInterface' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Scraper/ParserInterface.php', - 'PicoFeed\\Scraper\\RuleLoader' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Scraper/RuleLoader.php', - 'PicoFeed\\Scraper\\RuleParser' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Scraper/RuleParser.php', - 'PicoFeed\\Scraper\\Scraper' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Scraper/Scraper.php', - 'PicoFeed\\Serialization\\Subscription' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Serialization/Subscription.php', - 'PicoFeed\\Serialization\\SubscriptionList' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Serialization/SubscriptionList.php', - 'PicoFeed\\Serialization\\SubscriptionListBuilder' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Serialization/SubscriptionListBuilder.php', - 'PicoFeed\\Serialization\\SubscriptionListParser' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Serialization/SubscriptionListParser.php', - 'PicoFeed\\Serialization\\SubscriptionParser' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Serialization/SubscriptionParser.php', - 'PicoFeed\\Syndication\\AtomFeedBuilder' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Syndication/AtomFeedBuilder.php', - 'PicoFeed\\Syndication\\AtomHelper' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Syndication/AtomHelper.php', - 'PicoFeed\\Syndication\\AtomItemBuilder' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Syndication/AtomItemBuilder.php', - 'PicoFeed\\Syndication\\FeedBuilder' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Syndication/FeedBuilder.php', - 'PicoFeed\\Syndication\\ItemBuilder' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Syndication/ItemBuilder.php', - 'PicoFeed\\Syndication\\Rss20FeedBuilder' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Syndication/Rss20FeedBuilder.php', - 'PicoFeed\\Syndication\\Rss20Helper' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Syndication/Rss20Helper.php', - 'PicoFeed\\Syndication\\Rss20ItemBuilder' => $vendorDir . '/miniflux/picofeed/lib/PicoFeed/Syndication/Rss20ItemBuilder.php', 'Pimple\\Container' => $vendorDir . '/pimple/pimple/src/Pimple/Container.php', 'Pimple\\Exception\\ExpectedInvokableException' => $vendorDir . '/pimple/pimple/src/Pimple/Exception/ExpectedInvokableException.php', 'Pimple\\Exception\\FrozenServiceException' => $vendorDir . '/pimple/pimple/src/Pimple/Exception/FrozenServiceException.php', @@ -965,8 +898,4 @@ return array( 'Symfony\\Component\\Finder\\Iterator\\SortableIterator' => $vendorDir . '/symfony/finder/Iterator/SortableIterator.php', 'Symfony\\Component\\Finder\\SplFileInfo' => $vendorDir . '/symfony/finder/SplFileInfo.php', 'Symfony\\Polyfill\\Mbstring\\Mbstring' => $vendorDir . '/symfony/polyfill-mbstring/Mbstring.php', - 'ZendXml\\Exception\\ExceptionInterface' => $vendorDir . '/zendframework/zendxml/library/ZendXml/Exception/ExceptionInterface.php', - 'ZendXml\\Exception\\InvalidArgumentException' => $vendorDir . '/zendframework/zendxml/library/ZendXml/Exception/InvalidArgumentException.php', - 'ZendXml\\Exception\\RuntimeException' => $vendorDir . '/zendframework/zendxml/library/ZendXml/Exception/RuntimeException.php', - 'ZendXml\\Security' => $vendorDir . '/zendframework/zendxml/library/ZendXml/Security.php', ); diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php index c2ba047d..391b4038 100644 --- a/vendor/composer/autoload_namespaces.php +++ b/vendor/composer/autoload_namespaces.php @@ -6,11 +6,9 @@ $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( - 'ZendXml\\' => array($vendorDir . '/zendframework/zendxml/library'), 'SimpleValidator' => array($vendorDir . '/fguillot/simple-validator/src'), 'SimpleLogger' => array($vendorDir . '/fguillot/simpleLogger/src'), 'Pimple' => array($vendorDir . '/pimple/pimple/src'), - 'PicoFeed' => array($vendorDir . '/miniflux/picofeed/lib'), 'PicoDb' => array($vendorDir . '/fguillot/picodb/lib'), 'Parsedown' => array($vendorDir . '/erusev/parsedown'), 'PHPQRCode' => array($vendorDir . '/aferrandini/phpqrcode/lib'), diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php index 5006bc08..7fbc9657 100644 --- a/vendor/composer/autoload_real.php +++ b/vendor/composer/autoload_real.php @@ -2,7 +2,7 @@ // autoload_real.php @generated by Composer -class ComposerAutoloaderInit52171af285e1b8005511556b6240be1b +class ComposerAutoloaderInitbdc3716ceecc7570f8ff9a8407f0ca0e { private static $loader; @@ -19,15 +19,15 @@ class ComposerAutoloaderInit52171af285e1b8005511556b6240be1b return self::$loader; } - spl_autoload_register(array('ComposerAutoloaderInit52171af285e1b8005511556b6240be1b', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInitbdc3716ceecc7570f8ff9a8407f0ca0e', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(); - spl_autoload_unregister(array('ComposerAutoloaderInit52171af285e1b8005511556b6240be1b', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInitbdc3716ceecc7570f8ff9a8407f0ca0e', 'loadClassLoader')); $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); if ($useStaticLoader) { require_once __DIR__ . '/autoload_static.php'; - call_user_func(\Composer\Autoload\ComposerStaticInit52171af285e1b8005511556b6240be1b::getInitializer($loader)); + call_user_func(\Composer\Autoload\ComposerStaticInitbdc3716ceecc7570f8ff9a8407f0ca0e::getInitializer($loader)); } else { $map = require __DIR__ . '/autoload_namespaces.php'; foreach ($map as $namespace => $path) { @@ -48,19 +48,19 @@ class ComposerAutoloaderInit52171af285e1b8005511556b6240be1b $loader->register(true); if ($useStaticLoader) { - $includeFiles = Composer\Autoload\ComposerStaticInit52171af285e1b8005511556b6240be1b::$files; + $includeFiles = Composer\Autoload\ComposerStaticInitbdc3716ceecc7570f8ff9a8407f0ca0e::$files; } else { $includeFiles = require __DIR__ . '/autoload_files.php'; } foreach ($includeFiles as $fileIdentifier => $file) { - composerRequire52171af285e1b8005511556b6240be1b($fileIdentifier, $file); + composerRequirebdc3716ceecc7570f8ff9a8407f0ca0e($fileIdentifier, $file); } return $loader; } } -function composerRequire52171af285e1b8005511556b6240be1b($fileIdentifier, $file) +function composerRequirebdc3716ceecc7570f8ff9a8407f0ca0e($fileIdentifier, $file) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { require $file; diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 7ed5c3d2..a70c8093 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -4,7 +4,7 @@ namespace Composer\Autoload; -class ComposerStaticInit52171af285e1b8005511556b6240be1b +class ComposerStaticInitbdc3716ceecc7570f8ff9a8407f0ca0e { public static $files = array ( '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', @@ -90,13 +90,6 @@ class ComposerStaticInit52171af285e1b8005511556b6240be1b ); public static $prefixesPsr0 = array ( - 'Z' => - array ( - 'ZendXml\\' => - array ( - 0 => __DIR__ . '/..' . '/zendframework/zendxml/library', - ), - ), 'S' => array ( 'SimpleValidator' => @@ -114,10 +107,6 @@ class ComposerStaticInit52171af285e1b8005511556b6240be1b array ( 0 => __DIR__ . '/..' . '/pimple/pimple/src', ), - 'PicoFeed' => - array ( - 0 => __DIR__ . '/..' . '/miniflux/picofeed/lib', - ), 'PicoDb' => array ( 0 => __DIR__ . '/..' . '/fguillot/picodb/lib', @@ -850,73 +839,6 @@ class ComposerStaticInit52171af285e1b8005511556b6240be1b 'PicoDb\\StatementHandler' => __DIR__ . '/..' . '/fguillot/picodb/lib/PicoDb/StatementHandler.php', 'PicoDb\\Table' => __DIR__ . '/..' . '/fguillot/picodb/lib/PicoDb/Table.php', 'PicoDb\\UrlParser' => __DIR__ . '/..' . '/fguillot/picodb/lib/PicoDb/UrlParser.php', - 'PicoFeed\\Base' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Base.php', - 'PicoFeed\\Client\\Client' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Client/Client.php', - 'PicoFeed\\Client\\ClientException' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Client/ClientException.php', - 'PicoFeed\\Client\\Curl' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Client/Curl.php', - 'PicoFeed\\Client\\ForbiddenException' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Client/ForbiddenException.php', - 'PicoFeed\\Client\\HttpHeaders' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Client/HttpHeaders.php', - 'PicoFeed\\Client\\InvalidCertificateException' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Client/InvalidCertificateException.php', - 'PicoFeed\\Client\\InvalidUrlException' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Client/InvalidUrlException.php', - 'PicoFeed\\Client\\MaxRedirectException' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Client/MaxRedirectException.php', - 'PicoFeed\\Client\\MaxSizeException' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Client/MaxSizeException.php', - 'PicoFeed\\Client\\Stream' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Client/Stream.php', - 'PicoFeed\\Client\\TimeoutException' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Client/TimeoutException.php', - 'PicoFeed\\Client\\UnauthorizedException' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Client/UnauthorizedException.php', - 'PicoFeed\\Client\\Url' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Client/Url.php', - 'PicoFeed\\Config\\Config' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Config/Config.php', - 'PicoFeed\\Encoding\\Encoding' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Encoding/Encoding.php', - 'PicoFeed\\Filter\\Attribute' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Filter/Attribute.php', - 'PicoFeed\\Filter\\Filter' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Filter/Filter.php', - 'PicoFeed\\Filter\\Html' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Filter/Html.php', - 'PicoFeed\\Filter\\Tag' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Filter/Tag.php', - 'PicoFeed\\Generator\\ContentGeneratorInterface' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Generator/ContentGeneratorInterface.php', - 'PicoFeed\\Generator\\FileContentGenerator' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Generator/FileContentGenerator.php', - 'PicoFeed\\Generator\\YoutubeContentGenerator' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Generator/YoutubeContentGenerator.php', - 'PicoFeed\\Logging\\Logger' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Logging/Logger.php', - 'PicoFeed\\Parser\\Atom' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Parser/Atom.php', - 'PicoFeed\\Parser\\DateParser' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Parser/DateParser.php', - 'PicoFeed\\Parser\\Feed' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Parser/Feed.php', - 'PicoFeed\\Parser\\Item' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Parser/Item.php', - 'PicoFeed\\Parser\\MalformedXmlException' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Parser/MalformedXmlException.php', - 'PicoFeed\\Parser\\Parser' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Parser/Parser.php', - 'PicoFeed\\Parser\\ParserException' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Parser/ParserException.php', - 'PicoFeed\\Parser\\ParserInterface' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Parser/ParserInterface.php', - 'PicoFeed\\Parser\\Rss10' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Parser/Rss10.php', - 'PicoFeed\\Parser\\Rss20' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Parser/Rss20.php', - 'PicoFeed\\Parser\\Rss91' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Parser/Rss91.php', - 'PicoFeed\\Parser\\Rss92' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Parser/Rss92.php', - 'PicoFeed\\Parser\\XmlEntityException' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Parser/XmlEntityException.php', - 'PicoFeed\\Parser\\XmlParser' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Parser/XmlParser.php', - 'PicoFeed\\PicoFeedException' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/PicoFeedException.php', - 'PicoFeed\\Processor\\ContentFilterProcessor' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Processor/ContentFilterProcessor.php', - 'PicoFeed\\Processor\\ContentGeneratorProcessor' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Processor/ContentGeneratorProcessor.php', - 'PicoFeed\\Processor\\ItemPostProcessor' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Processor/ItemPostProcessor.php', - 'PicoFeed\\Processor\\ItemProcessorInterface' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Processor/ItemProcessorInterface.php', - 'PicoFeed\\Processor\\ScraperProcessor' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Processor/ScraperProcessor.php', - 'PicoFeed\\Reader\\Favicon' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Reader/Favicon.php', - 'PicoFeed\\Reader\\Reader' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Reader/Reader.php', - 'PicoFeed\\Reader\\ReaderException' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Reader/ReaderException.php', - 'PicoFeed\\Reader\\SubscriptionNotFoundException' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Reader/SubscriptionNotFoundException.php', - 'PicoFeed\\Reader\\UnsupportedFeedFormatException' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Reader/UnsupportedFeedFormatException.php', - 'PicoFeed\\Scraper\\CandidateParser' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Scraper/CandidateParser.php', - 'PicoFeed\\Scraper\\ParserInterface' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Scraper/ParserInterface.php', - 'PicoFeed\\Scraper\\RuleLoader' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Scraper/RuleLoader.php', - 'PicoFeed\\Scraper\\RuleParser' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Scraper/RuleParser.php', - 'PicoFeed\\Scraper\\Scraper' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Scraper/Scraper.php', - 'PicoFeed\\Serialization\\Subscription' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Serialization/Subscription.php', - 'PicoFeed\\Serialization\\SubscriptionList' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Serialization/SubscriptionList.php', - 'PicoFeed\\Serialization\\SubscriptionListBuilder' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Serialization/SubscriptionListBuilder.php', - 'PicoFeed\\Serialization\\SubscriptionListParser' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Serialization/SubscriptionListParser.php', - 'PicoFeed\\Serialization\\SubscriptionParser' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Serialization/SubscriptionParser.php', - 'PicoFeed\\Syndication\\AtomFeedBuilder' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Syndication/AtomFeedBuilder.php', - 'PicoFeed\\Syndication\\AtomHelper' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Syndication/AtomHelper.php', - 'PicoFeed\\Syndication\\AtomItemBuilder' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Syndication/AtomItemBuilder.php', - 'PicoFeed\\Syndication\\FeedBuilder' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Syndication/FeedBuilder.php', - 'PicoFeed\\Syndication\\ItemBuilder' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Syndication/ItemBuilder.php', - 'PicoFeed\\Syndication\\Rss20FeedBuilder' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Syndication/Rss20FeedBuilder.php', - 'PicoFeed\\Syndication\\Rss20Helper' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Syndication/Rss20Helper.php', - 'PicoFeed\\Syndication\\Rss20ItemBuilder' => __DIR__ . '/..' . '/miniflux/picofeed/lib/PicoFeed/Syndication/Rss20ItemBuilder.php', 'Pimple\\Container' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Container.php', 'Pimple\\Exception\\ExpectedInvokableException' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Exception/ExpectedInvokableException.php', 'Pimple\\Exception\\FrozenServiceException' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Exception/FrozenServiceException.php', @@ -1114,19 +1036,15 @@ class ComposerStaticInit52171af285e1b8005511556b6240be1b 'Symfony\\Component\\Finder\\Iterator\\SortableIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/SortableIterator.php', 'Symfony\\Component\\Finder\\SplFileInfo' => __DIR__ . '/..' . '/symfony/finder/SplFileInfo.php', 'Symfony\\Polyfill\\Mbstring\\Mbstring' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/Mbstring.php', - 'ZendXml\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/zendframework/zendxml/library/ZendXml/Exception/ExceptionInterface.php', - 'ZendXml\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/zendframework/zendxml/library/ZendXml/Exception/InvalidArgumentException.php', - 'ZendXml\\Exception\\RuntimeException' => __DIR__ . '/..' . '/zendframework/zendxml/library/ZendXml/Exception/RuntimeException.php', - 'ZendXml\\Security' => __DIR__ . '/..' . '/zendframework/zendxml/library/ZendXml/Security.php', ); public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInit52171af285e1b8005511556b6240be1b::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInit52171af285e1b8005511556b6240be1b::$prefixDirsPsr4; - $loader->prefixesPsr0 = ComposerStaticInit52171af285e1b8005511556b6240be1b::$prefixesPsr0; - $loader->classMap = ComposerStaticInit52171af285e1b8005511556b6240be1b::$classMap; + $loader->prefixLengthsPsr4 = ComposerStaticInitbdc3716ceecc7570f8ff9a8407f0ca0e::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInitbdc3716ceecc7570f8ff9a8407f0ca0e::$prefixDirsPsr4; + $loader->prefixesPsr0 = ComposerStaticInitbdc3716ceecc7570f8ff9a8407f0ca0e::$prefixesPsr0; + $loader->classMap = ComposerStaticInitbdc3716ceecc7570f8ff9a8407f0ca0e::$classMap; }, null, ClassLoader::class); } diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 6b5a1bd0..d702ddd7 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -1,5 +1,51 @@ [ { + "name": "aferrandini/phpqrcode", + "version": "1.0.1", + "version_normalized": "1.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/aferrandini/PHPQRCode.git", + "reference": "3c1c0454d43710ab5bbe19a51ad4cb41c22e3d46" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/aferrandini/PHPQRCode/zipball/3c1c0454d43710ab5bbe19a51ad4cb41c22e3d46", + "reference": "3c1c0454d43710ab5bbe19a51ad4cb41c22e3d46", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "time": "2013-07-08T09:39:08+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "PHPQRCode": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ariel Ferrandini", + "email": "arielferrandini@gmail.com", + "homepage": "http://www.ferrandini.com/", + "role": "Developer" + } + ], + "description": "PHPQRCode porting and changed for PHP 5.3 compatibility", + "homepage": "https://github.com/aferrandini/PHPQRCode", + "keywords": [ + "barcode", + "php", + "qrcode" + ] + }, + { "name": "christian-riesen/base32", "version": "1.3.1", "version_normalized": "1.3.1.0", @@ -288,93 +334,80 @@ "homepage": "https://github.com/fguillot/picoDb" }, { - "name": "zendframework/zendxml", - "version": "1.0.2", - "version_normalized": "1.0.2.0", + "name": "fguillot/simple-queue", + "version": "v1.0.1", + "version_normalized": "1.0.1.0", "source": { "type": "git", - "url": "https://github.com/zendframework/ZendXml.git", - "reference": "7b64507bc35d841c9c5802d67f6f87ef8e1a58c9" + "url": "https://github.com/fguillot/simple-queue.git", + "reference": "ce7801c507f9501bcca455129fb04c3d2107d5ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/ZendXml/zipball/7b64507bc35d841c9c5802d67f6f87ef8e1a58c9", - "reference": "7b64507bc35d841c9c5802d67f6f87ef8e1a58c9", + "url": "https://api.github.com/repos/fguillot/simple-queue/zipball/ce7801c507f9501bcca455129fb04c3d2107d5ff", + "reference": "ce7801c507f9501bcca455129fb04c3d2107d5ff", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": ">=5.3.3" }, "require-dev": { - "phpunit/phpunit": "^3.7 || ^4.0", - "squizlabs/php_codesniffer": "^1.5" + "aws/aws-sdk-php": "~3.0", + "mariano/disque-php": "~2.0", + "pda/pheanstalk": "~3.0", + "php-amqplib/php-amqplib": "2.6.*", + "phpunit/phpunit": "5.3.*" }, - "time": "2016-02-04T21:02:08+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } + "suggest": { + "aws/aws-sdk-php": "Required to use the AWS SQS queue driver (~3.0).", + "mariano/disque-php": "Required to use the Disque queue driver (~2.0).", + "pda/pheanstalk": "Required to use the Beanstalk queue driver (~3.0).", + "php-amqplib/php-amqplib": "Required to use the RabbitMQ queue driver (2.6.*)." }, + "time": "2016-06-05T21:34:56+00:00", + "type": "library", "installation-source": "dist", "autoload": { - "psr-0": { - "ZendXml\\": "library/" + "psr-4": { + "SimpleQueue\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "description": "Utility library for XML usage, best practices, and security in PHP", - "homepage": "http://packages.zendframework.com/", - "keywords": [ - "security", - "xml", - "zf2" - ] + "authors": [ + { + "name": "Frédéric Guillot" + } + ], + "description": "Abstraction layer for multiple queue systems", + "homepage": "https://github.com/fguillot/simple-queue" }, { - "name": "miniflux/picofeed", - "version": "v0.1.34", - "version_normalized": "0.1.34.0", + "name": "fguillot/simple-validator", + "version": "v1.0.1", + "version_normalized": "1.0.1.0", "source": { "type": "git", - "url": "https://github.com/miniflux/picoFeed.git", - "reference": "5c8a731d4e7a3589e562e4fdaa98bcb57fa8a2ea" + "url": "https://github.com/fguillot/simpleValidator.git", + "reference": "23b0a99c5f11ad74d05f8845feaafbcfd9223eda" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/miniflux/picoFeed/zipball/5c8a731d4e7a3589e562e4fdaa98bcb57fa8a2ea", - "reference": "5c8a731d4e7a3589e562e4fdaa98bcb57fa8a2ea", + "url": "https://api.github.com/repos/fguillot/simpleValidator/zipball/23b0a99c5f11ad74d05f8845feaafbcfd9223eda", + "reference": "23b0a99c5f11ad74d05f8845feaafbcfd9223eda", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-iconv": "*", - "ext-libxml": "*", - "ext-simplexml": "*", - "ext-xml": "*", - "php": ">=5.3.0", - "zendframework/zendxml": "^1.0" - }, - "require-dev": { - "phpdocumentor/reflection-docblock": "2.0.4", - "phpunit/phpunit": "4.8.26", - "symfony/yaml": "2.8.7" - }, - "suggest": { - "ext-curl": "PicoFeed will use cURL if present" + "php": ">=5.3.0" }, - "time": "2017-06-12T00:22:06+00:00", - "bin": [ - "picofeed" - ], + "time": "2016-06-26T15:09:26+00:00", "type": "library", "installation-source": "dist", "autoload": { "psr-0": { - "PicoFeed": "lib/" + "SimpleValidator": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -386,8 +419,8 @@ "name": "Frédéric Guillot" } ], - "description": "Modern library to handle RSS/Atom feeds", - "homepage": "https://github.com/miniflux/picoFeed" + "description": "Simple validator library", + "homepage": "https://github.com/fguillot/simpleValidator" }, { "name": "psr/log", @@ -478,30 +511,38 @@ "homepage": "https://github.com/fguillot/simpleLogger" }, { - "name": "fguillot/simple-validator", - "version": "v1.0.1", - "version_normalized": "1.0.1.0", + "name": "symfony/finder", + "version": "v3.4.4", + "version_normalized": "3.4.4.0", "source": { "type": "git", - "url": "https://github.com/fguillot/simpleValidator.git", - "reference": "23b0a99c5f11ad74d05f8845feaafbcfd9223eda" + "url": "https://github.com/symfony/finder.git", + "reference": "613e26310776f49a1773b6737c6bd554b8bc8c6f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fguillot/simpleValidator/zipball/23b0a99c5f11ad74d05f8845feaafbcfd9223eda", - "reference": "23b0a99c5f11ad74d05f8845feaafbcfd9223eda", + "url": "https://api.github.com/repos/symfony/finder/zipball/613e26310776f49a1773b6737c6bd554b8bc8c6f", + "reference": "613e26310776f49a1773b6737c6bd554b8bc8c6f", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^5.5.9|>=7.0.8" }, - "time": "2016-06-26T15:09:26+00:00", + "time": "2018-01-03T07:37:34+00:00", "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, "installation-source": "dist", "autoload": { - "psr-0": { - "SimpleValidator": "src/" - } + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -509,49 +550,47 @@ ], "authors": [ { - "name": "Frédéric Guillot" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Simple validator library", - "homepage": "https://github.com/fguillot/simpleValidator" + "description": "Symfony Finder Component", + "homepage": "https://symfony.com" }, { - "name": "fguillot/simple-queue", - "version": "v1.0.1", - "version_normalized": "1.0.1.0", + "name": "gregwar/captcha", + "version": "v1.1.4", + "version_normalized": "1.1.4.0", "source": { "type": "git", - "url": "https://github.com/fguillot/simple-queue.git", - "reference": "ce7801c507f9501bcca455129fb04c3d2107d5ff" + "url": "https://github.com/Gregwar/Captcha.git", + "reference": "0185f4a64faef65612792f0d9a48dbe8d70c585c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fguillot/simple-queue/zipball/ce7801c507f9501bcca455129fb04c3d2107d5ff", - "reference": "ce7801c507f9501bcca455129fb04c3d2107d5ff", + "url": "https://api.github.com/repos/Gregwar/Captcha/zipball/0185f4a64faef65612792f0d9a48dbe8d70c585c", + "reference": "0185f4a64faef65612792f0d9a48dbe8d70c585c", "shasum": "" }, "require": { - "php": ">=5.3.3" + "ext-gd": "*", + "ext-mbstring": "*", + "php": ">=5.3.0", + "symfony/finder": "~3.0" }, "require-dev": { - "aws/aws-sdk-php": "~3.0", - "mariano/disque-php": "~2.0", - "pda/pheanstalk": "~3.0", - "php-amqplib/php-amqplib": "2.6.*", - "phpunit/phpunit": "5.3.*" - }, - "suggest": { - "aws/aws-sdk-php": "Required to use the AWS SQS queue driver (~3.0).", - "mariano/disque-php": "Required to use the Disque queue driver (~2.0).", - "pda/pheanstalk": "Required to use the Beanstalk queue driver (~3.0).", - "php-amqplib/php-amqplib": "Required to use the RabbitMQ queue driver (2.6.*)." + "phpunit/phpunit": "^6.4" }, - "time": "2016-06-05T21:34:56+00:00", - "type": "library", + "time": "2017-12-01T13:59:36+00:00", + "type": "captcha", "installation-source": "dist", "autoload": { "psr-4": { - "SimpleQueue\\": "src/" + "Gregwar\\": "src/Gregwar" } }, "notification-url": "https://packagist.org/downloads/", @@ -560,11 +599,22 @@ ], "authors": [ { - "name": "Frédéric Guillot" + "name": "Grégoire Passault", + "email": "g.passault@gmail.com", + "homepage": "http://www.gregwar.com/" + }, + { + "name": "Jeremy Livingston", + "email": "jeremy.j.livingston@gmail.com" } ], - "description": "Abstraction layer for multiple queue systems", - "homepage": "https://github.com/fguillot/simple-queue" + "description": "Captcha generator", + "homepage": "https://github.com/Gregwar/Captcha", + "keywords": [ + "bot", + "captcha", + "spam" + ] }, { "name": "paragonie/random_compat", @@ -776,44 +826,40 @@ ] }, { - "name": "symfony/debug", - "version": "v3.4.2", - "version_normalized": "3.4.2.0", + "name": "symfony/polyfill-mbstring", + "version": "v1.7.0", + "version_normalized": "1.7.0.0", "source": { "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "543deab3ffff94402440b326fc94153bae2dfa7a" + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/543deab3ffff94402440b326fc94153bae2dfa7a", - "reference": "543deab3ffff94402440b326fc94153bae2dfa7a", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/78be803ce01e55d3491c1397cf1c64beb9c1b63b", + "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "psr/log": "~1.0" - }, - "conflict": { - "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + "php": ">=5.3.3" }, - "require-dev": { - "symfony/http-kernel": "~2.8|~3.0|~4.0" + "suggest": { + "ext-mbstring": "For best performance" }, - "time": "2017-12-12T08:27:14+00:00", + "time": "2018-01-30T19:27:44+00:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "1.7-dev" } }, "installation-source": "dist", "autoload": { "psr-4": { - "Symfony\\Component\\Debug\\": "" + "Symfony\\Polyfill\\Mbstring\\": "" }, - "exclude-from-classmap": [ - "/Tests/" + "files": [ + "bootstrap.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -822,52 +868,63 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Debug Component", - "homepage": "https://symfony.com" + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ] }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.6.0", - "version_normalized": "1.6.0.0", + "name": "symfony/debug", + "version": "v3.4.2", + "version_normalized": "3.4.2.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" + "url": "https://github.com/symfony/debug.git", + "reference": "543deab3ffff94402440b326fc94153bae2dfa7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", - "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "url": "https://api.github.com/repos/symfony/debug/zipball/543deab3ffff94402440b326fc94153bae2dfa7a", + "reference": "543deab3ffff94402440b326fc94153bae2dfa7a", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.5.9|>=7.0.8", + "psr/log": "~1.0" }, - "suggest": { - "ext-mbstring": "For best performance" + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" }, - "time": "2017-10-11T12:05:26+00:00", + "require-dev": { + "symfony/http-kernel": "~2.8|~3.0|~4.0" + }, + "time": "2017-12-12T08:27:14+00:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6-dev" + "dev-master": "3.4-dev" } }, "installation-source": "dist", "autoload": { "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" + "Symfony\\Component\\Debug\\": "" }, - "files": [ - "bootstrap.php" + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -876,23 +933,16 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ] + "description": "Symfony Debug Component", + "homepage": "https://symfony.com" }, { "name": "symfony/console", @@ -1029,157 +1079,5 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com" - }, - { - "name": "symfony/finder", - "version": "v3.4.4", - "version_normalized": "3.4.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "613e26310776f49a1773b6737c6bd554b8bc8c6f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/613e26310776f49a1773b6737c6bd554b8bc8c6f", - "reference": "613e26310776f49a1773b6737c6bd554b8bc8c6f", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8" - }, - "time": "2018-01-03T07:37:34+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Finder Component", - "homepage": "https://symfony.com" - }, - { - "name": "gregwar/captcha", - "version": "v1.1.4", - "version_normalized": "1.1.4.0", - "source": { - "type": "git", - "url": "https://github.com/Gregwar/Captcha.git", - "reference": "0185f4a64faef65612792f0d9a48dbe8d70c585c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Gregwar/Captcha/zipball/0185f4a64faef65612792f0d9a48dbe8d70c585c", - "reference": "0185f4a64faef65612792f0d9a48dbe8d70c585c", - "shasum": "" - }, - "require": { - "ext-gd": "*", - "ext-mbstring": "*", - "php": ">=5.3.0", - "symfony/finder": "~3.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.4" - }, - "time": "2017-12-01T13:59:36+00:00", - "type": "captcha", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Gregwar\\": "src/Gregwar" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Grégoire Passault", - "email": "g.passault@gmail.com", - "homepage": "http://www.gregwar.com/" - }, - { - "name": "Jeremy Livingston", - "email": "jeremy.j.livingston@gmail.com" - } - ], - "description": "Captcha generator", - "homepage": "https://github.com/Gregwar/Captcha", - "keywords": [ - "bot", - "captcha", - "spam" - ] - }, - { - "name": "aferrandini/phpqrcode", - "version": "1.0.1", - "version_normalized": "1.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/aferrandini/PHPQRCode.git", - "reference": "3c1c0454d43710ab5bbe19a51ad4cb41c22e3d46" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/aferrandini/PHPQRCode/zipball/3c1c0454d43710ab5bbe19a51ad4cb41c22e3d46", - "reference": "3c1c0454d43710ab5bbe19a51ad4cb41c22e3d46", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "time": "2013-07-08T09:39:08+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-0": { - "PHPQRCode": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ariel Ferrandini", - "email": "arielferrandini@gmail.com", - "homepage": "http://www.ferrandini.com/", - "role": "Developer" - } - ], - "description": "PHPQRCode porting and changed for PHP 5.3 compatibility", - "homepage": "https://github.com/aferrandini/PHPQRCode", - "keywords": [ - "barcode", - "php", - "qrcode" - ] } ] diff --git a/vendor/miniflux/picofeed/LICENSE b/vendor/miniflux/picofeed/LICENSE deleted file mode 100644 index 6a362bc1..00000000 --- a/vendor/miniflux/picofeed/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Frederic Guillot - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Base.php b/vendor/miniflux/picofeed/lib/PicoFeed/Base.php deleted file mode 100644 index 41a6f8f0..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Base.php +++ /dev/null @@ -1,38 +0,0 @@ -<?php - -namespace PicoFeed; - -use PicoFeed\Config\Config; -use PicoFeed\Logging\Logger; - -/** - * Base class - * - * @package PicoFeed - * @author Frederic Guillot - */ -abstract class Base -{ - /** - * Config class instance - * - * @access protected - * @var \PicoFeed\Config\Config - */ - protected $config; - - /** - * Constructor. - * - * @param \PicoFeed\Config\Config $config Config class instance - */ - public function __construct(Config $config = null) - { - $this->config = $config ?: new Config(); - Logger::setTimezone($this->config->getTimezone()); - } - - public function setConfig(Config $config) { - $this->config = $config; - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Client/Client.php b/vendor/miniflux/picofeed/lib/PicoFeed/Client/Client.php deleted file mode 100644 index 0548d5c6..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Client/Client.php +++ /dev/null @@ -1,719 +0,0 @@ -<?php - -namespace PicoFeed\Client; - -use DateTime; -use Exception; -use LogicException; -use PicoFeed\Logging\Logger; -use PicoFeed\Config\Config; - -/** - * Client class. - * - * @author Frederic Guillot - */ -abstract class Client -{ - /** - * Flag that say if the resource have been modified. - * - * @var bool - */ - private $is_modified = true; - - /** - * HTTP Content-Type. - * - * @var string - */ - private $content_type = ''; - - /** - * HTTP encoding. - * - * @var string - */ - private $encoding = ''; - - /** - * HTTP request headers. - * - * @var array - */ - protected $request_headers = array(); - - /** - * HTTP Etag header. - * - * @var string - */ - protected $etag = ''; - - /** - * HTTP Last-Modified header. - * - * @var string - */ - protected $last_modified = ''; - - /** - * Expiration DateTime - * - * @var DateTime - */ - protected $expiration = null; - - /** - * Proxy hostname. - * - * @var string - */ - protected $proxy_hostname = ''; - - /** - * Proxy port. - * - * @var int - */ - protected $proxy_port = 3128; - - /** - * Proxy username. - * - * @var string - */ - protected $proxy_username = ''; - - /** - * Proxy password. - * - * @var string - */ - protected $proxy_password = ''; - - /** - * Basic auth username. - * - * @var string - */ - protected $username = ''; - - /** - * Basic auth password. - * - * @var string - */ - protected $password = ''; - - /** - * Client connection timeout. - * - * @var int - */ - protected $timeout = 10; - - /** - * User-agent. - * - * @var string - */ - protected $user_agent = 'PicoFeed (https://github.com/miniflux/picoFeed)'; - - /** - * Real URL used (can be changed after a HTTP redirect). - * - * @var string - */ - protected $url = ''; - - /** - * Page/Feed content. - * - * @var string - */ - protected $content = ''; - - /** - * Number maximum of HTTP redirections to avoid infinite loops. - * - * @var int - */ - protected $max_redirects = 5; - - /** - * Maximum size of the HTTP body response. - * - * @var int - */ - protected $max_body_size = 2097152; // 2MB - - /** - * HTTP response status code. - * - * @var int - */ - protected $status_code = 0; - - /** - * Enables direct passthrough to requesting client. - * - * @var bool - */ - protected $passthrough = false; - - /** - * Do the HTTP request. - * - * @abstract - * - * @return array - */ - abstract public function doRequest(); - - /** - * Get client instance: curl or stream driver. - * - * @static - * - * @return \PicoFeed\Client\Client - */ - public static function getInstance() - { - if (function_exists('curl_init')) { - return new Curl(); - } elseif (ini_get('allow_url_fopen')) { - return new Stream(); - } - - throw new LogicException('You must have "allow_url_fopen=1" or curl extension installed'); - } - - /** - * Add HTTP Header to the request. - * - * @param array $headers - */ - public function setHeaders($headers) - { - $this->request_headers = $headers; - } - - /** - * Perform the HTTP request. - * - * @param string $url URL - * - * @return Client - */ - public function execute($url = '') - { - if ($url !== '') { - $this->url = $url; - } - - Logger::setMessage(get_called_class().' Fetch URL: '.$this->url); - Logger::setMessage(get_called_class().' Etag provided: '.$this->etag); - Logger::setMessage(get_called_class().' Last-Modified provided: '.$this->last_modified); - - $response = $this->doRequest(); - - $this->status_code = $response['status']; - $this->handleNotModifiedResponse($response); - $this->handleErrorResponse($response); - $this->handleNormalResponse($response); - - $this->expiration = $this->parseExpiration($response['headers']); - Logger::setMessage(get_called_class().' Expiration: '.$this->expiration->format(DATE_ISO8601)); - - return $this; - } - - /** - * Handle not modified response. - * - * @param array $response Client response - */ - protected function handleNotModifiedResponse(array $response) - { - if ($response['status'] == 304) { - $this->is_modified = false; - } elseif ($response['status'] == 200) { - $this->is_modified = $this->hasBeenModified($response, $this->etag, $this->last_modified); - $this->etag = $this->getHeader($response, 'ETag'); - $this->last_modified = $this->getHeader($response, 'Last-Modified'); - } - - if ($this->is_modified === false) { - Logger::setMessage(get_called_class().' Resource not modified'); - } - } - - /** - * Handle Http Error codes - * - * @param array $response Client response - * @throws ForbiddenException - * @throws InvalidUrlException - * @throws UnauthorizedException - */ - protected function handleErrorResponse(array $response) - { - $status = $response['status']; - if ($status == 401) { - throw new UnauthorizedException('Wrong or missing credentials'); - } else if ($status == 403) { - throw new ForbiddenException('Not allowed to access resource'); - } else if ($status == 404) { - throw new InvalidUrlException('Resource not found'); - } - } - - /** - * Handle normal response. - * - * @param array $response Client response - */ - protected function handleNormalResponse(array $response) - { - if ($response['status'] == 200) { - $this->content = $response['body']; - $this->content_type = $this->findContentType($response); - $this->encoding = $this->findCharset(); - } - } - - /** - * Check if a request has been modified according to the parameters. - * - * @param array $response - * @param string $etag - * @param string $lastModified - * - * @return bool - */ - private function hasBeenModified($response, $etag, $lastModified) - { - $headers = array( - 'Etag' => $etag, - 'Last-Modified' => $lastModified, - ); - - // Compare the values for each header that is present - $presentCacheHeaderCount = 0; - foreach ($headers as $key => $value) { - if (isset($response['headers'][$key])) { - if ($response['headers'][$key] !== $value) { - return true; - } - ++$presentCacheHeaderCount; - } - } - - // If at least one header is present and the values match, the response - // was not modified - if ($presentCacheHeaderCount > 0) { - return false; - } - - return true; - } - - /** - * Find content type from response headers. - * - * @param array $response Client response - * - * @return string - */ - public function findContentType(array $response) - { - return strtolower($this->getHeader($response, 'Content-Type')); - } - - /** - * Find charset from response headers. - * - * @return string - */ - public function findCharset() - { - $result = explode('charset=', $this->content_type); - - return isset($result[1]) ? $result[1] : ''; - } - - /** - * Get header value from a client response. - * - * @param array $response Client response - * @param string $header Header name - * - * @return string - */ - public function getHeader(array $response, $header) - { - return isset($response['headers'][$header]) ? $response['headers'][$header] : ''; - } - - /** - * Set the Last-Modified HTTP header. - * - * @param string $last_modified Header value - * - * @return \PicoFeed\Client\Client - */ - public function setLastModified($last_modified) - { - $this->last_modified = $last_modified; - - return $this; - } - - /** - * Get the value of the Last-Modified HTTP header. - * - * @return string - */ - public function getLastModified() - { - return $this->last_modified; - } - - /** - * Set the value of the Etag HTTP header. - * - * @param string $etag Etag HTTP header value - * - * @return \PicoFeed\Client\Client - */ - public function setEtag($etag) - { - $this->etag = $etag; - - return $this; - } - - /** - * Get the Etag HTTP header value. - * - * @return string - */ - public function getEtag() - { - return $this->etag; - } - - /** - * Get the final url value. - * - * @return string - */ - public function getUrl() - { - return $this->url; - } - - /** - * Set the url. - * - * @param $url - * @return string - */ - public function setUrl($url) - { - $this->url = $url; - return $this; - } - - /** - * Get the HTTP response status code. - * - * @return int - */ - public function getStatusCode() - { - return $this->status_code; - } - - /** - * Get the body of the HTTP response. - * - * @return string - */ - public function getContent() - { - return $this->content; - } - - /** - * Get the content type value from HTTP headers. - * - * @return string - */ - public function getContentType() - { - return $this->content_type; - } - - /** - * Get the encoding value from HTTP headers. - * - * @return string - */ - public function getEncoding() - { - return $this->encoding; - } - - /** - * Return true if the remote resource has changed. - * - * @return bool - */ - public function isModified() - { - return $this->is_modified; - } - - /** - * return true if passthrough mode is enabled. - * - * @return bool - */ - public function isPassthroughEnabled() - { - return $this->passthrough; - } - - /** - * Set connection timeout. - * - * @param int $timeout Connection timeout - * - * @return \PicoFeed\Client\Client - */ - public function setTimeout($timeout) - { - $this->timeout = $timeout ?: $this->timeout; - - return $this; - } - - /** - * Set a custom user agent. - * - * @param string $user_agent User Agent - * - * @return \PicoFeed\Client\Client - */ - public function setUserAgent($user_agent) - { - $this->user_agent = $user_agent ?: $this->user_agent; - - return $this; - } - - /** - * Set the maximum number of HTTP redirections. - * - * @param int $max Maximum - * - * @return \PicoFeed\Client\Client - */ - public function setMaxRedirections($max) - { - $this->max_redirects = $max ?: $this->max_redirects; - - return $this; - } - - /** - * Set the maximum size of the HTTP body. - * - * @param int $max Maximum - * - * @return \PicoFeed\Client\Client - */ - public function setMaxBodySize($max) - { - $this->max_body_size = $max ?: $this->max_body_size; - - return $this; - } - - /** - * Set the proxy hostname. - * - * @param string $hostname Proxy hostname - * - * @return \PicoFeed\Client\Client - */ - public function setProxyHostname($hostname) - { - $this->proxy_hostname = $hostname ?: $this->proxy_hostname; - - return $this; - } - - /** - * Set the proxy port. - * - * @param int $port Proxy port - * - * @return \PicoFeed\Client\Client - */ - public function setProxyPort($port) - { - $this->proxy_port = $port ?: $this->proxy_port; - - return $this; - } - - /** - * Set the proxy username. - * - * @param string $username Proxy username - * - * @return \PicoFeed\Client\Client - */ - public function setProxyUsername($username) - { - $this->proxy_username = $username ?: $this->proxy_username; - - return $this; - } - - /** - * Set the proxy password. - * - * @param string $password Password - * - * @return \PicoFeed\Client\Client - */ - public function setProxyPassword($password) - { - $this->proxy_password = $password ?: $this->proxy_password; - - return $this; - } - - /** - * Set the username. - * - * @param string $username Basic Auth username - * - * @return \PicoFeed\Client\Client - */ - public function setUsername($username) - { - $this->username = $username ?: $this->username; - - return $this; - } - - /** - * Set the password. - * - * @param string $password Basic Auth Password - * - * @return \PicoFeed\Client\Client - */ - public function setPassword($password) - { - $this->password = $password ?: $this->password; - - return $this; - } - - /** - * Enable the passthrough mode. - * - * @return \PicoFeed\Client\Client - */ - public function enablePassthroughMode() - { - $this->passthrough = true; - - return $this; - } - - /** - * Disable the passthrough mode. - * - * @return \PicoFeed\Client\Client - */ - public function disablePassthroughMode() - { - $this->passthrough = false; - - return $this; - } - - /** - * Set config object. - * - * @param \PicoFeed\Config\Config $config Config instance - * - * @return \PicoFeed\Client\Client - */ - public function setConfig(Config $config) - { - if ($config !== null) { - $this->setTimeout($config->getClientTimeout()); - $this->setUserAgent($config->getClientUserAgent()); - $this->setMaxRedirections($config->getMaxRedirections()); - $this->setMaxBodySize($config->getMaxBodySize()); - $this->setProxyHostname($config->getProxyHostname()); - $this->setProxyPort($config->getProxyPort()); - $this->setProxyUsername($config->getProxyUsername()); - $this->setProxyPassword($config->getProxyPassword()); - } - - return $this; - } - - /** - * Return true if the HTTP status code is a redirection - * - * @access protected - * @param integer $code - * @return boolean - */ - public function isRedirection($code) - { - return $code == 301 || $code == 302 || $code == 303 || $code == 307; - } - - public function parseExpiration(HttpHeaders $headers) - { - try { - - if (isset($headers['Cache-Control'])) { - if (preg_match('/s-maxage=(\d+)/', $headers['Cache-Control'], $matches)) { - return new DateTime('+' . $matches[1] . ' seconds'); - } else if (preg_match('/max-age=(\d+)/', $headers['Cache-Control'], $matches)) { - return new DateTime('+' . $matches[1] . ' seconds'); - } - } - - if (! empty($headers['Expires'])) { - return new DateTime($headers['Expires']); - } - } catch (Exception $e) { - Logger::setMessage('Unable to parse expiration date: '.$e->getMessage()); - } - - return new DateTime(); - } - - /** - * Get expiration date time from "Expires" or "Cache-Control" headers - * - * @return DateTime - */ - public function getExpiration() - { - return $this->expiration ?: new DateTime(); - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Client/ClientException.php b/vendor/miniflux/picofeed/lib/PicoFeed/Client/ClientException.php deleted file mode 100644 index b3a95c9f..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Client/ClientException.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php - -namespace PicoFeed\Client; - -use PicoFeed\PicoFeedException; - -/** - * ClientException Exception. - * - * @author Frederic Guillot - */ -abstract class ClientException extends PicoFeedException -{ -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Client/Curl.php b/vendor/miniflux/picofeed/lib/PicoFeed/Client/Curl.php deleted file mode 100644 index f4a65782..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Client/Curl.php +++ /dev/null @@ -1,402 +0,0 @@ -<?php - -namespace PicoFeed\Client; - -use PicoFeed\Logging\Logger; - -/** - * cURL HTTP client. - * - * @author Frederic Guillot - */ -class Curl extends Client -{ - protected $nbRedirects = 0; - - /** - * HTTP response body. - * - * @var string - */ - private $body = ''; - - /** - * Body size. - * - * @var int - */ - private $body_length = 0; - - /** - * HTTP response headers. - * - * @var array - */ - private $response_headers = array(); - - /** - * Counter on the number of header received. - * - * @var int - */ - private $response_headers_count = 0; - - /** - * cURL callback to read the HTTP body. - * - * If the function return -1, curl stop to read the HTTP response - * - * @param resource $ch cURL handler - * @param string $buffer Chunk of data - * - * @return int Length of the buffer - */ - public function readBody($ch, $buffer) - { - $length = strlen($buffer); - $this->body_length += $length; - - if ($this->body_length > $this->max_body_size) { - return -1; - } - - $this->body .= $buffer; - - return $length; - } - - /** - * cURL callback to read HTTP headers. - * - * @param resource $ch cURL handler - * @param string $buffer Header line - * - * @return int Length of the buffer - */ - public function readHeaders($ch, $buffer) - { - $length = strlen($buffer); - - if ($buffer === "\r\n" || $buffer === "\n") { - ++$this->response_headers_count; - } else { - if (!isset($this->response_headers[$this->response_headers_count])) { - $this->response_headers[$this->response_headers_count] = ''; - } - - $this->response_headers[$this->response_headers_count] .= $buffer; - } - - return $length; - } - - /** - * cURL callback to passthrough the HTTP body to the client. - * - * If the function return -1, curl stop to read the HTTP response - * - * @param resource $ch cURL handler - * @param string $buffer Chunk of data - * - * @return int Length of the buffer - */ - public function passthroughBody($ch, $buffer) - { - // do it only at the beginning of a transmission - if ($this->body_length === 0) { - list($status, $headers) = HttpHeaders::parse(explode("\n", $this->response_headers[$this->response_headers_count - 1])); - - if ($this->isRedirection($status)) { - return $this->handleRedirection($headers['Location']); - } - - // Do not work with PHP-FPM - if (strpos(PHP_SAPI, 'cgi') !== false) { - header(':', true, $status); - } - - if (isset($headers['Content-Type'])) { - header('Content-Type:' .$headers['Content-Type']); - } - } - - $length = strlen($buffer); - $this->body_length += $length; - - echo $buffer; - - return $length; - } - - /** - * Prepare HTTP headers. - * - * @return string[] - */ - private function prepareHeaders() - { - $headers = array( - 'Connection: close', - ); - - if ($this->etag) { - $headers[] = 'If-None-Match: '.$this->etag; - $headers[] = 'A-IM: feed'; - } - - if ($this->last_modified) { - $headers[] = 'If-Modified-Since: '.$this->last_modified; - } - - $headers = array_merge($headers, $this->request_headers); - - return $headers; - } - - /** - * Prepare curl proxy context. - * - * @param resource $ch - * - * @return resource $ch - */ - private function prepareProxyContext($ch) - { - if ($this->proxy_hostname) { - Logger::setMessage(get_called_class().' Proxy: '.$this->proxy_hostname.':'.$this->proxy_port); - - curl_setopt($ch, CURLOPT_PROXYPORT, $this->proxy_port); - curl_setopt($ch, CURLOPT_PROXYTYPE, 'HTTP'); - curl_setopt($ch, CURLOPT_PROXY, $this->proxy_hostname); - - if ($this->proxy_username) { - Logger::setMessage(get_called_class().' Proxy credentials: Yes'); - curl_setopt($ch, CURLOPT_PROXYUSERPWD, $this->proxy_username.':'.$this->proxy_password); - } else { - Logger::setMessage(get_called_class().' Proxy credentials: No'); - } - } - - return $ch; - } - - /** - * Prepare curl auth context. - * - * @param resource $ch - * - * @return resource $ch - */ - private function prepareAuthContext($ch) - { - if ($this->username && $this->password) { - curl_setopt($ch, CURLOPT_USERPWD, $this->username.':'.$this->password); - } - - return $ch; - } - - /** - * Set write/header functions. - * - * @param resource $ch - * - * @return resource $ch - */ - private function prepareDownloadMode($ch) - { - $this->body = ''; - $this->response_headers = array(); - $this->response_headers_count = 0; - $write_function = 'readBody'; - $header_function = 'readHeaders'; - - if ($this->isPassthroughEnabled()) { - $write_function = 'passthroughBody'; - } - - curl_setopt($ch, CURLOPT_WRITEFUNCTION, array($this, $write_function)); - curl_setopt($ch, CURLOPT_HEADERFUNCTION, array($this, $header_function)); - - return $ch; - } - - /** - * Prepare curl context. - * - * @return resource - */ - private function prepareContext() - { - $ch = curl_init(); - - curl_setopt($ch, CURLOPT_URL, $this->url); - curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); - curl_setopt($ch, CURLOPT_TIMEOUT, $this->timeout); - curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->timeout); - curl_setopt($ch, CURLOPT_USERAGENT, $this->user_agent); - curl_setopt($ch, CURLOPT_HTTPHEADER, $this->prepareHeaders()); - curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); - curl_setopt($ch, CURLOPT_ENCODING, ''); - curl_setopt($ch, CURLOPT_COOKIEJAR, 'php://memory'); - curl_setopt($ch, CURLOPT_COOKIEFILE, 'php://memory'); - - // Disable SSLv3 by enforcing TLSv1.x for curl >= 7.34.0 and < 7.39.0. - // Versions prior to 7.34 and at least when compiled against openssl - // interpret this parameter as "limit to TLSv1.0" which fails for sites - // which enforce TLS 1.1+. - // Starting with curl 7.39.0 SSLv3 is disabled by default. - $version = curl_version(); - if ($version['version_number'] >= 467456 && $version['version_number'] < 468736) { - curl_setopt($ch, CURLOPT_SSLVERSION, 1); - } - - $ch = $this->prepareDownloadMode($ch); - $ch = $this->prepareProxyContext($ch); - $ch = $this->prepareAuthContext($ch); - - return $ch; - } - - /** - * Execute curl context. - */ - private function executeContext() - { - $ch = $this->prepareContext(); - curl_exec($ch); - - Logger::setMessage(get_called_class().' cURL total time: '.curl_getinfo($ch, CURLINFO_TOTAL_TIME)); - Logger::setMessage(get_called_class().' cURL dns lookup time: '.curl_getinfo($ch, CURLINFO_NAMELOOKUP_TIME)); - Logger::setMessage(get_called_class().' cURL connect time: '.curl_getinfo($ch, CURLINFO_CONNECT_TIME)); - Logger::setMessage(get_called_class().' cURL speed download: '.curl_getinfo($ch, CURLINFO_SPEED_DOWNLOAD)); - Logger::setMessage(get_called_class().' cURL effective url: '.curl_getinfo($ch, CURLINFO_EFFECTIVE_URL)); - - $curl_errno = curl_errno($ch); - - if ($curl_errno) { - Logger::setMessage(get_called_class().' cURL error: '.curl_error($ch)); - curl_close($ch); - - $this->handleError($curl_errno); - } - - // Update the url if there where redirects - $this->url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); - - curl_close($ch); - } - - /** - * Do the HTTP request. - * - * @return array HTTP response ['body' => ..., 'status' => ..., 'headers' => ...] - */ - public function doRequest() - { - $this->executeContext(); - - list($status, $headers) = HttpHeaders::parse(explode("\n", $this->response_headers[$this->response_headers_count - 1])); - - if ($this->isRedirection($status)) { - if (empty($headers['Location'])) { - $status = 200; - } else { - return $this->handleRedirection($headers['Location']); - } - } - - return array( - 'status' => $status, - 'body' => $this->body, - 'headers' => $headers, - ); - } - - /** - * Handle HTTP redirects - * - * @param string $location Redirected URL - * @return array - * @throws MaxRedirectException - */ - private function handleRedirection($location) - { - $result = array(); - $this->url = Url::resolve($location, $this->url); - $this->body = ''; - $this->body_length = 0; - $this->response_headers = array(); - $this->response_headers_count = 0; - - while (true) { - $this->nbRedirects++; - - if ($this->nbRedirects >= $this->max_redirects) { - throw new MaxRedirectException('Maximum number of redirections reached'); - } - - $result = $this->doRequest(); - - if ($this->isRedirection($result['status'])) { - $this->url = Url::resolve($result['headers']['Location'], $this->url); - $this->body = ''; - $this->body_length = 0; - $this->response_headers = array(); - $this->response_headers_count = 0; - } else { - break; - } - } - - return $result; - } - - /** - * Handle cURL errors (throw individual exceptions). - * - * We don't use constants because they are not necessary always available - * (depends of the version of libcurl linked to php) - * - * @see http://curl.haxx.se/libcurl/c/libcurl-errors.html - * - * @param int $errno cURL error code - * @throws InvalidCertificateException - * @throws InvalidUrlException - * @throws MaxRedirectException - * @throws MaxSizeException - * @throws TimeoutException - */ - private function handleError($errno) - { - switch ($errno) { - case 78: // CURLE_REMOTE_FILE_NOT_FOUND - throw new InvalidUrlException('Resource not found', $errno); - case 6: // CURLE_COULDNT_RESOLVE_HOST - throw new InvalidUrlException('Unable to resolve hostname', $errno); - case 7: // CURLE_COULDNT_CONNECT - throw new InvalidUrlException('Unable to connect to the remote host', $errno); - case 23: // CURLE_WRITE_ERROR - throw new MaxSizeException('Maximum response size exceeded', $errno); - case 28: // CURLE_OPERATION_TIMEDOUT - throw new TimeoutException('Operation timeout', $errno); - case 35: // CURLE_SSL_CONNECT_ERROR - case 51: // CURLE_PEER_FAILED_VERIFICATION - case 58: // CURLE_SSL_CERTPROBLEM - case 60: // CURLE_SSL_CACERT - case 59: // CURLE_SSL_CIPHER - case 64: // CURLE_USE_SSL_FAILED - case 66: // CURLE_SSL_ENGINE_INITFAILED - case 77: // CURLE_SSL_CACERT_BADFILE - case 83: // CURLE_SSL_ISSUER_ERROR - $msg = 'Invalid SSL certificate caused by CURL error number ' . $errno; - throw new InvalidCertificateException($msg, $errno); - case 47: // CURLE_TOO_MANY_REDIRECTS - throw new MaxRedirectException('Maximum number of redirections reached', $errno); - case 63: // CURLE_FILESIZE_EXCEEDED - throw new MaxSizeException('Maximum response size exceeded', $errno); - default: - throw new InvalidUrlException('Unable to fetch the URL', $errno); - } - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Client/ForbiddenException.php b/vendor/miniflux/picofeed/lib/PicoFeed/Client/ForbiddenException.php deleted file mode 100644 index c226e95a..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Client/ForbiddenException.php +++ /dev/null @@ -1,10 +0,0 @@ -<?php - -namespace PicoFeed\Client; - -/** - * @author Bernhard Posselt - */ -class ForbiddenException extends ClientException -{ -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Client/HttpHeaders.php b/vendor/miniflux/picofeed/lib/PicoFeed/Client/HttpHeaders.php deleted file mode 100644 index 34b81399..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Client/HttpHeaders.php +++ /dev/null @@ -1,79 +0,0 @@ -<?php - -namespace PicoFeed\Client; - -use ArrayAccess; -use PicoFeed\Logging\Logger; - -/** - * Class to handle HTTP headers case insensitivity. - * - * @author Bernhard Posselt - * @author Frederic Guillot - */ -class HttpHeaders implements ArrayAccess -{ - private $headers = array(); - - public function __construct(array $headers) - { - foreach ($headers as $key => $value) { - $this->headers[strtolower($key)] = $value; - } - } - - public function offsetGet($offset) - { - return $this->offsetExists($offset) ? $this->headers[strtolower($offset)] : ''; - } - - public function offsetSet($offset, $value) - { - $this->headers[strtolower($offset)] = $value; - } - - public function offsetExists($offset) - { - return isset($this->headers[strtolower($offset)]); - } - - public function offsetUnset($offset) - { - unset($this->headers[strtolower($offset)]); - } - - /** - * Parse HTTP headers. - * - * @static - * - * @param array $lines List of headers - * - * @return array - */ - public static function parse(array $lines) - { - $status = 0; - $headers = array(); - - foreach ($lines as $line) { - if (strpos($line, 'HTTP/1') === 0) { - $headers = array(); - $status = (int) substr($line, 9, 3); - } elseif (strpos($line, ': ') !== false) { - list($name, $value) = explode(': ', $line); - if ($value) { - $headers[trim($name)] = trim($value); - } - } - } - - Logger::setMessage(get_called_class().' HTTP status code: '.$status); - - foreach ($headers as $name => $value) { - Logger::setMessage(get_called_class().' HTTP header: '.$name.' => '.$value); - } - - return array($status, new self($headers)); - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Client/InvalidCertificateException.php b/vendor/miniflux/picofeed/lib/PicoFeed/Client/InvalidCertificateException.php deleted file mode 100644 index 8d25d7e4..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Client/InvalidCertificateException.php +++ /dev/null @@ -1,12 +0,0 @@ -<?php - -namespace PicoFeed\Client; - -/** - * InvalidCertificateException Exception. - * - * @author Frederic Guillot - */ -class InvalidCertificateException extends ClientException -{ -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Client/InvalidUrlException.php b/vendor/miniflux/picofeed/lib/PicoFeed/Client/InvalidUrlException.php deleted file mode 100644 index 15534d98..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Client/InvalidUrlException.php +++ /dev/null @@ -1,12 +0,0 @@ -<?php - -namespace PicoFeed\Client; - -/** - * InvalidUrlException Exception. - * - * @author Frederic Guillot - */ -class InvalidUrlException extends ClientException -{ -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Client/MaxRedirectException.php b/vendor/miniflux/picofeed/lib/PicoFeed/Client/MaxRedirectException.php deleted file mode 100644 index 0a221af6..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Client/MaxRedirectException.php +++ /dev/null @@ -1,12 +0,0 @@ -<?php - -namespace PicoFeed\Client; - -/** - * MaxRedirectException Exception. - * - * @author Frederic Guillot - */ -class MaxRedirectException extends ClientException -{ -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Client/MaxSizeException.php b/vendor/miniflux/picofeed/lib/PicoFeed/Client/MaxSizeException.php deleted file mode 100644 index 201b22a6..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Client/MaxSizeException.php +++ /dev/null @@ -1,12 +0,0 @@ -<?php - -namespace PicoFeed\Client; - -/** - * MaxSizeException Exception. - * - * @author Frederic Guillot - */ -class MaxSizeException extends ClientException -{ -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Client/Stream.php b/vendor/miniflux/picofeed/lib/PicoFeed/Client/Stream.php deleted file mode 100644 index 2e91d472..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Client/Stream.php +++ /dev/null @@ -1,205 +0,0 @@ -<?php - -namespace PicoFeed\Client; - -use PicoFeed\Logging\Logger; - -/** - * Stream context HTTP client. - * - * @author Frederic Guillot - */ -class Stream extends Client -{ - /** - * Prepare HTTP headers. - * - * @return string[] - */ - private function prepareHeaders() - { - $headers = array( - 'Connection: close', - 'User-Agent: '.$this->user_agent, - ); - - // disable compression in passthrough mode. It could result in double - // compressed content which isn't decodeable by browsers - if (function_exists('gzdecode') && !$this->isPassthroughEnabled()) { - $headers[] = 'Accept-Encoding: gzip'; - } - - if ($this->etag) { - $headers[] = 'If-None-Match: '.$this->etag; - $headers[] = 'A-IM: feed'; - } - - if ($this->last_modified) { - $headers[] = 'If-Modified-Since: '.$this->last_modified; - } - - if ($this->proxy_username) { - $headers[] = 'Proxy-Authorization: Basic '.base64_encode($this->proxy_username.':'.$this->proxy_password); - } - - if ($this->username && $this->password) { - $headers[] = 'Authorization: Basic '.base64_encode($this->username.':'.$this->password); - } - - $headers = array_merge($headers, $this->request_headers); - - return $headers; - } - - /** - * Construct the final URL from location headers. - * - * @param array $headers List of HTTP response header - */ - private function setEffectiveUrl($headers) - { - foreach ($headers as $header) { - if (stripos($header, 'Location') === 0) { - list(, $value) = explode(': ', $header); - - $this->url = Url::resolve($value, $this->url); - } - } - } - - /** - * Prepare stream context. - * - * @return array - */ - private function prepareContext() - { - $context = array( - 'http' => array( - 'method' => 'GET', - 'protocol_version' => 1.1, - 'timeout' => $this->timeout, - 'max_redirects' => $this->max_redirects, - ), - ); - - if ($this->proxy_hostname) { - Logger::setMessage(get_called_class().' Proxy: '.$this->proxy_hostname.':'.$this->proxy_port); - - $context['http']['proxy'] = 'tcp://'.$this->proxy_hostname.':'.$this->proxy_port; - $context['http']['request_fulluri'] = true; - - if ($this->proxy_username) { - Logger::setMessage(get_called_class().' Proxy credentials: Yes'); - } else { - Logger::setMessage(get_called_class().' Proxy credentials: No'); - } - } - - $context['http']['header'] = implode("\r\n", $this->prepareHeaders()); - - return $context; - } - - /** - * Do the HTTP request. - * - * @return array HTTP response ['body' => ..., 'status' => ..., 'headers' => ...] - * @throws InvalidUrlException - * @throws MaxSizeException - * @throws TimeoutException - */ - public function doRequest() - { - $body = ''; - - // Create context - $context = stream_context_create($this->prepareContext()); - - // Make HTTP request - $stream = @fopen($this->url, 'r', false, $context); - if (!is_resource($stream)) { - throw new InvalidUrlException('Unable to establish a connection'); - } - - // Get HTTP headers response - $metadata = stream_get_meta_data($stream); - list($status, $headers) = HttpHeaders::parse($metadata['wrapper_data']); - - if ($this->isPassthroughEnabled()) { - header(':', true, $status); - - if (isset($headers['Content-Type'])) { - header('Content-Type: '.$headers['Content-Type']); - } - - fpassthru($stream); - } else { - // Get the entire body until the max size - $body = stream_get_contents($stream, $this->max_body_size + 1); - - // If the body size is too large abort everything - if (strlen($body) > $this->max_body_size) { - throw new MaxSizeException('Content size too large'); - } - - if ($metadata['timed_out']) { - throw new TimeoutException('Operation timeout'); - } - } - - fclose($stream); - - $this->setEffectiveUrl($metadata['wrapper_data']); - - return array( - 'status' => $status, - 'body' => $this->decodeBody($body, $headers), - 'headers' => $headers, - ); - } - - /** - * Decode body response according to the HTTP headers. - * - * @param string $body Raw body - * @param HttpHeaders $headers HTTP headers - * - * @return string - */ - public function decodeBody($body, HttpHeaders $headers) - { - if (isset($headers['Transfer-Encoding']) && $headers['Transfer-Encoding'] === 'chunked') { - $body = $this->decodeChunked($body); - } - - if (isset($headers['Content-Encoding']) && $headers['Content-Encoding'] === 'gzip') { - $body = gzdecode($body); - } - - return $body; - } - - /** - * Decode a chunked body. - * - * @param string $str Raw body - * - * @return string Decoded body - */ - public function decodeChunked($str) - { - for ($result = ''; !empty($str); $str = trim($str)) { - - // Get the chunk length - $pos = strpos($str, "\r\n"); - $len = hexdec(substr($str, 0, $pos)); - - // Append the chunk to the result - $result .= substr($str, $pos + 2, $len); - $str = substr($str, $pos + 2 + $len); - } - - return $result; - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Client/TimeoutException.php b/vendor/miniflux/picofeed/lib/PicoFeed/Client/TimeoutException.php deleted file mode 100644 index da98da12..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Client/TimeoutException.php +++ /dev/null @@ -1,12 +0,0 @@ -<?php - -namespace PicoFeed\Client; - -/** - * TimeoutException Exception. - * - * @author Frederic Guillot - */ -class TimeoutException extends ClientException -{ -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Client/UnauthorizedException.php b/vendor/miniflux/picofeed/lib/PicoFeed/Client/UnauthorizedException.php deleted file mode 100644 index 81898b99..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Client/UnauthorizedException.php +++ /dev/null @@ -1,10 +0,0 @@ -<?php - -namespace PicoFeed\Client; - -/** - * @author Bernhard Posselt - */ -class UnauthorizedException extends ClientException -{ -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Client/Url.php b/vendor/miniflux/picofeed/lib/PicoFeed/Client/Url.php deleted file mode 100644 index a9337988..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Client/Url.php +++ /dev/null @@ -1,290 +0,0 @@ -<?php - -namespace PicoFeed\Client; - -/** - * URL class. - * - * @author Frederic Guillot - */ -class Url -{ - /** - * URL. - * - * @var string - */ - private $url = ''; - - /** - * URL components. - * - * @var array - */ - private $components = array(); - - /** - * Constructor. - * - * @param string $url URL - */ - public function __construct($url) - { - $this->url = $url; - $this->components = parse_url($url) ?: array(); - - // Issue with PHP < 5.4.7 and protocol relative url - if (version_compare(PHP_VERSION, '5.4.7', '<') && $this->isProtocolRelative()) { - $pos = strpos($this->components['path'], '/', 2); - - if ($pos === false) { - $pos = strlen($this->components['path']); - } - - $this->components['host'] = substr($this->components['path'], 2, $pos - 2); - $this->components['path'] = substr($this->components['path'], $pos); - } - } - - /** - * Shortcut method to get an absolute url from relative url. - * - * @static - * - * @param mixed $item_url Unknown url (can be relative or not) - * @param mixed $website_url Website url - * - * @return string - */ - public static function resolve($item_url, $website_url) - { - $link = is_string($item_url) ? new self($item_url) : $item_url; - $website = is_string($website_url) ? new self($website_url) : $website_url; - - if ($link->isRelativeUrl()) { - if ($link->isRelativePath()) { - return $link->getAbsoluteUrl($website->getBaseUrl($website->getBasePath())); - } - - return $link->getAbsoluteUrl($website->getBaseUrl()); - } elseif ($link->isProtocolRelative()) { - $link->setScheme($website->getScheme()); - } - - return $link->getAbsoluteUrl(); - } - - /** - * Shortcut method to get a base url. - * - * @static - * - * @param string $url - * - * @return string - */ - public static function base($url) - { - $link = new self($url); - - return $link->getBaseUrl(); - } - - /** - * Get the base URL. - * - * @param string $suffix Add a suffix to the url - * - * @return string - */ - public function getBaseUrl($suffix = '') - { - return $this->hasHost() ? $this->getScheme('://').$this->getHost().$this->getPort(':').$suffix : ''; - } - - /** - * Get the absolute URL. - * - * @param string $base_url Use this url as base url - * - * @return string - */ - public function getAbsoluteUrl($base_url = '') - { - if ($base_url) { - $base = new self($base_url); - $url = $base->getAbsoluteUrl().substr($this->getFullPath(), 1); - } else { - $url = $this->hasHost() ? $this->getBaseUrl().$this->getFullPath() : ''; - } - - return $url; - } - - /** - * Return true if the url is relative. - * - * @return bool - */ - public function isRelativeUrl() - { - return !$this->hasScheme() && !$this->isProtocolRelative(); - } - - /** - * Return true if the path is relative. - * - * @return bool - */ - public function isRelativePath() - { - $path = $this->getPath(); - - return empty($path) || $path{0} - !== '/'; - } - - /** - * Filters the path of a URI. - * - * Imported from Guzzle library: https://github.com/guzzle/psr7/blob/master/src/Uri.php#L568-L582 - * - * @param $path - * - * @return string - */ - public function filterPath($path, $charUnreserved = 'a-zA-Z0-9_\-\.~', $charSubDelims = '!\$&\'\(\)\*\+,;=') - { - return preg_replace_callback( - '/(?:[^'.$charUnreserved.$charSubDelims.':@\/%]+|%(?![A-Fa-f0-9]{2}))/', - function (array $matches) { return rawurlencode($matches[0]); }, - $path - ); - } - - /** - * Get the path. - * - * @return string - */ - public function getPath() - { - return $this->filterPath(empty($this->components['path']) ? '' : $this->components['path']); - } - - /** - * Get the base path. - * - * @return string - */ - public function getBasePath() - { - $current_path = $this->getPath(); - - $path = $this->isRelativePath() ? '/' : ''; - $path .= substr($current_path, -1) === '/' ? $current_path : dirname($current_path); - - return preg_replace('/\\\\\/|\/\//', '/', $path.'/'); - } - - /** - * Get the full path (path + querystring + fragment). - * - * @return string - */ - public function getFullPath() - { - $path = $this->isRelativePath() ? '/' : ''; - $path .= $this->getPath(); - $path .= empty($this->components['query']) ? '' : '?'.$this->components['query']; - $path .= empty($this->components['fragment']) ? '' : '#'.$this->components['fragment']; - - return $path; - } - - /** - * Get the hostname. - * - * @return string - */ - public function getHost() - { - return empty($this->components['host']) ? '' : $this->components['host']; - } - - /** - * Return true if the url has a hostname. - * - * @return bool - */ - public function hasHost() - { - return !empty($this->components['host']); - } - - /** - * Get the scheme. - * - * @param string $suffix Suffix to add when there is a scheme - * - * @return string - */ - public function getScheme($suffix = '') - { - return ($this->hasScheme() ? $this->components['scheme'] : 'http').$suffix; - } - - /** - * Set the scheme. - * - * @param string $scheme Set a scheme - * - * @return string - */ - public function setScheme($scheme) - { - $this->components['scheme'] = $scheme; - } - - /** - * Return true if the url has a scheme. - * - * @return bool - */ - public function hasScheme() - { - return !empty($this->components['scheme']); - } - - /** - * Get the port. - * - * @param string $prefix Prefix to add when there is a port - * - * @return string - */ - public function getPort($prefix = '') - { - return $this->hasPort() ? $prefix.$this->components['port'] : ''; - } - - /** - * Return true if the url has a port. - * - * @return bool - */ - public function hasPort() - { - return !empty($this->components['port']); - } - - /** - * Return true if the url is protocol relative (start with //). - * - * @return bool - */ - public function isProtocolRelative() - { - return strpos($this->url, '//') === 0; - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Config/Config.php b/vendor/miniflux/picofeed/lib/PicoFeed/Config/Config.php deleted file mode 100644 index 127968c0..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Config/Config.php +++ /dev/null @@ -1,96 +0,0 @@ -<?php - -namespace PicoFeed\Config; - -/** - * Config class. - * - * @author Frederic Guillot - * - * @method \PicoFeed\Config\Config setClientTimeout(integer $value) - * @method \PicoFeed\Config\Config setClientUserAgent(string $value) - * @method \PicoFeed\Config\Config setMaxRedirections(integer $value) - * @method \PicoFeed\Config\Config setMaxBodySize(integer $value) - * @method \PicoFeed\Config\Config setProxyHostname(string $value) - * @method \PicoFeed\Config\Config setProxyPort(integer $value) - * @method \PicoFeed\Config\Config setProxyUsername(string $value) - * @method \PicoFeed\Config\Config setProxyPassword(string $value) - * @method \PicoFeed\Config\Config setGrabberRulesFolder(string $value) - * @method \PicoFeed\Config\Config setGrabberTimeout(integer $value) - * @method \PicoFeed\Config\Config setGrabberUserAgent(string $value) - * @method \PicoFeed\Config\Config setParserHashAlgo(string $value) - * @method \PicoFeed\Config\Config setContentFiltering(boolean $value) - * @method \PicoFeed\Config\Config setTimezone(string $value) - * @method \PicoFeed\Config\Config setFilterIframeWhitelist(array $value) - * @method \PicoFeed\Config\Config setFilterIntegerAttributes(array $value) - * @method \PicoFeed\Config\Config setFilterAttributeOverrides(array $value) - * @method \PicoFeed\Config\Config setFilterRequiredAttributes(array $value) - * @method \PicoFeed\Config\Config setFilterMediaBlacklist(array $value) - * @method \PicoFeed\Config\Config setFilterMediaAttributes(array $value) - * @method \PicoFeed\Config\Config setFilterSchemeWhitelist(array $value) - * @method \PicoFeed\Config\Config setFilterWhitelistedTags(array $value) - * @method \PicoFeed\Config\Config setFilterBlacklistedTags(array $value) - * @method \PicoFeed\Config\Config setFilterImageProxyUrl($value) - * @method \PicoFeed\Config\Config setFilterImageProxyCallback($closure) - * @method \PicoFeed\Config\Config setFilterImageProxyProtocol($value) - * @method integer getClientTimeout() - * @method string getClientUserAgent() - * @method integer getMaxRedirections() - * @method integer getMaxBodySize() - * @method string getProxyHostname() - * @method integer getProxyPort() - * @method string getProxyUsername() - * @method string getProxyPassword() - * @method string getGrabberRulesFolder() - * @method integer getGrabberTimeout() - * @method string getGrabberUserAgent() - * @method string getParserHashAlgo() - * @method boolean getContentFiltering(bool $default_value) - * @method string getTimezone() - * @method array getFilterIframeWhitelist(array $default_value) - * @method array getFilterIntegerAttributes(array $default_value) - * @method array getFilterAttributeOverrides(array $default_value) - * @method array getFilterRequiredAttributes(array $default_value) - * @method array getFilterMediaBlacklist(array $default_value) - * @method array getFilterMediaAttributes(array $default_value) - * @method array getFilterSchemeWhitelist(array $default_value) - * @method array getFilterWhitelistedTags(array $default_value) - * @method array getFilterBlacklistedTags(array $default_value) - * @method string getFilterImageProxyUrl() - * @method \Closure getFilterImageProxyCallback() - * @method string getFilterImageProxyProtocol() - */ -class Config -{ - /** - * Contains all parameters. - * - * @var array - */ - private $container = array(); - - /** - * Magic method to have any kind of setters or getters. - * - * @param string $name Getter/Setter name - * @param array $arguments Method arguments - * - * @return mixed - */ - public function __call($name, array $arguments) - { - $name = strtolower($name); - $prefix = substr($name, 0, 3); - $parameter = substr($name, 3); - - if ($prefix === 'set' && isset($arguments[0])) { - $this->container[$parameter] = $arguments[0]; - - return $this; - } elseif ($prefix === 'get') { - $default_value = isset($arguments[0]) ? $arguments[0] : null; - - return isset($this->container[$parameter]) ? $this->container[$parameter] : $default_value; - } - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Encoding/Encoding.php b/vendor/miniflux/picofeed/lib/PicoFeed/Encoding/Encoding.php deleted file mode 100644 index fa0917e8..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Encoding/Encoding.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php - -namespace PicoFeed\Encoding; - -/** - * Encoding class. - */ -class Encoding -{ - public static function convert($input, $encoding) - { - if ($encoding === 'utf-8' || $encoding === '') { - return $input; - } - - // suppress all notices since it isn't possible to silence only the - // notice "Wrong charset, conversion from $in_encoding to $out_encoding is not allowed" - set_error_handler(function () {}, E_NOTICE); - - // convert input to utf-8 and strip invalid characters - $value = iconv($encoding, 'UTF-8//IGNORE', $input); - - // stop silencing of notices - restore_error_handler(); - - // return input if something went wrong, maybe it's usable anyway - if ($value === false) { - return $input; - } - - return $value; - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Filter/Attribute.php b/vendor/miniflux/picofeed/lib/PicoFeed/Filter/Attribute.php deleted file mode 100644 index f0021532..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Filter/Attribute.php +++ /dev/null @@ -1,700 +0,0 @@ -<?php - -namespace PicoFeed\Filter; - -use PicoFeed\Client\Url; - -/** - * Attribute Filter class. - * - * @author Frederic Guillot - */ -class Attribute -{ - /** - * Image proxy url. - * - * @var string - */ - private $image_proxy_url = ''; - - /** - * Image proxy callback. - * - * @var \Closure|null - */ - private $image_proxy_callback = null; - - /** - * limits the image proxy usage to this protocol. - * - * @var string - */ - private $image_proxy_limit_protocol = ''; - - /** - * Tags and attribute whitelist. - * - * @var array - */ - private $attribute_whitelist = array( - 'audio' => array('controls', 'src'), - 'video' => array('poster', 'controls', 'height', 'width', 'src'), - 'source' => array('src', 'type'), - 'dt' => array(), - 'dd' => array(), - 'dl' => array(), - 'table' => array(), - 'caption' => array(), - 'tr' => array(), - 'th' => array(), - 'td' => array(), - 'tbody' => array(), - 'thead' => array(), - 'h1' => array(), - 'h2' => array(), - 'h3' => array(), - 'h4' => array(), - 'h5' => array(), - 'h6' => array(), - 'strong' => array(), - 'em' => array(), - 'code' => array(), - 'pre' => array(), - 'blockquote' => array(), - 'p' => array(), - 'ul' => array(), - 'li' => array(), - 'ol' => array(), - 'br' => array(), - 'del' => array(), - 'a' => array('href'), - 'img' => array('src', 'title', 'alt'), - 'figure' => array(), - 'figcaption' => array(), - 'cite' => array(), - 'time' => array('datetime'), - 'abbr' => array('title'), - 'iframe' => array('width', 'height', 'frameborder', 'src', 'allowfullscreen'), - 'q' => array('cite'), - ); - - /** - * Scheme whitelist. - * - * For a complete list go to http://en.wikipedia.org/wiki/URI_scheme - * - * @var array - */ - private $scheme_whitelist = array( - 'bitcoin:', - 'callto:', - 'ed2k://', - 'facetime://', - 'feed:', - 'ftp://', - 'geo:', - 'git://', - 'http://', - 'https://', - 'irc://', - 'irc6://', - 'ircs://', - 'jabber:', - 'magnet:', - 'mailto:', - 'nntp://', - 'rtmp://', - 'sftp://', - 'sip:', - 'sips:', - 'skype:', - 'smb://', - 'sms:', - 'spotify:', - 'ssh:', - 'steam:', - 'svn://', - 'tel:', - ); - - /** - * Iframe source whitelist, everything else is ignored. - * - * @var array - */ - private $iframe_whitelist = array( - 'http://www.youtube.com', - 'https://www.youtube.com', - 'http://player.vimeo.com', - 'https://player.vimeo.com', - 'http://www.dailymotion.com', - 'https://www.dailymotion.com', - 'http://vk.com', - 'https://vk.com', - ); - - /** - * Blacklisted resources. - * - * @var array - */ - private $media_blacklist = array( - 'api.flattr.com', - 'feeds.feedburner.com', - 'share.feedsportal.com', - 'da.feedsportal.com', - 'rc.feedsportal.com', - 'rss.feedsportal.com', - 'res.feedsportal.com', - 'res1.feedsportal.com', - 'res2.feedsportal.com', - 'res3.feedsportal.com', - 'pi.feedsportal.com', - 'rss.nytimes.com', - 'feeds.wordpress.com', - 'stats.wordpress.com', - 'rss.cnn.com', - 'twitter.com/home?status=', - 'twitter.com/share', - 'twitter_icon_large.png', - 'www.facebook.com/sharer.php', - 'facebook_icon_large.png', - 'plus.google.com/share', - 'www.gstatic.com/images/icons/gplus-16.png', - 'www.gstatic.com/images/icons/gplus-32.png', - 'www.gstatic.com/images/icons/gplus-64.png', - ); - - /** - * Attributes used for external resources. - * - * @var array - */ - private $media_attributes = array( - 'src', - 'href', - 'poster', - ); - - /** - * Attributes that must be integer. - * - * @var array - */ - private $integer_attributes = array( - 'width', - 'height', - 'frameborder', - ); - - /** - * Mandatory attributes for specified tags. - * - * @var array - */ - private $required_attributes = array( - 'a' => array('href'), - 'img' => array('src'), - 'iframe' => array('src'), - 'audio' => array('src'), - 'source' => array('src'), - ); - - /** - * Add attributes to specified tags. - * - * @var array - */ - private $add_attributes = array( - 'a' => array('rel' => 'noreferrer', 'target' => '_blank'), - 'video' => array('controls' => 'true'), - ); - - /** - * List of filters to apply. - * - * @var array - */ - private $filters = array( - 'filterAllowedAttribute', - 'filterIntegerAttribute', - 'rewriteAbsoluteUrl', - 'filterIframeAttribute', - 'filterBlacklistResourceAttribute', - 'filterProtocolUrlAttribute', - 'rewriteImageProxyUrl', - 'secureIframeSrc', - 'removeYouTubeAutoplay', - ); - - /** - * Add attributes to specified tags. - * - * @var \PicoFeed\Client\Url - */ - private $website; - - /** - * Constructor. - * - * @param \PicoFeed\Client\Url $website Website url instance - */ - public function __construct(Url $website) - { - $this->website = $website; - } - - /** - * Apply filters to the attributes list. - * - * @param string $tag Tag name - * @param array $attributes Attributes dictionary - * - * @return array Filtered attributes - */ - public function filter($tag, array $attributes) - { - foreach ($attributes as $attribute => &$value) { - foreach ($this->filters as $filter) { - if (!$this->$filter($tag, $attribute, $value)) { - unset($attributes[$attribute]); - break; - } - } - } - - return $attributes; - } - - /** - * Return true if the value is allowed (remove not allowed attributes). - * - * @param string $tag Tag name - * @param string $attribute Attribute name - * @param string $value Attribute value - * - * @return bool - */ - public function filterAllowedAttribute($tag, $attribute, $value) - { - return isset($this->attribute_whitelist[$tag]) && in_array($attribute, $this->attribute_whitelist[$tag]); - } - - /** - * Return true if the value is not integer (remove attributes that should have an integer value). - * - * @param string $tag Tag name - * @param string $attribute Attribute name - * @param string $value Attribute value - * - * @return bool - */ - public function filterIntegerAttribute($tag, $attribute, $value) - { - if (in_array($attribute, $this->integer_attributes)) { - return ctype_digit($value); - } - - return true; - } - - /** - * Return true if the iframe source is allowed (remove not allowed iframe). - * - * @param string $tag Tag name - * @param string $attribute Attribute name - * @param string $value Attribute value - * - * @return bool - */ - public function filterIframeAttribute($tag, $attribute, $value) - { - if ($tag === 'iframe' && $attribute === 'src') { - foreach ($this->iframe_whitelist as $url) { - if (strpos($value, $url) === 0) { - return true; - } - } - - return false; - } - - return true; - } - - /** - * Return true if the resource is not blacklisted (remove blacklisted resource attributes). - * - * @param string $tag Tag name - * @param string $attribute Attribute name - * @param string $value Attribute value - * - * @return bool - */ - public function filterBlacklistResourceAttribute($tag, $attribute, $value) - { - if ($this->isResource($attribute) && $this->isBlacklistedMedia($value)) { - return false; - } - - return true; - } - - /** - * Convert all relative links to absolute url. - * - * @param string $tag Tag name - * @param string $attribute Attribute name - * @param string $value Attribute value - * - * @return bool - */ - public function rewriteAbsoluteUrl($tag, $attribute, &$value) - { - if ($this->isResource($attribute)) { - $value = Url::resolve($value, $this->website); - } - - return true; - } - - /** - * Turns iframes' src attribute from http to https to prevent - * mixed active content. - * - * @param string $tag Tag name - * @param array $attribute Atttributes name - * @param string $value Attribute value - * - * @return bool - */ - public function secureIframeSrc($tag, $attribute, &$value) - { - if ($tag === 'iframe' && $attribute === 'src' && strpos($value, 'http://') === 0) { - $value = substr_replace($value, 's', 4, 0); - } - - return true; - } - - /** - * Removes YouTube autoplay from iframes. - * - * @param string $tag Tag name - * @param array $attribute Atttributes name - * @param string $value Attribute value - * - * @return bool - */ - public function removeYouTubeAutoplay($tag, $attribute, &$value) - { - $regex = '%^(https://(?:www\.)?youtube.com/.*\?.*autoplay=)(1)(.*)%i'; - if ($tag === 'iframe' && $attribute === 'src' && preg_match($regex, $value)) { - $value = preg_replace($regex, '${1}0$3', $value); - } - - return true; - } - - /** - * Rewrite image url to use with a proxy. - * - * @param string $tag Tag name - * @param string $attribute Attribute name - * @param string $value Attribute value - * - * @return bool - */ - public function rewriteImageProxyUrl($tag, $attribute, &$value) - { - if ($tag === 'img' && $attribute === 'src' - && !($this->image_proxy_limit_protocol !== '' && stripos($value, $this->image_proxy_limit_protocol.':') !== 0)) { - if ($this->image_proxy_url) { - $value = sprintf($this->image_proxy_url, rawurlencode($value)); - } elseif (is_callable($this->image_proxy_callback)) { - $value = call_user_func($this->image_proxy_callback, $value); - } - } - - return true; - } - - /** - * Return true if the scheme is authorized. - * - * @param string $tag Tag name - * @param string $attribute Attribute name - * @param string $value Attribute value - * - * @return bool - */ - public function filterProtocolUrlAttribute($tag, $attribute, $value) - { - if ($this->isResource($attribute) && !$this->isAllowedProtocol($value)) { - return false; - } - - return true; - } - - /** - * Automatically add/override some attributes for specific tags. - * - * @param string $tag Tag name - * @param array $attributes Attributes list - * - * @return array - */ - public function addAttributes($tag, array $attributes) - { - if (isset($this->add_attributes[$tag])) { - $attributes += $this->add_attributes[$tag]; - } - - return $attributes; - } - - /** - * Return true if all required attributes are present. - * - * @param string $tag Tag name - * @param array $attributes Attributes list - * - * @return bool - */ - public function hasRequiredAttributes($tag, array $attributes) - { - if (isset($this->required_attributes[$tag])) { - foreach ($this->required_attributes[$tag] as $attribute) { - if (!isset($attributes[$attribute])) { - return false; - } - } - } - - return true; - } - - /** - * Check if an attribute name is an external resource. - * - * @param string $attribute Attribute name - * - * @return bool - */ - public function isResource($attribute) - { - return in_array($attribute, $this->media_attributes); - } - - /** - * Detect if the protocol is allowed or not. - * - * @param string $value Attribute value - * - * @return bool - */ - public function isAllowedProtocol($value) - { - foreach ($this->scheme_whitelist as $protocol) { - if (strpos($value, $protocol) === 0) { - return true; - } - } - - return false; - } - - /** - * Detect if an url is blacklisted. - * - * @param string $resource Attribute value (URL) - * - * @return bool - */ - public function isBlacklistedMedia($resource) - { - foreach ($this->media_blacklist as $name) { - if (strpos($resource, $name) !== false) { - return true; - } - } - - return false; - } - - /** - * Convert the attribute list to html. - * - * @param array $attributes Attributes - * - * @return string - */ - public function toHtml(array $attributes) - { - $html = array(); - - foreach ($attributes as $attribute => $value) { - $html[] = sprintf('%s="%s"', $attribute, Filter::escape($value)); - } - - return implode(' ', $html); - } - - /** - * Set whitelisted tags and attributes for each tag. - * - * @param array $values List of tags: ['video' => ['src', 'cover'], 'img' => ['src']] - * - * @return Attribute - */ - public function setWhitelistedAttributes(array $values) - { - $this->attribute_whitelist = $values ?: $this->attribute_whitelist; - - return $this; - } - - /** - * Set scheme whitelist. - * - * @param array $values List of scheme: ['http://', 'ftp://'] - * - * @return Attribute - */ - public function setSchemeWhitelist(array $values) - { - $this->scheme_whitelist = $values ?: $this->scheme_whitelist; - - return $this; - } - - /** - * Set media attributes (used to load external resources). - * - * @param array $values List of values: ['src', 'href'] - * - * @return Attribute - */ - public function setMediaAttributes(array $values) - { - $this->media_attributes = $values ?: $this->media_attributes; - - return $this; - } - - /** - * Set blacklisted external resources. - * - * @param array $values List of tags: ['http://google.com/', '...'] - * - * @return Attribute - */ - public function setMediaBlacklist(array $values) - { - $this->media_blacklist = $values ?: $this->media_blacklist; - - return $this; - } - - /** - * Set mandatory attributes for whitelisted tags. - * - * @param array $values List of tags: ['img' => 'src'] - * - * @return Attribute - */ - public function setRequiredAttributes(array $values) - { - $this->required_attributes = $values ?: $this->required_attributes; - - return $this; - } - - /** - * Set attributes to automatically to specific tags. - * - * @param array $values List of tags: ['a' => 'target="_blank"'] - * - * @return Attribute - */ - public function setAttributeOverrides(array $values) - { - $this->add_attributes = $values ?: $this->add_attributes; - - return $this; - } - - /** - * Set attributes that must be an integer. - * - * @param array $values List of tags: ['width', 'height'] - * - * @return Attribute - */ - public function setIntegerAttributes(array $values) - { - $this->integer_attributes = $values ?: $this->integer_attributes; - - return $this; - } - - /** - * Set allowed iframe resources. - * - * @param array $values List of tags: ['http://www.youtube.com'] - * - * @return Attribute - */ - public function setIframeWhitelist(array $values) - { - $this->iframe_whitelist = $values ?: $this->iframe_whitelist; - - return $this; - } - - /** - * Set image proxy URL. - * - * The original image url will be urlencoded - * - * @param string $url Proxy URL - * - * @return Attribute - */ - public function setImageProxyUrl($url) - { - $this->image_proxy_url = $url ?: $this->image_proxy_url; - - return $this; - } - - /** - * Set image proxy callback. - * - * @param \Closure $callback - * - * @return Attribute - */ - public function setImageProxyCallback($callback) - { - $this->image_proxy_callback = $callback ?: $this->image_proxy_callback; - - return $this; - } - - /** - * Set image proxy protocol restriction. - * - * @param string $value - * - * @return Attribute - */ - public function setImageProxyProtocol($value) - { - $this->image_proxy_limit_protocol = $value ?: $this->image_proxy_limit_protocol; - - return $this; - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Filter/Filter.php b/vendor/miniflux/picofeed/lib/PicoFeed/Filter/Filter.php deleted file mode 100644 index bae2aff0..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Filter/Filter.php +++ /dev/null @@ -1,155 +0,0 @@ -<?php - -namespace PicoFeed\Filter; - -/** - * Filter class. - * - * @author Frederic Guillot - */ -class Filter -{ - /** - * Get the Html filter instance. - * - * @static - * - * @param string $html HTML content - * @param string $website Site URL (used to build absolute URL) - * - * @return Html - */ - public static function html($html, $website) - { - $filter = new Html($html, $website); - - return $filter; - } - - /** - * Escape HTML content. - * - * @static - * - * @return string - */ - public static function escape($content) - { - return htmlspecialchars($content, ENT_QUOTES, 'UTF-8', false); - } - - /** - * Remove HTML tags. - * - * @param string $data Input data - * - * @return string - */ - public function removeHTMLTags($data) - { - return preg_replace('~<(?:!DOCTYPE|/?(?:html|head|body))[^>]*>\s*~i', '', $data); - } - - /** - * Remove the XML tag from a document. - * - * @static - * - * @param string $data Input data - * - * @return string - */ - public static function stripXmlTag($data) - { - if (strpos($data, '<?xml') !== false) { - $data = ltrim(substr($data, strpos($data, '?>') + 2)); - } - - do { - $pos = strpos($data, '<?xml-stylesheet '); - - if ($pos !== false) { - $data = ltrim(substr($data, strpos($data, '?>') + 2)); - } - } while ($pos !== false && $pos < 200); - - return $data; - } - - /** - * Strip head tag from the HTML content. - * - * @static - * - * @param string $data Input data - * - * @return string - */ - public static function stripHeadTags($data) - { - return preg_replace('@<head[^>]*?>.*?</head>@siu', '', $data); - } - - /** - * Trim whitespace from the begining, the end and inside a string and don't break utf-8 string. - * - * @static - * - * @param string $value Raw data - * - * @return string Normalized data - */ - public static function stripWhiteSpace($value) - { - $value = str_replace("\r", ' ', $value); - $value = str_replace("\t", ' ', $value); - $value = str_replace("\n", ' ', $value); - // $value = preg_replace('/\s+/', ' ', $value); <= break utf-8 - return trim($value); - } - - /** - * Fixes before XML parsing. - * - * @static - * - * @param string $data Raw data - * - * @return string Normalized data - */ - public static function normalizeData($data) - { - $entities = array( - '/(&#)(\d+);/m', // decimal encoded - '/(&#x)([a-f0-9]+);/mi', // hex encoded - ); - - // strip invalid XML 1.0 characters which are encoded as entities - $data = preg_replace_callback($entities, function ($matches) { - $code_point = $matches[2]; - - // convert hex entity to decimal - if (strtolower($matches[1]) === '&#x') { - $code_point = hexdec($code_point); - } - - $code_point = (int) $code_point; - - // replace invalid characters - if ($code_point < 9 - || ($code_point > 10 && $code_point < 13) - || ($code_point > 13 && $code_point < 32) - || ($code_point > 55295 && $code_point < 57344) - || ($code_point > 65533 && $code_point < 65536) - || $code_point > 1114111 - ) { - return ''; - }; - - return $matches[0]; - }, $data); - - // strip every utf-8 character than isn't in the range of valid XML 1.0 characters - return (string) preg_replace('/[^\x{0009}\x{000A}\x{000D}\x{0020}-\x{D7FF}\x{E000}-\x{FFFD}\x{10000}-\x{10FFFF}]/u', '', $data); - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Filter/Html.php b/vendor/miniflux/picofeed/lib/PicoFeed/Filter/Html.php deleted file mode 100644 index 0ccc192f..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Filter/Html.php +++ /dev/null @@ -1,243 +0,0 @@ -<?php - -namespace PicoFeed\Filter; - -use PicoFeed\Config\Config; -use PicoFeed\Client\Url; -use PicoFeed\Scraper\RuleLoader; -use PicoFeed\Parser\XmlParser; - -/** - * HTML Filter class. - * - * @author Frederic Guillot - */ -class Html -{ - /** - * Config object. - * - * @var \PicoFeed\Config\Config - */ - private $config; - - /** - * Unfiltered XML data. - * - * @var string - */ - private $input = ''; - - /** - * Filtered XML data. - * - * @var string - */ - private $output = ''; - - /** - * List of empty tags. - * - * @var array - */ - private $empty_tags = array(); - - /** - * Empty flag. - * - * @var bool - */ - private $empty = true; - - /** - * Tag instance. - * - * @var \PicoFeed\Filter\Tag - */ - public $tag = ''; - - /** - * Attribute instance. - * - * @var \PicoFeed\Filter\Attribute - */ - public $attribute = ''; - - /** - * The website to filter. - * - * @var string - */ - private $website; - - /** - * Initialize the filter, all inputs data must be encoded in UTF-8 before. - * - * @param string $html HTML content - * @param string $website Site URL (used to build absolute URL) - */ - public function __construct($html, $website) - { - $this->config = new Config(); - $this->input = XmlParser::htmlToXml($html); - $this->output = ''; - $this->tag = new Tag($this->config); - $this->website = $website; - $this->attribute = new Attribute(new Url($website)); - } - - /** - * Set config object. - * - * @param \PicoFeed\Config\Config $config Config instance - * - * @return \PicoFeed\Filter\Html - */ - public function setConfig($config) - { - $this->config = $config; - - if ($this->config !== null) { - $this->attribute->setImageProxyCallback($this->config->getFilterImageProxyCallback()); - $this->attribute->setImageProxyUrl($this->config->getFilterImageProxyUrl()); - $this->attribute->setImageProxyProtocol($this->config->getFilterImageProxyProtocol()); - $this->attribute->setIframeWhitelist($this->config->getFilterIframeWhitelist(array())); - $this->attribute->setIntegerAttributes($this->config->getFilterIntegerAttributes(array())); - $this->attribute->setAttributeOverrides($this->config->getFilterAttributeOverrides(array())); - $this->attribute->setRequiredAttributes($this->config->getFilterRequiredAttributes(array())); - $this->attribute->setMediaBlacklist($this->config->getFilterMediaBlacklist(array())); - $this->attribute->setMediaAttributes($this->config->getFilterMediaAttributes(array())); - $this->attribute->setSchemeWhitelist($this->config->getFilterSchemeWhitelist(array())); - $this->attribute->setWhitelistedAttributes($this->config->getFilterWhitelistedTags(array())); - $this->tag->setWhitelistedTags(array_keys($this->config->getFilterWhitelistedTags(array()))); - } - - return $this; - } - - /** - * Run tags/attributes filtering. - * - * @return string - */ - public function execute() - { - $this->preFilter(); - - $parser = xml_parser_create(); - - xml_set_object($parser, $this); - xml_set_element_handler($parser, 'startTag', 'endTag'); - xml_set_character_data_handler($parser, 'dataTag'); - xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, false); - xml_parse($parser, $this->input, true); - xml_parser_free($parser); - - $this->postFilter(); - - return $this->output; - } - - /** - * Called before XML parsing. - */ - public function preFilter() - { - $this->input = $this->tag->removeBlacklistedTags($this->input); - } - - /** - * Called after XML parsing. - */ - public function postFilter() - { - $this->output = $this->tag->removeEmptyTags($this->output); - $this->output = $this->filterRules($this->output); - $this->output = $this->tag->removeMultipleBreakTags($this->output); - $this->output = trim($this->output); - } - - /** - * Called after XML parsing. - * - * @param string $content the content that should be filtered - */ - public function filterRules($content) - { - // the constructor should require a config, then this if can be removed - if ($this->config === null) { - $config = new Config(); - } else { - $config = $this->config; - } - - $loader = new RuleLoader($config); - $rules = $loader->getRules($this->website); - - $url = new Url($this->website); - $sub_url = $url->getFullPath(); - - if (isset($rules['filter'])) { - foreach ($rules['filter'] as $pattern => $rule) { - if (preg_match($pattern, $sub_url)) { - foreach ($rule as $search => $replace) { - $content = preg_replace($search, $replace, $content); - } - } - } - } - - return $content; - } - - /** - * Parse opening tag. - * - * @param resource $parser XML parser - * @param string $tag Tag name - * @param array $attributes Tag attributes - */ - public function startTag($parser, $tag, array $attributes) - { - $this->empty = true; - - if ($this->tag->isAllowed($tag, $attributes)) { - $attributes = $this->attribute->filter($tag, $attributes); - - if ($this->attribute->hasRequiredAttributes($tag, $attributes)) { - $attributes = $this->attribute->addAttributes($tag, $attributes); - - $this->output .= $this->tag->openHtmlTag($tag, $this->attribute->toHtml($attributes)); - $this->empty = false; - } - } - - $this->empty_tags[] = $this->empty; - } - - /** - * Parse closing tag. - * - * @param resource $parser XML parser - * @param string $tag Tag name - */ - public function endTag($parser, $tag) - { - if (!array_pop($this->empty_tags) && $this->tag->isAllowedTag($tag)) { - $this->output .= $this->tag->closeHtmlTag($tag); - } - } - - /** - * Parse tag content. - * - * @param resource $parser XML parser - * @param string $content Tag content - */ - public function dataTag($parser, $content) - { - // Replace with normal space - $content = str_replace("\xc2\xa0", ' ', $content); - $this->output .= Filter::escape($content); - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Filter/Tag.php b/vendor/miniflux/picofeed/lib/PicoFeed/Filter/Tag.php deleted file mode 100644 index 84a298a7..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Filter/Tag.php +++ /dev/null @@ -1,218 +0,0 @@ -<?php - -namespace PicoFeed\Filter; - -use DOMXPath; -use PicoFeed\Base; -use PicoFeed\Parser\XmlParser; - -/** - * Tag Filter class. - * - * @author Frederic Guillot - */ -class Tag extends Base -{ - /** - * Tags blacklist (Xpath expressions). - * - * @var array - */ - private $tag_blacklist = array( - '//script', - '//style', - ); - - /** - * Tags whitelist. - * - * @var array - */ - private $tag_whitelist = array( - 'audio', - 'video', - 'source', - 'dt', - 'dd', - 'dl', - 'table', - 'caption', - 'tr', - 'th', - 'td', - 'tbody', - 'thead', - 'h1', - 'h2', - 'h3', - 'h4', - 'h5', - 'h6', - 'strong', - 'em', - 'code', - 'pre', - 'blockquote', - 'p', - 'ul', - 'li', - 'ol', - 'br', - 'del', - 'a', - 'img', - 'figure', - 'figcaption', - 'cite', - 'time', - 'abbr', - 'iframe', - 'q', - 'sup', - 'sub', - ); - - /** - * Check if the tag is allowed and is not a pixel tracker. - * - * @param string $tag Tag name - * @param array $attributes Attributes dictionary - * - * @return bool - */ - public function isAllowed($tag, array $attributes) - { - return $this->isAllowedTag($tag) && !$this->isPixelTracker($tag, $attributes); - } - - /** - * Return the HTML opening tag. - * - * @param string $tag Tag name - * @param string $attributes Attributes converted in html - * - * @return string - */ - public function openHtmlTag($tag, $attributes = '') - { - return '<'.$tag.(empty($attributes) ? '' : ' '.$attributes).($this->isSelfClosingTag($tag) ? '/>' : '>'); - } - - /** - * Return the HTML closing tag. - * - * @param string $tag Tag name - * - * @return string - */ - public function closeHtmlTag($tag) - { - return $this->isSelfClosingTag($tag) ? '' : '</'.$tag.'>'; - } - - /** - * Return true is the tag is self-closing. - * - * @param string $tag Tag name - * - * @return bool - */ - public function isSelfClosingTag($tag) - { - return $tag === 'br' || $tag === 'img'; - } - - /** - * Check if a tag is on the whitelist. - * - * @param string $tag Tag name - * - * @return bool - */ - public function isAllowedTag($tag) - { - return in_array($tag, array_merge( - $this->tag_whitelist, - array_keys($this->config->getFilterWhitelistedTags(array())) - )); - } - - /** - * Detect if an image tag is a pixel tracker. - * - * @param string $tag Tag name - * @param array $attributes Tag attributes - * - * @return bool - */ - public function isPixelTracker($tag, array $attributes) - { - return $tag === 'img' && - isset($attributes['height']) && isset($attributes['width']) && - $attributes['height'] == 1 && $attributes['width'] == 1; - } - - /** - * Remove script tags. - * - * @param string $data Input data - * - * @return string - */ - public function removeBlacklistedTags($data) - { - $dom = XmlParser::getDomDocument($data); - - if ($dom === false) { - return ''; - } - - $xpath = new DOMXpath($dom); - - $nodes = $xpath->query(implode(' | ', $this->tag_blacklist)); - - foreach ($nodes as $node) { - $node->parentNode->removeChild($node); - } - - return $dom->saveXML(); - } - - /** - * Remove empty tags. - * - * @param string $data Input data - * - * @return string - */ - public function removeEmptyTags($data) - { - return preg_replace('/<([^<\/>]*)>([\s]*?|(?R))<\/\1>/imsU', '', $data); - } - - /** - * Replace <br/><br/> by only one. - * - * @param string $data Input data - * - * @return string - */ - public function removeMultipleBreakTags($data) - { - return preg_replace("/(<br\s*\/?>\s*)+/", '<br/>', $data); - } - - /** - * Set whitelisted tags adn attributes for each tag. - * - * @param array $values List of tags: ['video' => ['src', 'cover'], 'img' => ['src']] - * - * @return Tag - */ - public function setWhitelistedTags(array $values) - { - $this->tag_whitelist = $values ?: $this->tag_whitelist; - - return $this; - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Generator/ContentGeneratorInterface.php b/vendor/miniflux/picofeed/lib/PicoFeed/Generator/ContentGeneratorInterface.php deleted file mode 100644 index 5c2f205c..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Generator/ContentGeneratorInterface.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php - -namespace PicoFeed\Generator; - -use PicoFeed\Parser\Item; - -/** - * Content Generator Interface - * - * @package PicoFeed\Generator - * @author Frederic Guillot - */ -interface ContentGeneratorInterface -{ - /** - * Execute Content Generator - * - * @access public - * @param Item $item - * @return boolean - */ - public function execute(Item $item); -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Generator/FileContentGenerator.php b/vendor/miniflux/picofeed/lib/PicoFeed/Generator/FileContentGenerator.php deleted file mode 100644 index 03f37e16..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Generator/FileContentGenerator.php +++ /dev/null @@ -1,36 +0,0 @@ -<?php - -namespace PicoFeed\Generator; - -use PicoFeed\Base; -use PicoFeed\Parser\Item; - -/** - * File Content Generator - * - * @package PicoFeed\Generator - * @author Frederic Guillot - */ -class FileContentGenerator extends Base implements ContentGeneratorInterface -{ - private $extensions = array('pdf'); - - /** - * Execute Content Generator - * - * @access public - * @param Item $item - * @return boolean - */ - public function execute(Item $item) - { - foreach ($this->extensions as $extension) { - if (substr($item->getUrl(), - strlen($extension)) === $extension) { - $item->setContent('<a href="'.$item->getUrl().'" target="_blank">'.$item->getUrl().'</a>'); - return true; - } - } - - return false; - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Generator/YoutubeContentGenerator.php b/vendor/miniflux/picofeed/lib/PicoFeed/Generator/YoutubeContentGenerator.php deleted file mode 100644 index 198090d4..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Generator/YoutubeContentGenerator.php +++ /dev/null @@ -1,67 +0,0 @@ -<?php - -namespace PicoFeed\Generator; - -use PicoFeed\Base; -use PicoFeed\Parser\Item; - -/** - * Youtube Content Generator - * - * @package PicoFeed\Generator - * @author Frederic Guillot - */ -class YoutubeContentGenerator extends Base implements ContentGeneratorInterface -{ - /** - * Execute Content Generator - * - * @access public - * @param Item $item - * @return boolean - */ - public function execute(Item $item) - { - if ($item->hasNamespace('yt')) { - return $this->generateHtmlFromXml($item); - } - - return $this->generateHtmlFromUrl($item); - } - - /** - * Generate HTML - * - * @access public - * @param Item $item - * @return boolean - */ - private function generateHtmlFromXml(Item $item) - { - $videoId = $item->getTag('yt:videoId'); - - if (! empty($videoId)) { - $item->setContent('<iframe width="560" height="315" src="//www.youtube.com/embed/'.$videoId[0].'" frameborder="0"></iframe>'); - return true; - } - - return false; - } - - /** - * Generate HTML from item URL - * - * @access public - * @param Item $item - * @return bool - */ - public function generateHtmlFromUrl(Item $item) - { - if (preg_match('/youtube\.com\/watch\?v=(.*)/', $item->getUrl(), $matches)) { - $item->setContent('<iframe width="560" height="315" src="//www.youtube.com/embed/'.$matches[1].'" frameborder="0"></iframe>'); - return true; - } - - return false; - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Logging/Logger.php b/vendor/miniflux/picofeed/lib/PicoFeed/Logging/Logger.php deleted file mode 100644 index caec463f..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Logging/Logger.php +++ /dev/null @@ -1,114 +0,0 @@ -<?php - -namespace PicoFeed\Logging; - -use DateTime; -use DateTimeZone; - -/** - * Logging class. - * - * @author Frederic Guillot - */ -class Logger -{ - /** - * List of messages. - * - * @static - * - * @var array - */ - private static $messages = array(); - - /** - * Default timezone. - * - * @static - * - * @var string - */ - private static $timezone = 'UTC'; - - /** - * Enable or disable logging. - * - * @static - * - * @var bool - */ - public static $enable = false; - - /** - * Enable logging. - * - * @static - */ - public static function enable() - { - self::$enable = true; - } - - /** - * Add a new message. - * - * @static - * - * @param string $message Message - */ - public static function setMessage($message) - { - if (self::$enable) { - $date = new DateTime('now', new DateTimeZone(self::$timezone)); - self::$messages[] = '['.$date->format('Y-m-d H:i:s').'] '.$message; - } - } - - /** - * Get all logged messages. - * - * @static - * - * @return array - */ - public static function getMessages() - { - return self::$messages; - } - - /** - * Remove all logged messages. - * - * @static - */ - public static function deleteMessages() - { - self::$messages = array(); - } - - /** - * Set a different timezone. - * - * @static - * - * @see http://php.net/manual/en/timezones.php - * - * @param string $timezone Timezone - */ - public static function setTimeZone($timezone) - { - self::$timezone = $timezone ?: self::$timezone; - } - - /** - * Get all messages serialized into a string. - * - * @static - * - * @return string - */ - public static function toString() - { - return implode(PHP_EOL, self::$messages).PHP_EOL; - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Parser/Atom.php b/vendor/miniflux/picofeed/lib/PicoFeed/Parser/Atom.php deleted file mode 100644 index 1c570a08..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Parser/Atom.php +++ /dev/null @@ -1,382 +0,0 @@ -<?php - -namespace PicoFeed\Parser; - -use SimpleXMLElement; -use PicoFeed\Filter\Filter; -use PicoFeed\Client\Url; - -/** - * Atom parser. - * - * @package PicoFeed\Parser - * @author Frederic Guillot - */ -class Atom extends Parser -{ - /** - * Supported namespaces. - */ - protected $namespaces = array( - 'atom' => 'http://www.w3.org/2005/Atom', - ); - - /** - * Get the path to the items XML tree. - * - * @param SimpleXMLElement $xml Feed xml - * - * @return SimpleXMLElement - */ - public function getItemsTree(SimpleXMLElement $xml) - { - return XmlParser::getXPathResult($xml, 'atom:entry', $this->namespaces) - ?: XmlParser::getXPathResult($xml, 'entry'); - } - - /** - * Find the feed url. - * - * @param SimpleXMLElement $xml Feed xml - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findFeedUrl(SimpleXMLElement $xml, Feed $feed) - { - $feed->setFeedUrl($this->getUrl($xml, 'self')); - } - - /** - * Find the site url. - * - * @param SimpleXMLElement $xml Feed xml - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findSiteUrl(SimpleXMLElement $xml, Feed $feed) - { - $feed->setSiteUrl($this->getUrl($xml, 'alternate', true)); - } - - /** - * Find the feed description. - * - * @param SimpleXMLElement $xml Feed xml - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findFeedDescription(SimpleXMLElement $xml, Feed $feed) - { - $description = XmlParser::getXPathResult($xml, 'atom:subtitle', $this->namespaces) - ?: XmlParser::getXPathResult($xml, 'subtitle'); - - $feed->setDescription(XmlParser::getValue($description)); - } - - /** - * Find the feed logo url. - * - * @param SimpleXMLElement $xml Feed xml - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findFeedLogo(SimpleXMLElement $xml, Feed $feed) - { - $logo = XmlParser::getXPathResult($xml, 'atom:logo', $this->namespaces) - ?: XmlParser::getXPathResult($xml, 'logo'); - - $feed->setLogo(XmlParser::getValue($logo)); - } - - /** - * Find the feed icon. - * - * @param SimpleXMLElement $xml Feed xml - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findFeedIcon(SimpleXMLElement $xml, Feed $feed) - { - $icon = XmlParser::getXPathResult($xml, 'atom:icon', $this->namespaces) - ?: XmlParser::getXPathResult($xml, 'icon'); - - $feed->setIcon(XmlParser::getValue($icon)); - } - - /** - * Find the feed title. - * - * @param SimpleXMLElement $xml Feed xml - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findFeedTitle(SimpleXMLElement $xml, Feed $feed) - { - $title = XmlParser::getXPathResult($xml, 'atom:title', $this->namespaces) - ?: XmlParser::getXPathResult($xml, 'title'); - - $feed->setTitle(Filter::stripWhiteSpace(XmlParser::getValue($title)) ?: $feed->getSiteUrl()); - } - - /** - * Find the feed language. - * - * @param SimpleXMLElement $xml Feed xml - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findFeedLanguage(SimpleXMLElement $xml, Feed $feed) - { - $language = XmlParser::getXPathResult($xml, '*[not(self::atom:entry)]/@xml:lang', $this->namespaces) - ?: XmlParser::getXPathResult($xml, '@xml:lang'); - - $feed->setLanguage(XmlParser::getValue($language)); - } - - /** - * Find the feed id. - * - * @param SimpleXMLElement $xml Feed xml - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findFeedId(SimpleXMLElement $xml, Feed $feed) - { - $id = XmlParser::getXPathResult($xml, 'atom:id', $this->namespaces) - ?: XmlParser::getXPathResult($xml, 'id'); - - $feed->setId(XmlParser::getValue($id)); - } - - /** - * Find the feed date. - * - * @param SimpleXMLElement $xml Feed xml - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findFeedDate(SimpleXMLElement $xml, Feed $feed) - { - $updated = XmlParser::getXPathResult($xml, 'atom:updated', $this->namespaces) - ?: XmlParser::getXPathResult($xml, 'updated'); - - $feed->setDate($this->getDateParser()->getDateTime(XmlParser::getValue($updated))); - } - - /** - * Find the item published date. - * - * @param SimpleXMLElement $entry Feed item - * @param Item $item Item object - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findItemPublishedDate(SimpleXMLElement $entry, Item $item, Feed $feed) - { - $date = XmlParser::getXPathResult($entry, 'atom:published', $this->namespaces) - ?: XmlParser::getXPathResult($entry, 'published'); - - $item->setPublishedDate(!empty($date) ? $this->getDateParser()->getDateTime((string) current($date)) : null); - } - - /** - * Find the item updated date. - * - * @param SimpleXMLElement $entry Feed item - * @param Item $item Item object - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findItemUpdatedDate(SimpleXMLElement $entry, Item $item, Feed $feed) - { - $date = XmlParser::getXPathResult($entry, 'atom:updated', $this->namespaces) - ?: XmlParser::getXPathResult($entry, 'updated'); - - $item->setUpdatedDate(!empty($date) ? $this->getDateParser()->getDateTime((string) current($date)) : null); - } - - /** - * Find the item title. - * - * @param SimpleXMLElement $entry Feed item - * @param Item $item Item object - */ - public function findItemTitle(SimpleXMLElement $entry, Item $item) - { - $title = XmlParser::getXPathResult($entry, 'atom:title', $this->namespaces) - ?: XmlParser::getXPathResult($entry, 'title'); - - $item->setTitle(Filter::stripWhiteSpace(XmlParser::getValue($title)) ?: $item->getUrl()); - } - - /** - * Find the item author. - * - * @param SimpleXMLElement $xml Feed - * @param SimpleXMLElement $entry Feed item - * @param \PicoFeed\Parser\Item $item Item object - */ - public function findItemAuthor(SimpleXMLElement $xml, SimpleXMLElement $entry, Item $item) - { - $author = XmlParser::getXPathResult($entry, 'atom:author/atom:name', $this->namespaces) - ?: XmlParser::getXPathResult($entry, 'author/name') - ?: XmlParser::getXPathResult($xml, 'atom:author/atom:name', $this->namespaces) - ?: XmlParser::getXPathResult($xml, 'author/name'); - - $item->setAuthor(XmlParser::getValue($author)); - } - - /** - * Find the item content. - * - * @param SimpleXMLElement $entry Feed item - * @param \PicoFeed\Parser\Item $item Item object - */ - public function findItemContent(SimpleXMLElement $entry, Item $item) - { - $item->setContent($this->getContent($entry)); - } - - /** - * Find the item URL. - * - * @param SimpleXMLElement $entry Feed item - * @param \PicoFeed\Parser\Item $item Item object - */ - public function findItemUrl(SimpleXMLElement $entry, Item $item) - { - $item->setUrl($this->getUrl($entry, 'alternate', true)); - } - - /** - * Genereate the item id. - * - * @param SimpleXMLElement $entry Feed item - * @param \PicoFeed\Parser\Item $item Item object - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findItemId(SimpleXMLElement $entry, Item $item, Feed $feed) - { - $id = XmlParser::getXPathResult($entry, 'atom:id', $this->namespaces) - ?: XmlParser::getXPathResult($entry, 'id'); - - if (!empty($id)) { - $item->setId($this->generateId(XmlParser::getValue($id))); - } else { - $item->setId($this->generateId( - $item->getTitle(), $item->getUrl(), $item->getContent() - )); - } - } - - /** - * Find the item enclosure. - * - * @param SimpleXMLElement $entry Feed item - * @param \PicoFeed\Parser\Item $item Item object - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findItemEnclosure(SimpleXMLElement $entry, Item $item, Feed $feed) - { - $enclosure = $this->findLink($entry, 'enclosure'); - - if ($enclosure) { - $item->setEnclosureUrl(Url::resolve((string) $enclosure['href'], $feed->getSiteUrl())); - $item->setEnclosureType((string) $enclosure['type']); - } - } - - /** - * Find the item language. - * - * @param SimpleXMLElement $entry Feed item - * @param \PicoFeed\Parser\Item $item Item object - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findItemLanguage(SimpleXMLElement $entry, Item $item, Feed $feed) - { - $language = XmlParser::getXPathResult($entry, './/@xml:lang'); - $item->setLanguage(XmlParser::getValue($language) ?: $feed->getLanguage()); - } - - /** - * Find the item categories. - * - * @param SimpleXMLElement $entry Feed item - * @param Item $item Item object - * @param Feed $feed Feed object - */ - public function findItemCategories(SimpleXMLElement $entry, Item $item, Feed $feed) - { - $categories = XmlParser::getXPathResult($entry, 'atom:category/@term', $this->namespaces) - ?: XmlParser::getXPathResult($entry, 'category/@term'); - $item->setCategoriesFromXml($categories); - } - - /** - * Get the URL from a link tag. - * - * @param SimpleXMLElement $xml XML tag - * @param string $rel Link relationship: alternate, enclosure, related, self, via - * - * @return string - */ - private function getUrl(SimpleXMLElement $xml, $rel, $fallback = false) - { - $link = $this->findLink($xml, $rel); - - if ($link) { - return (string) $link['href']; - } - - if ($fallback) { - $link = $this->findLink($xml, ''); - return $link ? (string) $link['href'] : ''; - } - - return ''; - } - - /** - * Get a link tag that match a relationship. - * - * @param SimpleXMLElement $xml XML tag - * @param string $rel Link relationship: alternate, enclosure, related, self, via - * - * @return SimpleXMLElement|null - */ - private function findLink(SimpleXMLElement $xml, $rel) - { - $links = XmlParser::getXPathResult($xml, 'atom:link', $this->namespaces) - ?: XmlParser::getXPathResult($xml, 'link'); - - foreach ($links as $link) { - if ($rel === (string) $link['rel']) { - return $link; - } - } - - return null; - } - - /** - * Get the entry content. - * - * @param SimpleXMLElement $entry XML Entry - * - * @return string - */ - private function getContent(SimpleXMLElement $entry) - { - $content = current( - XmlParser::getXPathResult($entry, 'atom:content', $this->namespaces) - ?: XmlParser::getXPathResult($entry, 'content') - ); - - if (!empty($content) && count($content->children())) { - $xml_string = ''; - - foreach ($content->children() as $child) { - $xml_string .= $child->asXML(); - } - - return $xml_string; - } elseif (trim((string) $content) !== '') { - return (string) $content; - } - - $summary = XmlParser::getXPathResult($entry, 'atom:summary', $this->namespaces) - ?: XmlParser::getXPathResult($entry, 'summary'); - - return (string) current($summary); - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Parser/DateParser.php b/vendor/miniflux/picofeed/lib/PicoFeed/Parser/DateParser.php deleted file mode 100644 index 0e5b80e3..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Parser/DateParser.php +++ /dev/null @@ -1,128 +0,0 @@ -<?php - -namespace PicoFeed\Parser; - -use DateTime; -use DateTimeZone; -use PicoFeed\Base; - -/** - * Date Parser. - * - * @package PicoFeed\Parser - * @author Frederic Guillot - */ -class DateParser extends Base -{ - /** - * Timezone used to parse feed dates. - * - * @access private - * @var string - */ - private $timezone = 'UTC'; - - /** - * Supported formats [ 'format' => length ]. - * - * @var array - */ - public $formats = array( - DATE_ATOM => null, - DATE_RSS => null, - DATE_COOKIE => null, - DATE_ISO8601 => null, - DATE_RFC822 => null, - DATE_RFC850 => null, - DATE_RFC1036 => null, - DATE_RFC1123 => null, - DATE_RFC2822 => null, - DATE_RFC3339 => null, - 'l, d M Y H:i:s' => null, - 'D, d M Y H:i:s' => 25, - 'D, d M Y h:i:s' => 25, - 'D M d Y H:i:s' => 24, - 'j M Y H:i:s' => 20, - 'Y-m-d H:i:s' => 19, - 'Y-m-d\TH:i:s' => 19, - 'd/m/Y H:i:s' => 19, - 'D, d M Y' => 16, - 'Y-m-d' => 10, - 'd-m-Y' => 10, - 'm-d-Y' => 10, - 'd.m.Y' => 10, - 'm.d.Y' => 10, - 'd/m/Y' => 10, - 'm/d/Y' => 10, - ); - - /** - * Try to parse all date format for broken feeds. - * - * @param string $value Original date format - * - * @return DateTime - */ - public function getDateTime($value) - { - $value = trim($value); - - foreach ($this->formats as $format => $length) { - $truncated_value = $value; - if ($length !== null) { - $truncated_value = substr($truncated_value, 0, $length); - } - - $date = $this->getValidDate($format, $truncated_value); - if ($date !== false) { - return $date; - } - } - - return $this->getCurrentDateTime(); - } - - /** - * Get a valid date from a given format. - * - * @param string $format Date format - * @param string $value Original date value - * - * @return DateTime|bool - */ - public function getValidDate($format, $value) - { - $date = DateTime::createFromFormat($format, $value, $this->getTimeZone()); - - if ($date !== false) { - $errors = DateTime::getLastErrors(); - - if ($errors['error_count'] === 0 && $errors['warning_count'] === 0) { - return $date; - } - } - - return false; - } - - /** - * Get the current datetime. - * - * @return DateTime - */ - public function getCurrentDateTime() - { - return new DateTime('now', $this->getTimeZone()); - } - - /** - * Get DateTimeZone instance - * - * @access public - * @return DateTimeZone - */ - public function getTimeZone() - { - return new DateTimeZone($this->config->getTimezone() ?: $this->timezone); - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Parser/Feed.php b/vendor/miniflux/picofeed/lib/PicoFeed/Parser/Feed.php deleted file mode 100644 index a56e71c3..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Parser/Feed.php +++ /dev/null @@ -1,315 +0,0 @@ -<?php - -namespace PicoFeed\Parser; - -/** - * Feed. - * - * @package PicoFeed\Parser - * @author Frederic Guillot - */ -class Feed -{ - /** - * Feed items. - * - * @var Item[] - */ - public $items = array(); - - /** - * Feed id. - * - * @var string - */ - public $id = ''; - - /** - * Feed title. - * - * @var string - */ - public $title = ''; - - /** - * Feed description. - * - * @var string - */ - public $description = ''; - - /** - * Feed url. - * - * @var string - */ - public $feedUrl = ''; - - /** - * Site url. - * - * @var string - */ - public $siteUrl = ''; - - /** - * Feed date. - * - * @var \DateTime - */ - public $date = null; - - /** - * Feed language. - * - * @var string - */ - public $language = ''; - - /** - * Feed logo URL. - * - * @var string - */ - public $logo = ''; - - /** - * Feed icon URL. - * - * @var string - */ - public $icon = ''; - - /** - * Return feed information. - */ - public function __toString() - { - $output = ''; - - foreach (array('id', 'title', 'feedUrl', 'siteUrl', '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; - - foreach ($this->items as $item) { - $output .= '----'.PHP_EOL; - $output .= $item; - } - - return $output; - } - - /** - * Get title. - */ - public function getTitle() - { - return $this->title; - } - - /** - * Get description. - */ - public function getDescription() - { - return $this->description; - } - - /** - * Get the logo url. - */ - public function getLogo() - { - return $this->logo; - } - - /** - * Get the icon url. - */ - public function getIcon() - { - return $this->icon; - } - - /** - * Get feed url. - */ - public function getFeedUrl() - { - return $this->feedUrl; - } - - /** - * Get site url. - */ - public function getSiteUrl() - { - return $this->siteUrl; - } - - /** - * Get date. - */ - public function getDate() - { - return $this->date; - } - - /** - * Get language. - */ - public function getLanguage() - { - return $this->language; - } - - /** - * Get id. - */ - public function getId() - { - return $this->id; - } - - /** - * Get feed items. - */ - public function getItems() - { - return $this->items; - } - - /** - * Return true if the feed is "Right to Left". - * - * @return bool - */ - public function isRTL() - { - return Parser::isLanguageRTL($this->language); - } - - /** - * Set feed items. - * - * @param Item[] $items - * @return Feed - */ - public function setItems(array $items) - { - $this->items = $items; - return $this; - } - - /** - * Set feed id. - * - * @param string $id - * @return Feed - */ - public function setId($id) - { - $this->id = $id; - return $this; - } - - /** - * Set feed title. - * - * @param string $title - * @return Feed - */ - public function setTitle($title) - { - $this->title = $title; - return $this; - } - - /** - * Set feed description. - * - * @param string $description - * @return Feed - */ - public function setDescription($description) - { - $this->description = $description; - return $this; - } - - /** - * Set feed url. - * - * @param string $feedUrl - * @return Feed - */ - public function setFeedUrl($feedUrl) - { - $this->feedUrl = $feedUrl; - return $this; - } - - /** - * Set feed website url. - * - * @param string $siteUrl - * @return Feed - */ - public function setSiteUrl($siteUrl) - { - $this->siteUrl = $siteUrl; - return $this; - } - - /** - * Set feed date. - * - * @param \DateTime $date - * @return Feed - */ - public function setDate($date) - { - $this->date = $date; - return $this; - } - - /** - * Set feed language. - * - * @param string $language - * @return Feed - */ - public function setLanguage($language) - { - $this->language = $language; - return $this; - } - - /** - * Set feed logo. - * - * @param string $logo - * @return Feed - */ - public function setLogo($logo) - { - $this->logo = $logo; - return $this; - } - - /** - * Set feed icon. - * - * @param string $icon - * @return Feed - */ - public function setIcon($icon) - { - $this->icon = $icon; - return $this; - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Parser/Item.php b/vendor/miniflux/picofeed/lib/PicoFeed/Parser/Item.php deleted file mode 100644 index f9581941..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Parser/Item.php +++ /dev/null @@ -1,534 +0,0 @@ -<?php - -namespace PicoFeed\Parser; - -/** - * Feed Item. - * - * @package PicoFeed\Parser - * @author Frederic Guillot - */ -class Item -{ - /** - * List of known RTL languages. - * - * @var string[] - */ - public $rtl = array( - 'ar', // Arabic (ar-**) - 'fa', // Farsi (fa-**) - 'ur', // Urdu (ur-**) - 'ps', // Pashtu (ps-**) - 'syr', // Syriac (syr-**) - 'dv', // Divehi (dv-**) - 'he', // Hebrew (he-**) - 'yi', // Yiddish (yi-**) - ); - - /** - * Item id. - * - * @var string - */ - public $id = ''; - - /** - * Item title. - * - * @var string - */ - public $title = ''; - - /** - * Item url. - * - * @var string - */ - public $url = ''; - - /** - * Item author. - * - * @var string - */ - public $author = ''; - - /** - * Item date. - * - * @var \DateTime - */ - public $date = null; - - /** - * Item published date. - * - * @var \DateTime - */ - public $publishedDate = null; - - /** - * Item updated date. - * - * @var \DateTime - */ - public $updatedDate = null; - - /** - * Item content. - * - * @var string - */ - public $content = ''; - - /** - * Item enclosure url. - * - * @var string - */ - public $enclosureUrl = ''; - - /** - * Item enclusure type. - * - * @var string - */ - public $enclosureType = ''; - - /** - * Item language. - * - * @var string - */ - public $language = ''; - - /** - * Item categories. - * - * @var array - */ - public $categories = array(); - - /** - * Raw XML. - * - * @var \SimpleXMLElement - */ - public $xml; - - /** - * List of namespaces. - * - * @var array - */ - public $namespaces = array(); - - /** - * Check if a XML namespace exists - * - * @access public - * @param string $namespace - * @return bool - */ - public function hasNamespace($namespace) - { - return array_key_exists($namespace, $this->namespaces); - } - - /** - * Get specific XML tag or attribute value. - * - * @param string $tag Tag name (examples: guid, media:content) - * @param string $attribute Tag attribute - * - * @return array|false Tag values or error - */ - public function getTag($tag, $attribute = '') - { - if ($attribute !== '') { - $attribute = '/@'.$attribute; - } - - $query = './/'.$tag.$attribute; - $elements = XmlParser::getXPathResult($this->xml, $query, $this->namespaces); - - if ($elements === false) { // xPath error - return false; - } - - return array_map(function ($element) { return (string) $element;}, $elements); - } - - /** - * Return item information. - * - * @return string - */ - public function __toString() - { - $output = ''; - - foreach (array('id', 'title', 'url', 'language', 'author', 'enclosureUrl', 'enclosureType') as $property) { - $output .= 'Item::'.$property.' = '.$this->$property.PHP_EOL; - } - - $publishedDate = $this->publishedDate != null ? $this->publishedDate->format(DATE_RFC822) : null; - $updatedDate = $this->updatedDate != null ? $this->updatedDate->format(DATE_RFC822) : null; - - $categoryString = $this->categories != null ? implode(',', $this->categories) : null; - - $output .= 'Item::date = '.$this->date->format(DATE_RFC822).PHP_EOL; - $output .= 'Item::publishedDate = '.$publishedDate.PHP_EOL; - $output .= 'Item::updatedDate = '.$updatedDate.PHP_EOL; - $output .= 'Item::isRTL() = '.($this->isRTL() ? 'true' : 'false').PHP_EOL; - $output .= 'Item::categories = ['.$categoryString.']'.PHP_EOL; - $output .= 'Item::content = '.strlen($this->content).' bytes'.PHP_EOL; - - return $output; - } - - /** - * Get title. - * - * @return string - */ - public function getTitle() - { - return $this->title; - } - - /** - * Get URL - * - * @access public - * @return string - */ - public function getUrl() - { - return $this->url; - } - - /** - * Set URL - * - * @access public - * @param string $url - * @return Item - */ - public function setUrl($url) - { - $this->url = $url; - return $this; - } - - /** - * Get id. - * - * @return string - */ - public function getId() - { - return $this->id; - } - - /** - * Get date. - * - * @return \DateTime - */ - public function getDate() - { - return $this->date; - } - - /** - * Get published date. - * - * @return \DateTime - */ - public function getPublishedDate() - { - return $this->publishedDate; - } - - /** - * Get updated date. - * - * @return \DateTime - */ - public function getUpdatedDate() - { - return $this->updatedDate; - } - - /** - * Get content. - * - * @return string - */ - public function getContent() - { - return $this->content; - } - - /** - * Set content - * - * @access public - * @param string $value - * @return Item - */ - public function setContent($value) - { - $this->content = $value; - return $this; - } - - /** - * Get enclosure url. - * - * @return string - */ - public function getEnclosureUrl() - { - return $this->enclosureUrl; - } - - /** - * Get enclosure type. - * - * @return string - */ - public function getEnclosureType() - { - return $this->enclosureType; - } - - /** - * Get language. - * - * @return string - */ - public function getLanguage() - { - return $this->language; - } - - /** - * Get categories. - * - * @return string - */ - public function getCategories() - { - return $this->categories; - } - - /** - * Get author. - * - * @return string - */ - public function getAuthor() - { - return $this->author; - } - - /** - * Return true if the item is "Right to Left". - * - * @return bool - */ - public function isRTL() - { - return Parser::isLanguageRTL($this->language); - } - - /** - * Set item id. - * - * @param string $id - * @return Item - */ - public function setId($id) - { - $this->id = $id; - return $this; - } - - /** - * Set item title. - * - * @param string $title - * @return Item - */ - public function setTitle($title) - { - $this->title = $title; - return $this; - } - - /** - * Set author. - * - * @param string $author - * @return Item - */ - public function setAuthor($author) - { - $this->author = $author; - return $this; - } - - /** - * Set item date. - * - * @param \DateTime $date - * @return Item - */ - public function setDate($date) - { - $this->date = $date; - return $this; - } - - /** - * Set item published date. - * - * @param \DateTime $publishedDate - * @return Item - */ - public function setPublishedDate($publishedDate) - { - $this->publishedDate = $publishedDate; - return $this; - } - - /** - * Set item updated date. - * - * @param \DateTime $updatedDate - * @return Item - */ - public function setUpdatedDate($updatedDate) - { - $this->updatedDate = $updatedDate; - return $this; - } - - /** - * Set enclosure url. - * - * @param string $enclosureUrl - * @return Item - */ - public function setEnclosureUrl($enclosureUrl) - { - $this->enclosureUrl = $enclosureUrl; - return $this; - } - - /** - * Set enclosure type. - * - * @param string $enclosureType - * @return Item - */ - public function setEnclosureType($enclosureType) - { - $this->enclosureType = $enclosureType; - return $this; - } - - /** - * Set item language. - * - * @param string $language - * @return Item - */ - public function setLanguage($language) - { - $this->language = $language; - return $this; - } - - /** - * Set item categories. - * - * @param array $categories - * @return Item - */ - public function setCategories($categories) - { - $this->categories = $categories; - return $this; - } - - /** - * Set item categories from xml. - * - * @param SimpleXMLElement[] $categories - * @return Item - */ - public function setCategoriesFromXml($categories) - { - if ($categories !== false) { - $this->setCategories( - array_map( - function ($element) { - return trim((string) $element); - }, - $categories - ) - ); - } else { - $categories = array(); - } - return $this; - } - - /** - * Set raw XML. - * - * @param \SimpleXMLElement $xml - * @return Item - */ - public function setXml($xml) - { - $this->xml = $xml; - return $this; - } - - /** - * Get raw XML. - * - * @return \SimpleXMLElement - */ - public function getXml() - { - return $this->xml; - } - - /** - * Set XML namespaces. - * - * @param array $namespaces - * @return Item - */ - public function setNamespaces($namespaces) - { - $this->namespaces = $namespaces; - return $this; - } - - /** - * Get XML namespaces. - * - * @return array - */ - public function getNamespaces() - { - return $this->namespaces; - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Parser/MalformedXmlException.php b/vendor/miniflux/picofeed/lib/PicoFeed/Parser/MalformedXmlException.php deleted file mode 100644 index efaf0ff1..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Parser/MalformedXmlException.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php - -namespace PicoFeed\Parser; - -/** - * MalformedXmlException Exception. - * - * @package PicoFeed\Parser - * @author Frederic Guillot - */ -class MalformedXmlException extends ParserException -{ -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Parser/Parser.php b/vendor/miniflux/picofeed/lib/PicoFeed/Parser/Parser.php deleted file mode 100644 index 3ee99f59..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Parser/Parser.php +++ /dev/null @@ -1,404 +0,0 @@ -<?php - -namespace PicoFeed\Parser; - -use PicoFeed\Processor\ContentFilterProcessor; -use PicoFeed\Processor\ContentGeneratorProcessor; -use PicoFeed\Processor\ItemPostProcessor; -use PicoFeed\Processor\ScraperProcessor; -use SimpleXMLElement; -use PicoFeed\Client\Url; -use PicoFeed\Encoding\Encoding; -use PicoFeed\Filter\Filter; -use PicoFeed\Logging\Logger; - -/** - * Base parser class. - * - * @package PicoFeed\Parser - * @author Frederic Guillot - */ -abstract class Parser implements ParserInterface -{ - /** - * Config object. - * - * @var \PicoFeed\Config\Config - */ - private $config; - - /** - * DateParser object. - * - * @var \PicoFeed\Parser\DateParser - */ - private $dateParser; - - /** - * Hash algorithm used to generate item id, any value supported by PHP, see hash_algos(). - * - * @var string - */ - private $hash_algo = 'sha256'; - - /** - * Feed content (XML data). - * - * @var string - */ - protected $content = ''; - - /** - * Fallback url. - * - * @var string - */ - protected $fallback_url = ''; - - /** - * XML namespaces supported by parser. - * - * @var array - */ - protected $namespaces = array(); - - /** - * XML namespaces used in document. - * - * @var array - */ - protected $used_namespaces = array(); - - /** - * Item Post Processor instance - * - * @access private - * @var ItemPostProcessor - */ - private $itemPostProcessor; - - /** - * Constructor. - * - * @param string $content Feed content - * @param string $http_encoding HTTP encoding (headers) - * @param string $fallback_url Fallback url when the feed provide relative or broken url - */ - public function __construct($content, $http_encoding = '', $fallback_url = '') - { - $this->fallback_url = $fallback_url; - $xml_encoding = XmlParser::getEncodingFromXmlTag($content); - - // Strip XML tag to avoid multiple encoding/decoding in the next XML processing - $this->content = Filter::stripXmlTag($content); - - // Encode everything in UTF-8 - Logger::setMessage(get_called_class().': HTTP Encoding "'.$http_encoding.'" ; XML Encoding "'.$xml_encoding.'"'); - $this->content = Encoding::convert($this->content, $xml_encoding ?: $http_encoding); - - $this->itemPostProcessor = new ItemPostProcessor($this->config); - $this->itemPostProcessor->register(new ContentGeneratorProcessor($this->config)); - $this->itemPostProcessor->register(new ContentFilterProcessor($this->config)); - } - - /** - * Parse the document. - * - * @return \PicoFeed\Parser\Feed - */ - public function execute() - { - Logger::setMessage(get_called_class().': begin parsing'); - - $xml = XmlParser::getSimpleXml($this->content); - - if ($xml === false) { - Logger::setMessage(get_called_class().': Applying XML workarounds'); - $this->content = Filter::normalizeData($this->content); - $xml = XmlParser::getSimpleXml($this->content); - - if ($xml === false) { - Logger::setMessage(get_called_class().': XML parsing error'); - Logger::setMessage(XmlParser::getErrors()); - throw new MalformedXmlException('XML parsing error'); - } - } - - $this->used_namespaces = $xml->getNamespaces(true); - $xml = $this->registerSupportedNamespaces($xml); - - $feed = new Feed(); - - $this->findFeedUrl($xml, $feed); - $this->checkFeedUrl($feed); - - $this->findSiteUrl($xml, $feed); - $this->checkSiteUrl($feed); - - $this->findFeedTitle($xml, $feed); - $this->findFeedDescription($xml, $feed); - $this->findFeedLanguage($xml, $feed); - $this->findFeedId($xml, $feed); - $this->findFeedDate($xml, $feed); - $this->findFeedLogo($xml, $feed); - $this->findFeedIcon($xml, $feed); - - foreach ($this->getItemsTree($xml) as $entry) { - $entry = $this->registerSupportedNamespaces($entry); - - $item = new Item(); - $item->xml = $entry; - $item->namespaces = $this->used_namespaces; - - $this->findItemAuthor($xml, $entry, $item); - - $this->findItemUrl($entry, $item); - $this->checkItemUrl($feed, $item); - - $this->findItemTitle($entry, $item); - $this->findItemContent($entry, $item); - - // Id generation can use the item url/title/content (order is important) - $this->findItemId($entry, $item, $feed); - $this->findItemDate($entry, $item, $feed); - $this->findItemEnclosure($entry, $item, $feed); - $this->findItemLanguage($entry, $item, $feed); - $this->findItemCategories($entry, $item, $feed); - - $this->itemPostProcessor->execute($feed, $item); - $feed->items[] = $item; - } - - Logger::setMessage(get_called_class().PHP_EOL.$feed); - - return $feed; - } - - /** - * Check if the feed url is correct. - * - * @param Feed $feed Feed object - */ - public function checkFeedUrl(Feed $feed) - { - if ($feed->getFeedUrl() === '') { - $feed->feedUrl = $this->fallback_url; - } else { - $feed->feedUrl = Url::resolve($feed->getFeedUrl(), $this->fallback_url); - } - } - - /** - * Check if the site url is correct. - * - * @param Feed $feed Feed object - */ - public function checkSiteUrl(Feed $feed) - { - if ($feed->getSiteUrl() === '') { - $feed->siteUrl = Url::base($feed->getFeedUrl()); - } else { - $feed->siteUrl = Url::resolve($feed->getSiteUrl(), $this->fallback_url); - } - } - - /** - * Check if the item url is correct. - * - * @param Feed $feed Feed object - * @param Item $item Item object - */ - public function checkItemUrl(Feed $feed, Item $item) - { - $item->url = Url::resolve($item->getUrl(), $feed->getSiteUrl()); - } - - /** - * Find the item date. - * - * @param SimpleXMLElement $entry Feed item - * @param Item $item Item object - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findItemDate(SimpleXMLElement $entry, Item $item, Feed $feed) - { - $this->findItemPublishedDate($entry, $item, $feed); - $this->findItemUpdatedDate($entry, $item, $feed); - - if ($item->getPublishedDate() === null) { - // Use the updated date if available, otherwise use the feed date - $item->setPublishedDate($item->getUpdatedDate() ?: $feed->getDate()); - } - - if ($item->getUpdatedDate() === null) { - // Use the published date as fallback - $item->setUpdatedDate($item->getPublishedDate()); - } - - // Use the most recent of published and updated dates - $item->setDate(max($item->getPublishedDate(), $item->getUpdatedDate())); - } - - /** - * Get Item Post Processor instance - * - * @access public - * @return ItemPostProcessor - */ - public function getItemPostProcessor() - { - return $this->itemPostProcessor; - } - - /** - * Get DateParser instance - * - * @access public - * @return DateParser - */ - public function getDateParser() - { - if ($this->dateParser === null) { - $this->dateParser = new DateParser($this->config); - } - - return $this->dateParser; - } - - /** - * Generate a unique id for an entry (hash all arguments). - * - * @return string - */ - public function generateId() - { - return hash($this->hash_algo, implode(func_get_args())); - } - - /** - * Return true if the given language is "Right to Left". - * - * @static - * - * @param string $language Language: fr-FR, en-US - * - * @return bool - */ - public static function isLanguageRTL($language) - { - $language = strtolower($language); - - $rtl_languages = array( - 'ar', // Arabic (ar-**) - 'fa', // Farsi (fa-**) - 'ur', // Urdu (ur-**) - 'ps', // Pashtu (ps-**) - 'syr', // Syriac (syr-**) - 'dv', // Divehi (dv-**) - 'he', // Hebrew (he-**) - 'yi', // Yiddish (yi-**) - ); - - foreach ($rtl_languages as $prefix) { - if (strpos($language, $prefix) === 0) { - return true; - } - } - - return false; - } - - /** - * Set Hash algorithm used for id generation. - * - * @param string $algo Algorithm name - * @return \PicoFeed\Parser\Parser - */ - public function setHashAlgo($algo) - { - $this->hash_algo = $algo ?: $this->hash_algo; - return $this; - } - - /** - * Set config object. - * - * @param \PicoFeed\Config\Config $config Config instance - * - * @return \PicoFeed\Parser\Parser - */ - public function setConfig($config) - { - $this->config = $config; - $this->itemPostProcessor->setConfig($config); - return $this; - } - - /** - * Enable the content grabber. - * - * @return \PicoFeed\Parser\Parser - */ - public function disableContentFiltering() - { - $this->itemPostProcessor->unregister('PicoFeed\Processor\ContentFilterProcessor'); - return $this; - } - - /** - * Enable the content grabber. - * - * @param bool $needsRuleFile true if only pages with rule files should be - * scraped - * @param null|\Closure $scraperCallback Callback function that gets called for each - * scraper execution - * - * @return \PicoFeed\Parser\Parser - */ - public function enableContentGrabber($needsRuleFile = false, $scraperCallback = null) - { - $processor = new ScraperProcessor($this->config); - - if ($needsRuleFile) { - $processor->getScraper()->disableCandidateParser(); - } - - if ($scraperCallback !== null) { - $processor->setExecutionCallback($scraperCallback); - } - - $this->itemPostProcessor->register($processor); - return $this; - } - - /** - * Set ignored URLs for the content grabber. - * - * @param array $urls URLs - * - * @return \PicoFeed\Parser\Parser - */ - public function setGrabberIgnoreUrls(array $urls) - { - $this->itemPostProcessor->getProcessor('PicoFeed\Processor\ScraperProcessor')->ignoreUrls($urls); - return $this; - } - - /** - * Register all supported namespaces to be used within an xpath query. - * - * @param SimpleXMLElement $xml Feed xml - * - * @return SimpleXMLElement - */ - public function registerSupportedNamespaces(SimpleXMLElement $xml) - { - foreach ($this->namespaces as $prefix => $ns) { - $xml->registerXPathNamespace($prefix, $ns); - } - - return $xml; - } - - -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Parser/ParserException.php b/vendor/miniflux/picofeed/lib/PicoFeed/Parser/ParserException.php deleted file mode 100644 index b5fbb699..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Parser/ParserException.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php - -namespace PicoFeed\Parser; - -use PicoFeed\PicoFeedException; - -/** - * ParserException Exception. - * - * @package PicoFeed\Parser - * @author Frederic Guillot - */ -abstract class ParserException extends PicoFeedException -{ -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Parser/ParserInterface.php b/vendor/miniflux/picofeed/lib/PicoFeed/Parser/ParserInterface.php deleted file mode 100644 index 8d6be085..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Parser/ParserInterface.php +++ /dev/null @@ -1,182 +0,0 @@ -<?php - -namespace PicoFeed\Parser; - -use SimpleXMLElement; - -/** - * Interface ParserInterface - * - * @package PicoFeed\Parser - * @author Frederic Guillot - */ -interface ParserInterface -{ - /** - * Find the feed url. - * - * @param SimpleXMLElement $xml Feed xml - * @param Feed $feed Feed object - */ - public function findFeedUrl(SimpleXMLElement $xml, Feed $feed); - - /** - * Find the site url. - * - * @param SimpleXMLElement $xml Feed xml - * @param Feed $feed Feed object - */ - public function findSiteUrl(SimpleXMLElement $xml, Feed $feed); - - /** - * Find the feed title. - * - * @param SimpleXMLElement $xml Feed xml - * @param Feed $feed Feed object - */ - public function findFeedTitle(SimpleXMLElement $xml, Feed $feed); - - /** - * Find the feed description. - * - * @param SimpleXMLElement $xml Feed xml - * @param Feed $feed Feed object - */ - public function findFeedDescription(SimpleXMLElement $xml, Feed $feed); - - /** - * Find the feed language. - * - * @param SimpleXMLElement $xml Feed xml - * @param Feed $feed Feed object - */ - public function findFeedLanguage(SimpleXMLElement $xml, Feed $feed); - - /** - * Find the feed id. - * - * @param SimpleXMLElement $xml Feed xml - * @param Feed $feed Feed object - */ - public function findFeedId(SimpleXMLElement $xml, Feed $feed); - - /** - * Find the feed date. - * - * @param SimpleXMLElement $xml Feed xml - * @param Feed $feed Feed object - */ - public function findFeedDate(SimpleXMLElement $xml, Feed $feed); - - /** - * Find the feed logo url. - * - * @param SimpleXMLElement $xml Feed xml - * @param Feed $feed Feed object - */ - public function findFeedLogo(SimpleXMLElement $xml, Feed $feed); - - /** - * Find the feed icon. - * - * @param SimpleXMLElement $xml Feed xml - * @param Feed $feed Feed object - */ - public function findFeedIcon(SimpleXMLElement $xml, Feed $feed); - - /** - * Get the path to the items XML tree. - * - * @param SimpleXMLElement $xml Feed xml - * - * @return SimpleXMLElement - */ - public function getItemsTree(SimpleXMLElement $xml); - - /** - * Find the item author. - * - * @param SimpleXMLElement $xml Feed - * @param SimpleXMLElement $entry Feed item - * @param Item $item Item object - */ - public function findItemAuthor(SimpleXMLElement $xml, SimpleXMLElement $entry, Item $item); - - /** - * Find the item URL. - * - * @param SimpleXMLElement $entry Feed item - * @param Item $item Item object - */ - public function findItemUrl(SimpleXMLElement $entry, Item $item); - - /** - * Find the item title. - * - * @param SimpleXMLElement $entry Feed item - * @param Item $item Item object - */ - public function findItemTitle(SimpleXMLElement $entry, Item $item); - - /** - * Genereate the item id. - * - * @param SimpleXMLElement $entry Feed item - * @param Item $item Item object - * @param Feed $feed Feed object - */ - public function findItemId(SimpleXMLElement $entry, Item $item, Feed $feed); - - /** - * Find the item published date. - * - * @param SimpleXMLElement $entry Feed item - * @param Item $item Item object - * @param Feed $feed Feed object - */ - public function findItemPublishedDate(SimpleXMLElement $entry, Item $item, Feed $feed); - - /** - * Find the item updated date. - * - * @param SimpleXMLElement $entry Feed item - * @param Item $item Item object - * @param Feed $feed Feed object - */ - public function findItemUpdatedDate(SimpleXMLElement $entry, Item $item, Feed $feed); - - /** - * Find the item content. - * - * @param SimpleXMLElement $entry Feed item - * @param Item $item Item object - */ - public function findItemContent(SimpleXMLElement $entry, Item $item); - - /** - * Find the item enclosure. - * - * @param SimpleXMLElement $entry Feed item - * @param Item $item Item object - * @param Feed $feed Feed object - */ - public function findItemEnclosure(SimpleXMLElement $entry, Item $item, Feed $feed); - - /** - * Find the item language. - * - * @param SimpleXMLElement $entry Feed item - * @param Item $item Item object - * @param Feed $feed Feed object - */ - public function findItemLanguage(SimpleXMLElement $entry, Item $item, Feed $feed); - - /** - * Find the item categories. - * - * @param SimpleXMLElement $entry Feed item - * @param Item $item Item object - * @param Feed $feed Feed object - */ - public function findItemCategories(SimpleXMLElement $entry, Item $item, Feed $feed); -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Parser/Rss10.php b/vendor/miniflux/picofeed/lib/PicoFeed/Parser/Rss10.php deleted file mode 100644 index bb9bf424..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Parser/Rss10.php +++ /dev/null @@ -1,306 +0,0 @@ -<?php - -namespace PicoFeed\Parser; - -use SimpleXMLElement; -use PicoFeed\Filter\Filter; - -/** - * RSS 1.0 parser. - * - * @package PicoFeed\Parser - * @author Frederic Guillot - */ -class Rss10 extends Parser -{ - /** - * Supported namespaces. - */ - protected $namespaces = array( - 'rss' => 'http://purl.org/rss/1.0/', - 'dc' => 'http://purl.org/dc/elements/1.1/', - 'content' => 'http://purl.org/rss/1.0/modules/content/', - 'feedburner' => 'http://rssnamespace.org/feedburner/ext/1.0', - ); - - /** - * Get the path to the items XML tree. - * - * @param SimpleXMLElement $xml Feed xml - * - * @return SimpleXMLElement - */ - public function getItemsTree(SimpleXMLElement $xml) - { - return XmlParser::getXPathResult($xml, 'rss:item', $this->namespaces) - ?: XmlParser::getXPathResult($xml, 'item') - ?: $xml->item; - } - - /** - * Find the feed url. - * - * @param SimpleXMLElement $xml Feed xml - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findFeedUrl(SimpleXMLElement $xml, Feed $feed) - { - $feed->setFeedUrl(''); - } - - /** - * Find the site url. - * - * @param SimpleXMLElement $xml Feed xml - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findSiteUrl(SimpleXMLElement $xml, Feed $feed) - { - $value = XmlParser::getXPathResult($xml, 'rss:channel/rss:link', $this->namespaces) - ?: XmlParser::getXPathResult($xml, 'channel/link') - ?: $xml->channel->link; - - $feed->setSiteUrl(XmlParser::getValue($value)); - } - - /** - * Find the feed description. - * - * @param SimpleXMLElement $xml Feed xml - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findFeedDescription(SimpleXMLElement $xml, Feed $feed) - { - $description = XmlParser::getXPathResult($xml, 'rss:channel/rss:description', $this->namespaces) - ?: XmlParser::getXPathResult($xml, 'channel/description') - ?: $xml->channel->description; - - $feed->setDescription(XmlParser::getValue($description)); - } - - /** - * Find the feed logo url. - * - * @param SimpleXMLElement $xml Feed xml - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findFeedLogo(SimpleXMLElement $xml, Feed $feed) - { - $logo = XmlParser::getXPathResult($xml, 'rss:image/rss:url', $this->namespaces) - ?: XmlParser::getXPathResult($xml, 'image/url'); - - $feed->setLogo(XmlParser::getValue($logo)); - } - - /** - * Find the feed icon. - * - * @param SimpleXMLElement $xml Feed xml - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findFeedIcon(SimpleXMLElement $xml, Feed $feed) - { - $feed->setIcon(''); - } - - /** - * Find the feed title. - * - * @param SimpleXMLElement $xml Feed xml - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findFeedTitle(SimpleXMLElement $xml, Feed $feed) - { - $title = XmlParser::getXPathResult($xml, 'rss:channel/rss:title', $this->namespaces) - ?: XmlParser::getXPathResult($xml, 'channel/title') - ?: $xml->channel->title; - - $feed->setTitle(Filter::stripWhiteSpace(XmlParser::getValue($title)) ?: $feed->getSiteUrl()); - } - - /** - * Find the feed language. - * - * @param SimpleXMLElement $xml Feed xml - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findFeedLanguage(SimpleXMLElement $xml, Feed $feed) - { - $language = XmlParser::getXPathResult($xml, 'rss:channel/dc:language', $this->namespaces) - ?: XmlParser::getXPathResult($xml, 'channel/dc:language', $this->namespaces); - - $feed->setLanguage(XmlParser::getValue($language)); - } - - /** - * Find the feed id. - * - * @param SimpleXMLElement $xml Feed xml - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findFeedId(SimpleXMLElement $xml, Feed $feed) - { - $feed->setId($feed->getFeedUrl() ?: $feed->getSiteUrl()); - } - - /** - * Find the feed date. - * - * @param SimpleXMLElement $xml Feed xml - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findFeedDate(SimpleXMLElement $xml, Feed $feed) - { - $date = XmlParser::getXPathResult($xml, 'rss:channel/dc:date', $this->namespaces) - ?: XmlParser::getXPathResult($xml, 'channel/dc:date', $this->namespaces); - - $feed->setDate($this->getDateParser()->getDateTime(XmlParser::getValue($date))); - } - - /** - * Find the item published date. - * - * @param SimpleXMLElement $entry Feed item - * @param Item $item Item object - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findItemPublishedDate(SimpleXMLElement $entry, Item $item, Feed $feed) - { - $date = XmlParser::getXPathResult($entry, 'dc:date', $this->namespaces); - - $item->setPublishedDate(!empty($date) ? $this->getDateParser()->getDateTime(XmlParser::getValue($date)) : null); - } - - /** - * Find the item updated date. - * - * @param SimpleXMLElement $entry Feed item - * @param Item $item Item object - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findItemUpdatedDate(SimpleXMLElement $entry, Item $item, Feed $feed) - { - if ($item->publishedDate === null) { - $this->findItemPublishedDate($entry, $item, $feed); - } - $item->setUpdatedDate($item->getPublishedDate()); // No updated date in RSS 1.0 specifications - } - - /** - * Find the item title. - * - * @param SimpleXMLElement $entry Feed item - * @param \PicoFeed\Parser\Item $item Item object - */ - public function findItemTitle(SimpleXMLElement $entry, Item $item) - { - $title = XmlParser::getXPathResult($entry, 'rss:title', $this->namespaces) - ?: XmlParser::getXPathResult($entry, 'title') - ?: $entry->title; - - $item->setTitle(Filter::stripWhiteSpace(XmlParser::getValue($title)) ?: $item->getUrl()); - } - - /** - * Find the item author. - * - * @param SimpleXMLElement $xml Feed - * @param SimpleXMLElement $entry Feed item - * @param \PicoFeed\Parser\Item $item Item object - */ - public function findItemAuthor(SimpleXMLElement $xml, SimpleXMLElement $entry, Item $item) - { - $author = XmlParser::getXPathResult($entry, 'dc:creator', $this->namespaces) - ?: XmlParser::getXPathResult($xml, 'rss:channel/dc:creator', $this->namespaces) - ?: XmlParser::getXPathResult($xml, 'channel/dc:creator', $this->namespaces); - - $item->setAuthor(XmlParser::getValue($author)); - } - - /** - * Find the item content. - * - * @param SimpleXMLElement $entry Feed item - * @param \PicoFeed\Parser\Item $item Item object - */ - public function findItemContent(SimpleXMLElement $entry, Item $item) - { - $content = XmlParser::getXPathResult($entry, 'content:encoded', $this->namespaces); - - if (XmlParser::getValue($content) === '') { - $content = XmlParser::getXPathResult($entry, 'rss:description', $this->namespaces) - ?: XmlParser::getXPathResult($entry, 'description') - ?: $entry->description; - } - - $item->setContent(XmlParser::getValue($content)); - } - - /** - * Find the item URL. - * - * @param SimpleXMLElement $entry Feed item - * @param \PicoFeed\Parser\Item $item Item object - */ - public function findItemUrl(SimpleXMLElement $entry, Item $item) - { - $link = XmlParser::getXPathResult($entry, 'feedburner:origLink', $this->namespaces) - ?: XmlParser::getXPathResult($entry, 'rss:link', $this->namespaces) - ?: XmlParser::getXPathResult($entry, 'link') - ?: $entry->link; - - $item->setUrl(XmlParser::getValue($link)); - } - - /** - * Genereate the item id. - * - * @param SimpleXMLElement $entry Feed item - * @param \PicoFeed\Parser\Item $item Item object - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findItemId(SimpleXMLElement $entry, Item $item, Feed $feed) - { - $item->setId($this->generateId( - $item->getTitle(), $item->getUrl(), $item->getContent() - )); - } - - /** - * Find the item enclosure. - * - * @param SimpleXMLElement $entry Feed item - * @param \PicoFeed\Parser\Item $item Item object - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findItemEnclosure(SimpleXMLElement $entry, Item $item, Feed $feed) - { - } - - /** - * Find the item language. - * - * @param SimpleXMLElement $entry Feed item - * @param \PicoFeed\Parser\Item $item Item object - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findItemLanguage(SimpleXMLElement $entry, Item $item, Feed $feed) - { - $language = XmlParser::getXPathResult($entry, 'dc:language', $this->namespaces); - - $item->setLanguage(XmlParser::getValue($language) ?: $feed->getLanguage()); - } - - /** - * Find the item categories. - * - * @param SimpleXMLElement $entry Feed item - * @param Item $item Item object - * @param Feed $feed Feed object - */ - public function findItemCategories(SimpleXMLElement $entry, Item $item, Feed $feed) - { - $categories = XmlParser::getXPathResult($entry, 'dc:subject', $this->namespaces); - $item->setCategoriesFromXml($categories); - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Parser/Rss20.php b/vendor/miniflux/picofeed/lib/PicoFeed/Parser/Rss20.php deleted file mode 100644 index 1dd3bf8c..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Parser/Rss20.php +++ /dev/null @@ -1,319 +0,0 @@ -<?php - -namespace PicoFeed\Parser; - -use SimpleXMLElement; -use PicoFeed\Filter\Filter; -use PicoFeed\Client\Url; - -/** - * RSS 2.0 Parser. - * - * @package PicoFeed\Parser - * @author Frederic Guillot - */ -class Rss20 extends Parser -{ - /** - * Supported namespaces. - */ - protected $namespaces = array( - 'dc' => 'http://purl.org/dc/elements/1.1/', - 'content' => 'http://purl.org/rss/1.0/modules/content/', - 'feedburner' => 'http://rssnamespace.org/feedburner/ext/1.0', - 'atom' => 'http://www.w3.org/2005/Atom', - ); - - /** - * Get the path to the items XML tree. - * - * @param SimpleXMLElement $xml Feed xml - * - * @return SimpleXMLElement - */ - public function getItemsTree(SimpleXMLElement $xml) - { - return XmlParser::getXPathResult($xml, 'channel/item'); - } - - /** - * Find the feed url. - * - * @param SimpleXMLElement $xml Feed xml - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findFeedUrl(SimpleXMLElement $xml, Feed $feed) - { - $feed->setFeedUrl(''); - } - - /** - * Find the site url. - * - * @param SimpleXMLElement $xml Feed xml - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findSiteUrl(SimpleXMLElement $xml, Feed $feed) - { - $value = XmlParser::getXPathResult($xml, 'channel/link'); - $feed->setSiteUrl(XmlParser::getValue($value)); - } - - /** - * Find the feed description. - * - * @param SimpleXMLElement $xml Feed xml - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findFeedDescription(SimpleXMLElement $xml, Feed $feed) - { - $value = XmlParser::getXPathResult($xml, 'channel/description'); - $feed->setDescription(XmlParser::getValue($value)); - } - - /** - * Find the feed logo url. - * - * @param SimpleXMLElement $xml Feed xml - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findFeedLogo(SimpleXMLElement $xml, Feed $feed) - { - $value = XmlParser::getXPathResult($xml, 'channel/image/url'); - $feed->setLogo(XmlParser::getValue($value)); - } - - /** - * Find the feed icon. - * - * @param SimpleXMLElement $xml Feed xml - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findFeedIcon(SimpleXMLElement $xml, Feed $feed) - { - $feed->setIcon(''); - } - - /** - * Find the feed title. - * - * @param SimpleXMLElement $xml Feed xml - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findFeedTitle(SimpleXMLElement $xml, Feed $feed) - { - $title = XmlParser::getXPathResult($xml, 'channel/title'); - $feed->setTitle(Filter::stripWhiteSpace(XmlParser::getValue($title)) ?: $feed->getSiteUrl()); - } - - /** - * Find the feed language. - * - * @param SimpleXMLElement $xml Feed xml - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findFeedLanguage(SimpleXMLElement $xml, Feed $feed) - { - $value = XmlParser::getXPathResult($xml, 'channel/language'); - $feed->setLanguage(XmlParser::getValue($value)); - } - - /** - * Find the feed id. - * - * @param SimpleXMLElement $xml Feed xml - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findFeedId(SimpleXMLElement $xml, Feed $feed) - { - $feed->setId($feed->getFeedUrl() ?: $feed->getSiteUrl()); - } - - /** - * Find the feed date. - * - * @param SimpleXMLElement $xml Feed xml - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findFeedDate(SimpleXMLElement $xml, Feed $feed) - { - $publish_date = XmlParser::getXPathResult($xml, 'channel/pubDate'); - $update_date = XmlParser::getXPathResult($xml, 'channel/lastBuildDate'); - - $published = !empty($publish_date) ? $this->getDateParser()->getDateTime(XmlParser::getValue($publish_date)) : null; - $updated = !empty($update_date) ? $this->getDateParser()->getDateTime(XmlParser::getValue($update_date)) : null; - - if ($published === null && $updated === null) { - $feed->setDate($this->getDateParser()->getCurrentDateTime()); // We use the current date if there is no date for the feed - } elseif ($published !== null && $updated !== null) { - $feed->setDate(max($published, $updated)); // We use the most recent date between published and updated - } else { - $feed->setDate($updated ?: $published); - } - } - - /** - * Find the item published date. - * - * @param SimpleXMLElement $entry Feed item - * @param Item $item Item object - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findItemPublishedDate(SimpleXMLElement $entry, Item $item, Feed $feed) - { - $date = XmlParser::getXPathResult($entry, 'pubDate'); - - $item->setPublishedDate(!empty($date) ? $this->getDateParser()->getDateTime(XmlParser::getValue($date)) : null); - } - - /** - * Find the item updated date. - * - * @param SimpleXMLElement $entry Feed item - * @param Item $item Item object - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findItemUpdatedDate(SimpleXMLElement $entry, Item $item, Feed $feed) - { - if ($item->publishedDate === null) { - $this->findItemPublishedDate($entry, $item, $feed); - } - $item->setUpdatedDate($item->getPublishedDate()); // No updated date in RSS 2.0 specifications - } - - /** - * Find the item title. - * - * @param SimpleXMLElement $entry Feed item - * @param \PicoFeed\Parser\Item $item Item object - */ - public function findItemTitle(SimpleXMLElement $entry, Item $item) - { - $value = XmlParser::getXPathResult($entry, 'title'); - $item->setTitle(Filter::stripWhiteSpace(XmlParser::getValue($value)) ?: $item->getUrl()); - } - - /** - * Find the item author. - * - * @param SimpleXMLElement $xml Feed - * @param SimpleXMLElement $entry Feed item - * @param \PicoFeed\Parser\Item $item Item object - */ - public function findItemAuthor(SimpleXMLElement $xml, SimpleXMLElement $entry, Item $item) - { - $value = XmlParser::getXPathResult($entry, 'dc:creator', $this->namespaces) - ?: XmlParser::getXPathResult($entry, 'author') - ?: XmlParser::getXPathResult($xml, 'channel/dc:creator', $this->namespaces) - ?: XmlParser::getXPathResult($xml, 'channel/managingEditor'); - - $item->setAuthor(XmlParser::getValue($value)); - } - - /** - * Find the item content. - * - * @param SimpleXMLElement $entry Feed item - * @param \PicoFeed\Parser\Item $item Item object - */ - public function findItemContent(SimpleXMLElement $entry, Item $item) - { - $content = XmlParser::getXPathResult($entry, 'content:encoded', $this->namespaces); - - if (XmlParser::getValue($content) === '') { - $content = XmlParser::getXPathResult($entry, 'description'); - } - - $item->setContent(XmlParser::getValue($content)); - } - - /** - * Find the item URL. - * - * @param SimpleXMLElement $entry Feed item - * @param \PicoFeed\Parser\Item $item Item object - */ - public function findItemUrl(SimpleXMLElement $entry, Item $item) - { - $link = XmlParser::getXPathResult($entry, 'feedburner:origLink', $this->namespaces) - ?: XmlParser::getXPathResult($entry, 'link') - ?: XmlParser::getXPathResult($entry, 'atom:link/@href', $this->namespaces); - - if (!empty($link)) { - $item->setUrl(XmlParser::getValue($link)); - } else { - $link = XmlParser::getXPathResult($entry, 'guid'); - $link = XmlParser::getValue($link); - - if (filter_var($link, FILTER_VALIDATE_URL) !== false) { - $item->setUrl($link); - } - } - } - - /** - * Genereate the item id. - * - * @param SimpleXMLElement $entry Feed item - * @param \PicoFeed\Parser\Item $item Item object - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findItemId(SimpleXMLElement $entry, Item $item, Feed $feed) - { - $id = XmlParser::getValue(XmlParser::getXPathResult($entry, 'guid')); - - if ($id) { - $item->setId($this->generateId($id)); - } else { - $item->setId($this->generateId( - $item->getTitle(), $item->getUrl(), $item->getContent() - )); - } - } - - /** - * Find the item enclosure. - * - * @param SimpleXMLElement $entry Feed item - * @param \PicoFeed\Parser\Item $item Item object - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findItemEnclosure(SimpleXMLElement $entry, Item $item, Feed $feed) - { - if (isset($entry->enclosure)) { - $type = XmlParser::getXPathResult($entry, 'enclosure/@type'); - $url = XmlParser::getXPathResult($entry, 'feedburner:origEnclosureLink', $this->namespaces) - ?: XmlParser::getXPathResult($entry, 'enclosure/@url'); - - $item->setEnclosureUrl(Url::resolve(XmlParser::getValue($url), $feed->getSiteUrl())); - $item->setEnclosureType(XmlParser::getValue($type)); - } - } - - /** - * Find the item language. - * - * @param SimpleXMLElement $entry Feed item - * @param \PicoFeed\Parser\Item $item Item object - * @param \PicoFeed\Parser\Feed $feed Feed object - */ - public function findItemLanguage(SimpleXMLElement $entry, Item $item, Feed $feed) - { - $language = XmlParser::getXPathResult($entry, 'dc:language', $this->namespaces); - $item->setLanguage(XmlParser::getValue($language) ?: $feed->getLanguage()); - } - - /** - * Find the item categories. - * - * @param SimpleXMLElement $entry Feed item - * @param Item $item Item object - * @param Feed $feed Feed object - */ - public function findItemCategories(SimpleXMLElement $entry, Item $item, Feed $feed) - { - $categories = XmlParser::getXPathResult($entry, 'category'); - $item->setCategoriesFromXml($categories); - } - -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Parser/Rss91.php b/vendor/miniflux/picofeed/lib/PicoFeed/Parser/Rss91.php deleted file mode 100644 index 058fca1b..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Parser/Rss91.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php - -namespace PicoFeed\Parser; - -/** - * RSS 0.91 Parser. - * - * @package PicoFeed\Parser - * @author Frederic Guillot - */ -class Rss91 extends Rss20 -{ -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Parser/Rss92.php b/vendor/miniflux/picofeed/lib/PicoFeed/Parser/Rss92.php deleted file mode 100644 index e3df3c8b..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Parser/Rss92.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php - -namespace PicoFeed\Parser; - -/** - * RSS 0.92 Parser. - * - * @package PicoFeed\Parser - * @author Frederic Guillot - */ -class Rss92 extends Rss20 -{ -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Parser/XmlEntityException.php b/vendor/miniflux/picofeed/lib/PicoFeed/Parser/XmlEntityException.php deleted file mode 100644 index 1188217d..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Parser/XmlEntityException.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php - -namespace PicoFeed\Parser; - -/** - * XmlEntityException Exception. - * - * @package PicoFeed\Parser - * @author Bernhard Posselt - */ -class XmlEntityException extends MalformedXmlException -{ -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Parser/XmlParser.php b/vendor/miniflux/picofeed/lib/PicoFeed/Parser/XmlParser.php deleted file mode 100644 index ea42949f..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Parser/XmlParser.php +++ /dev/null @@ -1,246 +0,0 @@ -<?php - -namespace PicoFeed\Parser; - -use DOMDocument; -use SimpleXMLElement; -use ZendXml\Exception\RuntimeException; -use ZendXml\Security; - -/** - * XML parser class. - * - * Checks for XML eXternal Entity (XXE) and XML Entity Expansion (XEE) attacks on XML documents - * - * @package PicoFeed\Parser - * @author Frederic Guillot - */ -class XmlParser -{ - /** - * Get a SimpleXmlElement instance or return false. - * - * @static - * @param string $input XML content - * @return mixed - */ - public static function getSimpleXml($input) - { - return self::scan($input); - } - - /** - * Get a DomDocument instance or return false. - * - * @static - * @param string $input XML content - * @return DOMDocument - */ - public static function getDomDocument($input) - { - if (empty($input)) { - return false; - } - - $dom = self::scan($input, new DOMDocument()); - - // The document is empty, there is probably some parsing errors - if ($dom && $dom->childNodes->length === 0) { - return false; - } - - return $dom; - } - - /** - * Small wrapper around ZendXml to turn their exceptions into PicoFeed exceptions - * - * @static - * @access private - * @param string $input - * @param DOMDocument $dom - * @throws XmlEntityException - * @return SimpleXMLElement|DomDocument|boolean - */ - private static function scan($input, $dom = null) - { - try { - return Security::scan($input, $dom); - } catch(RuntimeException $e) { - throw new XmlEntityException($e->getMessage()); - } - } - - /** - * Load HTML document by using a DomDocument instance or return false on failure. - * - * @static - * @access public - * @param string $input XML content - * @return DOMDocument - */ - public static function getHtmlDocument($input) - { - $dom = new DomDocument(); - - if (empty($input)) { - return $dom; - } - - libxml_use_internal_errors(true); - - if (version_compare(PHP_VERSION, '5.4.0', '>=')) { - $dom->loadHTML($input, LIBXML_NONET); - } else { - $dom->loadHTML($input); - } - - return $dom; - } - - /** - * Convert a HTML document to XML. - * - * @static - * @access public - * @param string $html HTML document - * @return string - */ - public static function htmlToXml($html) - { - $dom = self::getHtmlDocument('<?xml version="1.0" encoding="UTF-8">'.$html); - return $dom->saveXML($dom->getElementsByTagName('body')->item(0)); - } - - /** - * Get XML parser errors. - * - * @static - * @access public - * @return string - */ - public static function getErrors() - { - $errors = array(); - - foreach (libxml_get_errors() as $error) { - $errors[] = sprintf('XML error: %s (Line: %d - Column: %d - Code: %d)', - $error->message, - $error->line, - $error->column, - $error->code - ); - } - - return implode(', ', $errors); - } - - /** - * Get the encoding from a xml tag. - * - * @static - * @access public - * @param string $data Input data - * @return string - */ - public static function getEncodingFromXmlTag($data) - { - $encoding = ''; - - if (strpos($data, '<?xml') !== false) { - $data = substr($data, 0, strrpos($data, '?>')); - $data = str_replace("'", '"', $data); - - $p1 = strpos($data, 'encoding='); - $p2 = strpos($data, '"', $p1 + 10); - - if ($p1 !== false && $p2 !== false) { - $encoding = substr($data, $p1 + 10, $p2 - $p1 - 10); - $encoding = strtolower($encoding); - } - } - - return $encoding; - } - - /** - * Get the charset from a meta tag. - * - * @static - * @access public - * @param string $data Input data - * @return string - */ - public static function getEncodingFromMetaTag($data) - { - $encoding = ''; - - if (preg_match('/<meta.*?charset\s*=\s*["\']?\s*([^"\'\s\/>;]+)/i', $data, $match) === 1) { - $encoding = strtolower($match[1]); - } - - return $encoding; - } - - /** - * Rewrite XPath query to use namespace-uri and local-name derived from prefix. - * - * @static - * @access public - * @param string $query XPath query - * @param array $ns Prefix to namespace URI mapping - * @return string - */ - public static function replaceXPathPrefixWithNamespaceURI($query, array $ns) - { - return preg_replace_callback('/([A-Z0-9]+):([A-Z0-9]+)/iu', function ($matches) use ($ns) { - // don't try to map the special prefix XML - if (strtolower($matches[1]) === 'xml') { - return $matches[0]; - } - - return '*[namespace-uri()="'.$ns[$matches[1]].'" and local-name()="'.$matches[2].'"]'; - }, - $query); - } - - /** - * Get the result elements of a XPath query. - * - * @static - * @access public - * @param SimpleXMLElement $xml XML element - * @param string $query XPath query - * @param array $ns Prefix to namespace URI mapping - * @return SimpleXMLElement[] - */ - public static function getXPathResult(SimpleXMLElement $xml, $query, array $ns = array()) - { - if (!empty($ns)) { - $query = static::replaceXPathPrefixWithNamespaceURI($query, $ns); - } - - return $xml->xpath($query); - } - - /** - * Get the first Xpath result or SimpleXMLElement value - * - * @static - * @access public - * @param mixed $value - * @return string - */ - public static function getValue($value) - { - $result = ''; - - if (is_array($value) && count($value) > 0) { - $result = (string) $value[0]; - } elseif (is_a($value, 'SimpleXMLElement')) { - return $result = (string) $value; - } - - return trim($result); - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/PicoFeedException.php b/vendor/miniflux/picofeed/lib/PicoFeed/PicoFeedException.php deleted file mode 100644 index 2de9e4b7..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/PicoFeedException.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php - -namespace PicoFeed; - -use Exception; - -/** - * PicoFeedException Exception. - * - * @author Frederic Guillot - */ -abstract class PicoFeedException extends Exception -{ -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Processor/ContentFilterProcessor.php b/vendor/miniflux/picofeed/lib/PicoFeed/Processor/ContentFilterProcessor.php deleted file mode 100644 index 9b7ddcce..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Processor/ContentFilterProcessor.php +++ /dev/null @@ -1,37 +0,0 @@ -<?php - -namespace PicoFeed\Processor; - -use PicoFeed\Base; -use PicoFeed\Filter\Filter; -use PicoFeed\Logging\Logger; -use PicoFeed\Parser\Feed; -use PicoFeed\Parser\Item; - -/** - * Item Content Filter - * - * @package PicoFeed\Processor - * @author Frederic Guillot - */ -class ContentFilterProcessor extends Base implements ItemProcessorInterface -{ - /** - * Execute Item Processor - * - * @access public - * @param Feed $feed - * @param Item $item - * @return bool - */ - public function execute(Feed $feed, Item $item) - { - if ($this->config->getContentFiltering(true)) { - $filter = Filter::html($item->getContent(), $feed->getSiteUrl()); - $filter->setConfig($this->config); - $item->setContent($filter->execute()); - } else { - Logger::setMessage(get_called_class().': Content filtering disabled'); - } - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Processor/ContentGeneratorProcessor.php b/vendor/miniflux/picofeed/lib/PicoFeed/Processor/ContentGeneratorProcessor.php deleted file mode 100644 index 49adf9cc..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Processor/ContentGeneratorProcessor.php +++ /dev/null @@ -1,49 +0,0 @@ -<?php - -namespace PicoFeed\Processor; - -use PicoFeed\Base; -use PicoFeed\Parser\Feed; -use PicoFeed\Parser\Item; - -/** - * Item Content Generator - * - * @package PicoFeed\Processor - * @author Frederic Guillot - */ -class ContentGeneratorProcessor extends Base implements ItemProcessorInterface -{ - /** - * List of generators - * - * @access protected - * @var array - */ - protected $generators = array( - 'youtube', - 'file', - ); - - /** - * Execute Item Processor - * - * @access public - * @param Feed $feed - * @param Item $item - * @return bool - */ - public function execute(Feed $feed, Item $item) - { - foreach ($this->generators as $generator) { - $className = '\PicoFeed\Generator\\'.ucfirst($generator).'ContentGenerator'; - $object = new $className($this->config); - - if ($object->execute($item)) { - return true; - } - } - - return false; - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Processor/ItemPostProcessor.php b/vendor/miniflux/picofeed/lib/PicoFeed/Processor/ItemPostProcessor.php deleted file mode 100644 index d2787677..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Processor/ItemPostProcessor.php +++ /dev/null @@ -1,106 +0,0 @@ -<?php - -namespace PicoFeed\Processor; - -use PicoFeed\Base; -use PicoFeed\Parser\Feed; -use PicoFeed\Parser\Item; -use PicoFeed\Config\Config; - -/** - * Item Post Processor - * - * @package PicoFeed\Processor - * @author Frederic Guillot - */ -class ItemPostProcessor extends Base -{ - /** - * List of processors - * - * @access private - * @var array - */ - private $processors = array(); - - /** - * Execute all processors - * - * @access public - * @param Feed $feed - * @param Item $item - * @return bool - */ - public function execute(Feed $feed, Item $item) - { - foreach ($this->processors as $processor) { - if ($processor->execute($feed, $item)) { - return true; - } - } - - return false; - } - - /** - * Register a new Item post-processor - * - * @access public - * @param ItemProcessorInterface $processor - * @return ItemPostProcessor - */ - public function register(ItemProcessorInterface $processor) - { - $this->processors[get_class($processor)] = $processor; - return $this; - } - - /** - * Remove Processor instance - * - * @access public - * @param string $class - * @return ItemPostProcessor - */ - public function unregister($class) - { - if (isset($this->processors[$class])) { - unset($this->processors[$class]); - } - - return $this; - } - - /** - * Checks wheather a specific processor is registered or not - * - * @access public - * @param string $class - * @return bool - */ - public function hasProcessor($class) - { - return isset($this->processors[$class]); - } - - /** - * Get Processor instance - * - * @access public - * @param string $class - * @return ItemProcessorInterface|null - */ - public function getProcessor($class) - { - return isset($this->processors[$class]) ? $this->processors[$class] : null; - } - - public function setConfig(Config $config) - { - foreach ($this->processors as $processor) { - $processor->setConfig($config); - } - - return false; - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Processor/ItemProcessorInterface.php b/vendor/miniflux/picofeed/lib/PicoFeed/Processor/ItemProcessorInterface.php deleted file mode 100644 index 5d532262..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Processor/ItemProcessorInterface.php +++ /dev/null @@ -1,25 +0,0 @@ -<?php - -namespace PicoFeed\Processor; - -use PicoFeed\Parser\Feed; -use PicoFeed\Parser\Item; - -/** - * Item Processor Interface - * - * @package PicoFeed\Processor - * @author Frederic Guillot - */ -interface ItemProcessorInterface -{ - /** - * Execute Item Processor - * - * @access public - * @param Feed $feed - * @param Item $item - * @return bool - */ - public function execute(Feed $feed, Item $item); -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Processor/ScraperProcessor.php b/vendor/miniflux/picofeed/lib/PicoFeed/Processor/ScraperProcessor.php deleted file mode 100644 index 0c467af0..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Processor/ScraperProcessor.php +++ /dev/null @@ -1,96 +0,0 @@ -<?php - -namespace PicoFeed\Processor; - -use Closure; -use PicoFeed\Base; -use PicoFeed\Parser\Feed; -use PicoFeed\Parser\Item; -use PicoFeed\Scraper\Scraper; - -/** - * Scraper Processor - * - * @package PicoFeed\Processor - * @author Frederic Guillot - */ -class ScraperProcessor extends Base implements ItemProcessorInterface -{ - private $ignoredUrls = array(); - private $scraper; - - /** - * Callback function for each scraper execution - * - * @var Closure - */ - private $executionCallback; - - /** - * Add a new execution callback - * - * @access public - * @param Closure $executionCallback - * @return $this - */ - public function setExecutionCallback(Closure $executionCallback) - { - $this->executionCallback = $executionCallback; - return $this; - } - - /** - * Execute Item Processor - * - * @access public - * @param Feed $feed - * @param Item $item - * @return bool - */ - public function execute(Feed $feed, Item $item) - { - if (!in_array($item->getUrl(), $this->ignoredUrls)) { - $scraper = $this->getScraper(); - $scraper->setUrl($item->getUrl()); - $scraper->execute(); - - if ($this->executionCallback && is_callable($this->executionCallback)) { - call_user_func($this->executionCallback, $feed, $item, $scraper); - } - - if ($scraper->hasRelevantContent()) { - $item->setContent($scraper->getFilteredContent()); - } - } - - return false; - } - - /** - * Ignore list of URLs - * - * @access public - * @param array $urls - * @return $this - */ - public function ignoreUrls(array $urls) - { - $this->ignoredUrls = $urls; - return $this; - } - - /** - * Returns Scraper instance - * - * @access public - * @return Scraper - */ - public function getScraper() - { - if ($this->scraper === null) { - $this->scraper = new Scraper($this->config); - } - - return $this->scraper; - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Reader/Favicon.php b/vendor/miniflux/picofeed/lib/PicoFeed/Reader/Favicon.php deleted file mode 100644 index d4ca07db..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Reader/Favicon.php +++ /dev/null @@ -1,186 +0,0 @@ -<?php - -namespace PicoFeed\Reader; - -use DOMXPath; -use PicoFeed\Base; -use PicoFeed\Client\Client; -use PicoFeed\Client\ClientException; -use PicoFeed\Client\Url; -use PicoFeed\Logging\Logger; -use PicoFeed\Parser\XmlParser; - -/** - * Favicon class. - * - * https://en.wikipedia.org/wiki/Favicon - * - * @author Frederic Guillot - */ -class Favicon extends Base -{ - /** - * Valid types for favicon (supported by browsers). - * - * @var array - */ - private $types = array( - 'image/png', - 'image/gif', - 'image/x-icon', - 'image/jpeg', - 'image/jpg', - 'image/svg+xml', - ); - - /** - * Icon binary content. - * - * @var string - */ - private $content = ''; - - /** - * Icon content type. - * - * @var string - */ - private $content_type = ''; - - /** - * Get the icon file content (available only after the download). - * - * @return string - */ - public function getContent() - { - return $this->content; - } - - /** - * Get the icon file type (available only after the download). - * - * @return string - */ - public function getType() - { - foreach ($this->types as $type) { - if (strpos($this->content_type, $type) === 0) { - return $type; - } - } - - return 'image/x-icon'; - } - - /** - * Get data URI (http://en.wikipedia.org/wiki/Data_URI_scheme). - * - * @return string - */ - public function getDataUri() - { - if (empty($this->content)) { - return ''; - } - - return sprintf( - 'data:%s;base64,%s', - $this->getType(), - base64_encode($this->content) - ); - } - - /** - * Download and check if a resource exists. - * - * @param string $url URL - * @return \PicoFeed\Client\Client Client instance - */ - public function download($url) - { - $client = Client::getInstance(); - $client->setConfig($this->config); - - Logger::setMessage(get_called_class().' Download => '.$url); - - try { - $client->execute($url); - } catch (ClientException $e) { - Logger::setMessage(get_called_class().' Download Failed => '.$e->getMessage()); - } - - return $client; - } - - /** - * Check if a remote file exists. - * - * @param string $url URL - * @return bool - */ - public function exists($url) - { - return $this->download($url)->getContent() !== ''; - } - - /** - * Get the icon link for a website. - * - * @param string $website_link URL - * @param string $favicon_link optional URL - * @return string - */ - public function find($website_link, $favicon_link = '') - { - $website = new Url($website_link); - - if ($favicon_link !== '') { - $icons = array($favicon_link); - } else { - $icons = $this->extract($this->download($website->getBaseUrl('/'))->getContent()); - $icons[] = $website->getBaseUrl('/favicon.ico'); - } - - foreach ($icons as $icon_link) { - $icon_link = Url::resolve($icon_link, $website); - $resource = $this->download($icon_link); - $this->content = $resource->getContent(); - $this->content_type = $resource->getContentType(); - - if ($this->content !== '') { - return $icon_link; - } elseif ($favicon_link !== '') { - return $this->find($website_link); - } - } - - return ''; - } - - /** - * Extract the icon links from the HTML. - * - * @param string $html HTML - * @return array - */ - public function extract($html) - { - $icons = array(); - - if (empty($html)) { - return $icons; - } - - $dom = XmlParser::getHtmlDocument($html); - - $xpath = new DOMXpath($dom); - $elements = $xpath->query('//link[@rel="icon" or @rel="shortcut icon" or @rel="Shortcut Icon" or @rel="icon shortcut"]'); - - for ($i = 0; $i < $elements->length; ++$i) { - $icons[] = $elements->item($i)->getAttribute('href'); - } - - return $icons; - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Reader/Reader.php b/vendor/miniflux/picofeed/lib/PicoFeed/Reader/Reader.php deleted file mode 100644 index 769ffe93..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Reader/Reader.php +++ /dev/null @@ -1,190 +0,0 @@ -<?php - -namespace PicoFeed\Reader; - -use DOMXPath; -use PicoFeed\Base; -use PicoFeed\Client\Client; -use PicoFeed\Client\Url; -use PicoFeed\Logging\Logger; -use PicoFeed\Parser\XmlParser; - -/** - * Reader class. - * - * @author Frederic Guillot - */ -class Reader extends Base -{ - /** - * Feed formats for detection. - * - * @var array - */ - private $formats = array( - 'Atom' => '//feed', - 'Rss20' => '//rss[@version="2.0"]', - 'Rss92' => '//rss[@version="0.92"]', - 'Rss91' => '//rss[@version="0.91"]', - 'Rss10' => '//rdf', - ); - - /** - * Download a feed (no discovery). - * - * @param string $url Feed url - * @param string $last_modified Last modified HTTP header - * @param string $etag Etag HTTP header - * @param string $username HTTP basic auth username - * @param string $password HTTP basic auth password - * - * @return \PicoFeed\Client\Client - */ - public function download($url, $last_modified = '', $etag = '', $username = '', $password = '') - { - $url = $this->prependScheme($url); - - return Client::getInstance() - ->setConfig($this->config) - ->setLastModified($last_modified) - ->setEtag($etag) - ->setUsername($username) - ->setPassword($password) - ->execute($url); - } - - /** - * Discover and download a feed. - * - * @param string $url Feed or website url - * @param string $last_modified Last modified HTTP header - * @param string $etag Etag HTTP header - * @param string $username HTTP basic auth username - * @param string $password HTTP basic auth password - * @return Client - * @throws SubscriptionNotFoundException - */ - public function discover($url, $last_modified = '', $etag = '', $username = '', $password = '') - { - $client = $this->download($url, $last_modified, $etag, $username, $password); - - // It's already a feed or the feed was not modified - if (!$client->isModified() || $this->detectFormat($client->getContent())) { - return $client; - } - - // Try to find a subscription - $links = $this->find($client->getUrl(), $client->getContent()); - - if (empty($links)) { - throw new SubscriptionNotFoundException('Unable to find a subscription'); - } - - return $this->download($links[0], $last_modified, $etag, $username, $password); - } - - /** - * Find feed urls inside a HTML document. - * - * @param string $url Website url - * @param string $html HTML content - * - * @return array List of feed links - */ - public function find($url, $html) - { - Logger::setMessage(get_called_class().': Try to discover subscriptions'); - - $dom = XmlParser::getHtmlDocument($html); - $xpath = new DOMXPath($dom); - $links = array(); - - $queries = array( - '//link[@type="application/rss+xml"]', - '//link[@type="application/atom+xml"]', - ); - - foreach ($queries as $query) { - $nodes = $xpath->query($query); - - foreach ($nodes as $node) { - $link = $node->getAttribute('href'); - - if (!empty($link)) { - $feedUrl = new Url($link); - $siteUrl = new Url($url); - - $links[] = $feedUrl->getAbsoluteUrl($feedUrl->isRelativeUrl() ? $siteUrl->getBaseUrl() : ''); - } - } - } - - Logger::setMessage(get_called_class().': '.implode(', ', $links)); - - return $links; - } - - /** - * Get a parser instance. - * - * @param string $url Site url - * @param string $content Feed content - * @param string $encoding HTTP encoding - * - * @return \PicoFeed\Parser\Parser - */ - public function getParser($url, $content, $encoding) - { - $format = $this->detectFormat($content); - - if (empty($format)) { - throw new UnsupportedFeedFormatException('Unable to detect feed format'); - } - - $className = '\PicoFeed\Parser\\'.$format; - - $parser = new $className($content, $encoding, $url); - $parser->setHashAlgo($this->config->getParserHashAlgo()); - $parser->setConfig($this->config); - - return $parser; - } - - /** - * Detect the feed format. - * - * @param string $content Feed content - * - * @return string - */ - public function detectFormat($content) - { - $dom = XmlParser::getHtmlDocument($content); - $xpath = new DOMXPath($dom); - - foreach ($this->formats as $parser_name => $query) { - $nodes = $xpath->query($query); - - if ($nodes->length === 1) { - return $parser_name; - } - } - - return ''; - } - - /** - * Add the prefix "http://" if the end-user just enter a domain name. - * - * @param string $url Url - * @retunr string - */ - public function prependScheme($url) - { - if (!preg_match('%^https?://%', $url)) { - $url = 'http://'.$url; - } - - return $url; - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Reader/ReaderException.php b/vendor/miniflux/picofeed/lib/PicoFeed/Reader/ReaderException.php deleted file mode 100644 index 4f03dbe0..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Reader/ReaderException.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php - -namespace PicoFeed\Reader; - -use PicoFeed\PicoFeedException; - -/** - * ReaderException Exception. - * - * @author Frederic Guillot - */ -abstract class ReaderException extends PicoFeedException -{ -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Reader/SubscriptionNotFoundException.php b/vendor/miniflux/picofeed/lib/PicoFeed/Reader/SubscriptionNotFoundException.php deleted file mode 100644 index dd77847e..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Reader/SubscriptionNotFoundException.php +++ /dev/null @@ -1,12 +0,0 @@ -<?php - -namespace PicoFeed\Reader; - -/** - * SubscriptionNotFoundException Exception. - * - * @author Frederic Guillot - */ -class SubscriptionNotFoundException extends ReaderException -{ -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Reader/UnsupportedFeedFormatException.php b/vendor/miniflux/picofeed/lib/PicoFeed/Reader/UnsupportedFeedFormatException.php deleted file mode 100644 index 4aa8d87f..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Reader/UnsupportedFeedFormatException.php +++ /dev/null @@ -1,12 +0,0 @@ -<?php - -namespace PicoFeed\Reader; - -/** - * UnsupportedFeedFormatException Exception. - * - * @author Frederic Guillot - */ -class UnsupportedFeedFormatException extends ReaderException -{ -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.blog.lemonde.fr.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.blog.lemonde.fr.php deleted file mode 100644 index 773616c4..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.blog.lemonde.fr.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://combat.blog.lemonde.fr/2013/08/31/teddy-riner-le-rookie-devenu-rambo/#xtor=RSS-3208', - 'body' => array( - '//div[@class="entry-content"]', - ), - 'strip' => array( - '//*[contains(@class, "fb-like") or contains(@class, "social")]' - ), - ) - ) -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.blogs.nytimes.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.blogs.nytimes.com.php deleted file mode 100644 index ee641b09..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.blogs.nytimes.com.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'title' => '//header/h1', - 'test_url' => 'http://bits.blogs.nytimes.com/2012/01/16/wikipedia-plans-to-go-dark-on-wednesday-to-protest-sopa/', - 'body' => array( - '//div[@class="postContent"]', - ), - 'strip' => array( - '//*[@class="shareToolsBox"]', - ), - ) - ) -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.igen.fr.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.igen.fr.php deleted file mode 100644 index f2028f4e..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.igen.fr.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.igen.fr/ailleurs/2014/05/nvidia-va-delaisser-les-smartphones-grand-public-86031', - 'body' => array( - '//div[contains(@class, "field-name-body")]' - ), - 'strip' => array( - ), - ) - ) -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.nytimes.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.nytimes.com.php deleted file mode 100644 index ed27bb5c..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.nytimes.com.php +++ /dev/null @@ -1,11 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.nytimes.com/2011/05/15/world/middleeast/15prince.html', - 'body' => array( - '//div[@class="articleBody"]', - ), - ) - ) -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.over-blog.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.over-blog.com.php deleted file mode 100644 index cc5d83c7..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.over-blog.com.php +++ /dev/null @@ -1,11 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://eliascarpe.over-blog.com/2015/12/re-upload-projets-d-avenir.html', - 'body' => array( - '//div[contains(concat(" ", normalize-space(@class), " "), " ob-section ")]', - ), - ) - ) -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.phoronix.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.phoronix.com.php deleted file mode 100644 index 66713f71..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.phoronix.com.php +++ /dev/null @@ -1,12 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.phoronix.com/scan.php?page=article&item=amazon_ec2_bare&num=1', - 'body' => array( - '//div[@class="content"]', - ), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.slate.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.slate.com.php deleted file mode 100644 index a795bca3..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.slate.com.php +++ /dev/null @@ -1,20 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.slate.com/articles/business/moneybox/2013/08/microsoft_ceo_steve_ballmer_retires_a_firsthand_account_of_the_company_s.html', - 'body' => array( - '//div[@class="sl-art-body"]', - ), - 'strip' => array( - '//*[contains(@class, "social") or contains(@class, "comments") or contains(@class, "sl-article-floatin-tools") or contains(@class, "sl-art-pag")]', - '//*[@id="mys_slate_logged_in"]', - '//*[@id="sl_article_tools_myslate_bottom"]', - '//*[@id="mys_myslate"]', - '//*[@class="sl-viral-container"]', - '//*[@class="sl-art-creds-cntr"]', - '//*[@class="sl-art-ad-midflex"]', - ) - ) - ) -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.theguardian.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.theguardian.com.php deleted file mode 100644 index e0d6f3fd..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.theguardian.com.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.theguardian.com/sustainable-business/2015/feb/02/2015-hyper-transparency-global-business', - 'body' => array( - '//div[contains(@class, "content__main-column--article")]', - ), - 'strip' => array( - '//div[contains(@class, "meta-container")]', - ), - ) - ) -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.wikipedia.org.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.wikipedia.org.php deleted file mode 100644 index 7b8f76e5..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.wikipedia.org.php +++ /dev/null @@ -1,29 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'https://en.wikipedia.org/wiki/Grace_Hopper', - 'body' => array( - '//div[@id="bodyContent"]', - ), - 'strip' => array( - "//div[@id='toc']", - "//div[@id='catlinks']", - "//div[@id='jump-to-nav']", - "//div[@class='thumbcaption']//div[@class='magnify']", - "//table[@class='navbox']", - "//table[contains(@class, 'infobox')]", - "//div[@class='dablink']", - "//div[@id='contentSub']", - "//div[@id='siteSub']", - "//table[@id='persondata']", - "//table[contains(@class, 'metadata')]", - "//*[contains(@class, 'noprint')]", - "//*[contains(@class, 'printfooter')]", - "//*[contains(@class, 'editsection')]", - "//*[contains(@class, 'error')]", - "//span[@title='pronunciation:']", - ), - ) - ) -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.wired.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.wired.com.php deleted file mode 100644 index 952b09ac..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.wired.com.php +++ /dev/null @@ -1,44 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.wired.com/gamelife/2013/09/ouya-free-the-games/', - 'body' => array( - '//div[@data-js="gallerySlides"]', - '//div[starts-with(@class,"post")]', - ), - 'strip' => array( - '//h1', - '//nav', - '//button', - '//figure[starts-with(@class,"rad-slide")]', - '//figure[starts-with(@class,"end-slate")]', - '//div[contains(@class,"mobile-")]', - '//div[starts-with(@class,"mob-gallery-launcher")]', - '//div[contains(@id,"mobile-")]', - '//span[contains(@class,"slide-count")]', - '//div[contains(@class,"show-ipad")]', - '//img[contains(@id,"-hero-bg")]', - '//div[@data-js="overlayWrap"]', - '//ul[contains(@class,"metadata")]', - '//div[@class="opening center"]', - '//p[contains(@class="byline-mob"]', - '//div[@id="o-gallery"]', - '//div[starts-with(@class,"sm-col")]', - '//div[contains(@class,"pad-b-huge")]', - '//a[contains(@class,"visually-hidden")]', - '//*[@class="social"]', - '//i', - '//div[@data-js="mobGalleryAd"]', - '//div[contains(@class,"footer")]', - '//div[contains(@data-js,"fader")]', - '//div[@id="sharing"]', - '//div[contains(@id,"related")]', - '//div[@id="most-pop"]', - '//ul[@id="article-tags"]', - '//style', - '//section[contains(@class,"footer")]' - ), - ) - ) -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.wsj.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.wsj.com.php deleted file mode 100644 index f6e6cc12..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/.wsj.com.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://online.wsj.com/article/SB10001424127887324108204579023143974408428.html', - 'body' => array( - '//div[@class="articlePage"]', - ), - 'strip' => array( - '//*[@id="articleThumbnail_2"]', - '//*[@class="socialByline"]', - ) - ) - ) -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/01net.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/01net.com.php deleted file mode 100644 index 6d144f05..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/01net.com.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.01net.com/editorial/624550/twitter-rachete-madbits-un-specialiste-francais-de-lanalyse-dimages/', - 'body' => array( - '//div[@class="article_ventre_box"]', - ), - 'strip' => array( - '//link', - '//*[contains(@class, "article_navigation")]', - '//h1', - '//*[contains(@class, "article_toolbarMain")]', - '//*[contains(@class, "article_imagehaute_box")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/abstrusegoose.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/abstrusegoose.com.php deleted file mode 100644 index 752d0413..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/abstrusegoose.com.php +++ /dev/null @@ -1,8 +0,0 @@ -<?php -return array( - 'filter' => array( - '%.*%' => array( - '%alt="(.+)" title="(.+)" */>%' => '/><br/>$1<br/>$2', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/adventuregamers.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/adventuregamers.com.php deleted file mode 100644 index 98d384e6..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/adventuregamers.com.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%^/news.*%' => array( - 'test_url' => 'http://www.adventuregamers.com/news/view/31079', - 'body' => array( - '//div[@class="bodytext"]', - ) - ), - '%^/videos.*%' => array( - 'test_url' => 'http://www.adventuregamers.com/videos/view/31056', - 'body' => array( - '//iframe', - ) - ), - '%^/articles.*%' => array( - 'test_url' => 'http://www.adventuregamers.com/articles/view/31049', - 'body' => array( - '//div[@class="cleft"]', - ) - ) - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/alainonline.net.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/alainonline.net.php deleted file mode 100644 index f440b234..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/alainonline.net.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.alainonline.net/news_details.php?lang=arabic&sid=18907', - 'body' => array( - '//div[@class="news_details"]', - ), - 'strip' => array( - '//div[@class="news_details"]/div/div[last()]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/aljazeera.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/aljazeera.com.php deleted file mode 100644 index c02eb219..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/aljazeera.com.php +++ /dev/null @@ -1,25 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.aljazeera.com/news/2015/09/xi-jinping-seattle-china-150922230118373.html', - 'body' => array( - '//article[@id="main-story"]', - ), - 'strip' => array( - '//script', - '//header', - '//ul', - '//section[contains(@class,"profile")]', - '//a[@target="_self"]', - '//div[contains(@id,"_2")]', - '//div[contains(@id,"_3")]', - '//img[@class="viewMode"]', - '//table[contains(@class,"in-article-item")]', - '//div[@data-embed-type="Brightcove"]', - '//div[@class="QuoteContainer"]', - '//div[@class="BottomByLine"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/allafrica.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/allafrica.com.php deleted file mode 100644 index e8a506d4..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/allafrica.com.php +++ /dev/null @@ -1,20 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.aljazeera.com/news/2015/09/xi-jinping-seattle-china-150922230118373.html', - 'body' => array( - '//div[@class="story-body"]', - ), - 'strip' => array( - '//p[@class="kindofstory"]', - '//cite[@class="byline"]', - '//div[@class="useful-top"]', - '//div[contains(@class,"related-topics")]', - '//links', - '//sharebar', - '//related-topics', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/allgemeine-zeitung.de.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/allgemeine-zeitung.de.php deleted file mode 100644 index 8ede99b1..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/allgemeine-zeitung.de.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.allgemeine-zeitung.de/lokales/polizei/mainz-gonsenheim-unbekannte-rauben-esso-tankstelle-in-kurt-schumacher-strasse-aus_14913147.htm', - 'body' => array( - '//div[contains(@class, "article")][1]', - ), - 'strip' => array( - '//read/h1', - '//*[@id="t-map"]', - '//*[contains(@class, "modules")]', - '//*[contains(@class, "adsense")]', - '//*[contains(@class, "linkbox")]', - '//*[contains(@class, "info")]', - '//*[@class="skip"]', - '//*[@class="funcs"]', - '//span[@class="nd address"]', - '//a[contains(@href, "abo-und-services")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/amazingsuperpowers.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/amazingsuperpowers.com.php deleted file mode 100644 index 3214c62a..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/amazingsuperpowers.com.php +++ /dev/null @@ -1,8 +0,0 @@ -<?php -return array( - 'filter' => array( - '%.*%' => array( - '%title="(.+)" */>%' => '/><br/>$1', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/anythingcomic.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/anythingcomic.com.php deleted file mode 100644 index 51247f76..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/anythingcomic.com.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'body' => array( - '//img[@id="comic_image"]', - '//div[@class="comment-wrapper"][position()=1]', - ), - 'strip' => array(), - 'test_url' => 'http://www.anythingcomic.com/comics/2108929/stress-free/', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/ap.org.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/ap.org.php deleted file mode 100644 index 5bb2bb6c..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/ap.org.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://hosted.ap.org/dynamic/stories/A/AS_CHINA_GAO_ZHISHENG?SITE=AP&SECTION=HOME&TEMPLATE=DEFAULT', - 'body' => array( - '//img[@class="ap-smallphoto-img"]', - '//span[@class="entry-content"]', - ), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/areadvd.de.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/areadvd.de.php deleted file mode 100644 index fc569220..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/areadvd.de.php +++ /dev/null @@ -1,10 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.areadvd.de/news/daily-deals-angebote-bei-lautsprecher-teufel-3/', - 'body' => array('//div[contains(@class,"entry")]'), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/arstechnica.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/arstechnica.com.php deleted file mode 100644 index 55e01ce3..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/arstechnica.com.php +++ /dev/null @@ -1,25 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://arstechnica.com/tech-policy/2015/09/judge-warners-2m-happy-birthday-copyright-is-bogus/', - 'body' => array( - '//article', - ), - 'strip' => array( - '//h4[@class="post-upperdek"]', - '//h1', - '//ul[@class="lSPager lSGallery"]', - '//div[@class="lSAction"]', - '//section[@class="post-meta"]', - '//figcaption', - '//aside', - '//div[@class="gallery-image-credit"]', - '//section[@class="article-author"]', - '//*[contains(@id,"social-")]', - '//div[contains(@id,"footer")]', - ), - ), - ), -); - diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/awkwardzombie.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/awkwardzombie.com.php deleted file mode 100644 index 5ab70514..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/awkwardzombie.com.php +++ /dev/null @@ -1,10 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%/index.php.*comic=.*%' => array( - 'test_url' => 'http://www.awkwardzombie.com/index.php?comic=041315', - 'body' => array('//*[@id="comic"]/img'), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/backchannel.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/backchannel.com.php deleted file mode 100644 index bc5932a2..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/backchannel.com.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'https://medium.com/lessons-learned/917b8b63ae3e', - 'body' => array( - '//div[contains(@class,"section-inner")]', - ), - 'strip' => array( - '//div[contains(@class,"metabar")]', - '//img[contains(@class,"thumbnail")]', - '//h1', - '//blockquote', - '//p[contains(@class,"graf-after--h4")]' - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/bangkokpost.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/bangkokpost.com.php deleted file mode 100644 index 165515bb..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/bangkokpost.com.php +++ /dev/null @@ -1,19 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.bangkokpost.com/news/politics/704204/new-us-ambassador-arrives-in-bangkok', - 'body' => array( - '//article/div[@class="articleContents"]', - ), - 'strip' => array( - '//h2', - '//h4', - '//div[@class="text-size"]', - '//div[@class="relate-story"]', - '//div[@class="text-ads"]', - '//ul', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/bgr.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/bgr.com.php deleted file mode 100644 index 7507a2f1..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/bgr.com.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://bgr.com/2015/09/27/iphone-6s-waterproof-testing/', - 'body' => array( - '//img[contains(@class,"img")]', - '//div[@class="text-column"]', - ), - 'strip' => array( - '//strong', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/bigfootjustice.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/bigfootjustice.com.php deleted file mode 100644 index d06ed124..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/bigfootjustice.com.php +++ /dev/null @@ -1,8 +0,0 @@ -<?php -return array( - 'filter' => array( - '%.*%' => array( - '%-150x150%' => '', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/bigpicture.ru.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/bigpicture.ru.php deleted file mode 100644 index 55c40894..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/bigpicture.ru.php +++ /dev/null @@ -1,31 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://bigpicture.ru/?p=556658', - 'body' => array( - '//div[@class="article container"]', - ), - 'strip' => array( - '//script', - '//form', - '//style', - '//h1', - '//*[@class="wp-smiley"]', - '//div[@class="ipmd"]', - '//div[@class="tags"]', - '//div[@class="social-button"]', - '//div[@class="bottom-share"]', - '//div[@class="raccoonbox"]', - '//div[@class="yndadvert"]', - '//div[@class="we-recommend"]', - '//div[@class="relap-bigpicture_ru-wrapper"]', - '//div[@id="mmail"]', - '//div[@id="mobile-ads-cut"]', - '//div[@id="liquidstorm-alt-html"]', - '//div[contains(@class, "post-tags")]', - '//*[contains(text(),"Смотрите также")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/bizjournals.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/bizjournals.com.php deleted file mode 100644 index d1cc3da9..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/bizjournals.com.php +++ /dev/null @@ -1,12 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.bizjournals.com/milwaukee/news/2015/09/30/bucks-will-hike-prices-on-best-seats-at-new-arena.html', - 'body' => array( - '//figure/div/a/img', - '//p[@class="content__segment"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/biztimes.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/biztimes.com.php deleted file mode 100644 index d21aa98c..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/biztimes.com.php +++ /dev/null @@ -1,22 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'https://www.biztimes.com/2017/02/10/settlement-would-revive-fowler-lake-condo-project-in-oconomowoc/', - 'body' => array( - '//h2/span[@class="subhead"]', - '//div[contains(@class,"article-content")]', - ), - 'strip' => array( - '//script', - '//div[contains(@class,"mobile-article-content")]', - '//div[contains(@class,"sharedaddy")]', - '//div[contains(@class,"author-details")]', - '//div[@class="row ad"]', - '//div[contains(@class,"relatedposts")]', - '//div[@class="col-lg-12"]', - '//div[contains(@class,"widget")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/bleepingcomputer.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/bleepingcomputer.com.php deleted file mode 100644 index 7b740600..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/bleepingcomputer.com.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'https://www.bleepingcomputer.com/news/google/chromes-sandbox-feature-infringes-on-three-patents-so-google-must-now-pay-20m/', - 'body' => array( - '//div[@class="article_section"]', - ), - 'strip' => array( - '//*[@itemprop="headline"]', - '//div[@class="cz-news-story-title-section"]' - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/blog.fefe.de.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/blog.fefe.de.php deleted file mode 100644 index 39c88ae4..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/blog.fefe.de.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://blog.fefe.de/?ts=ad706a73', - 'body' => array( - '/html/body/ul', - ), - 'strip' => array( - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/blog.mapillary.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/blog.mapillary.com.php deleted file mode 100644 index ce016510..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/blog.mapillary.com.php +++ /dev/null @@ -1,11 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://blog.mapillary.com/update/2015/08/26/traffic-sign-updates.html', - 'body' => array( - '//div[contains(@class, "blog-post__content")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/brewers.mlb.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/brewers.mlb.com.php deleted file mode 100644 index be406faf..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/brewers.mlb.com.php +++ /dev/null @@ -1,22 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://m.brewers.mlb.com/news/article/161364798', - 'body' => array( - '//article[contains(@class,"article")]', - ), - 'strip' => array( - '//div[contains(@class,"ad-slot")]', - '//h1', - '//span[@class="timestamp"]', - '//div[contains(@class,"contributor-bottom")]', - '//div[contains(@class,"video")]', - '//ul[contains(@class,"social")]', - '//p[@class="tagline"]', - '//div[contains(@class,"social")]', - '//div[@class="button-wrap"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/buenosairesherald.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/buenosairesherald.com.php deleted file mode 100644 index 4e73e79f..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/buenosairesherald.com.php +++ /dev/null @@ -1,17 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.buenosairesherald.com/article/199344/manzur-named-next-governor-of-tucum%C3%A1n', - 'body' => array( - '//div[@style="float:none"]', - ), - 'strip' => array( - '//div[contains(@class, "bz_alias_short_desc_container"]', - '//td[@id="bz_show_bug_column_1"]', - '//table[@id="attachment_table"]', - '//table[@class="bz_comment_table"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/bunicomic.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/bunicomic.com.php deleted file mode 100644 index ad83e436..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/bunicomic.com.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.bunicomic.com/comic/buni-623/', - 'body' => array( - '//div[@class="comic-table"]', - ), - 'strip' => array( - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/buttersafe.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/buttersafe.com.php deleted file mode 100644 index 1f313cd0..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/buttersafe.com.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://buttersafe.com/2015/04/21/the-incredible-flexible-man/', - 'body' => array( - '//div[@id="comic"]', - '//div[@class="post-comic"]', - ), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/cad-comic.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/cad-comic.com.php deleted file mode 100644 index a631c97f..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/cad-comic.com.php +++ /dev/null @@ -1,12 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%/cad/.+%' => array( - 'test_url' => 'http://www.cad-comic.com/cad/20150417', - 'body' => array( - '//*[@id="content"]/img', - ), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/chaoslife.findchaos.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/chaoslife.findchaos.com.php deleted file mode 100644 index ea6191e8..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/chaoslife.findchaos.com.php +++ /dev/null @@ -1,10 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://chaoslife.findchaos.com/pets-in-the-wild', - 'body' => array('//div[@id="comic"]'), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/chinafile.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/chinafile.com.php deleted file mode 100644 index 450117b3..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/chinafile.com.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.chinafile.com/books/shanghai-faithful?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+chinafile%2FAll+%28ChinaFile%29', - 'body' => array( - '//div[contains(@class,"pane-featured-photo-panel-pane-1")]', - '//div[contains(@class,"video-above-fold")]', - '//div[@class="sc-media"]', - '//div[contains(@class,"field-name-body")]', - ), - 'strip' => array( - '//div[contains(@class,"cboxes")]', - '//div[contains(@class,"l-middle")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/cliquerefresh.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/cliquerefresh.com.php deleted file mode 100644 index 9dcc7e54..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/cliquerefresh.com.php +++ /dev/null @@ -1,10 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%/comic.*%' => array( - 'test_url' => 'http://cliquerefresh.com/comic/078-stating-the-obvious/', - 'body' => array('//div[@class="comicImg"]/img | //div[@class="comicImg"]/a/img'), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/cnet.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/cnet.com.php deleted file mode 100644 index 60767a53..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/cnet.com.php +++ /dev/null @@ -1,37 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%^/products.*%' => array( - 'test_url' => 'http://www.cnet.com/products/fibaro-flood-sensor/#ftag=CADf328eec', - 'body' => array( - '//li[contains(@class,"slide first"] || //figure[contains(@class,(promoFigure))]', - '//div[@class="quickInfo"]', - '//div[@class="col-6 ratings"]', - '//div[@id="editorReview"]', - ), - 'strip' => array( - '//script', - '//a[@class="clickToEnlarge"]', - '//div[@section="topSharebar"]', - '//div[contains(@class,"related")]', - '//div[contains(@class,"ad-")]', - '//div[@section="shortcodeGallery"]', - ), - ), - '%.*%' => array( - 'test_url' => 'http://cnet.com.feedsportal.com/c/34938/f/645093/s/4a340866/sc/28/l/0L0Scnet0N0Cnews0Cman0Eclaims0Eonline0Epsychic0Emade0Ehim0Ebuy0E10Emillion0Epowerball0Ewinning0Eticket0C0Tftag0FCAD590Aa51e/story01.htm', - 'body' => array( - '//p[@itemprop="description"]', - '//div[@itemprop="articleBody"]', - ), - 'strip' => array( - '//script', - '//a[@class="clickToEnlarge"]', - '//div[@section="topSharebar"]', - '//div[contains(@class,"related")]', - '//div[contains(@class,"ad-")]', - '//div[@section="shortcodeGallery"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/consomac.fr.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/consomac.fr.php deleted file mode 100644 index 9209f9cb..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/consomac.fr.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://consomac.fr/news-2430-l-iphone-6-toujours-un-secret-bien-garde.html', - 'body' => array( - '//div[contains(@id, "newscontent")]', - ), - 'strip' => array( - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/cowbirdsinlove.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/cowbirdsinlove.com.php deleted file mode 100644 index 3214c62a..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/cowbirdsinlove.com.php +++ /dev/null @@ -1,8 +0,0 @@ -<?php -return array( - 'filter' => array( - '%.*%' => array( - '%title="(.+)" */>%' => '/><br/>$1', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/crash.net.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/crash.net.php deleted file mode 100644 index 9d9b35a6..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/crash.net.php +++ /dev/null @@ -1,28 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.crash.net/motogp/interview/247550/1/exclusive-andrea-dovizioso-interview.html', - 'body' => array( - '//div[@id="content"]', - ), - 'strip' => array( - '//script', - '//style', - '//*[@title="Social Networking"]', - '//*[@class="crash-ad2"]', - '//*[@class="clearfix"]', - '//*[@class="crash-ad2"]', - '//*[contains(@id, "divCB"]', - '//*[@class="pnlComment"]', - '//*[@class="comments-tabs"]', - '//*[contains(@class, "ad-twocol"]', - '//*[@class="stories-list"]', - '//*[contains(@class, "btn")]', - '//*[@class="content"]', - '//h3', - ), - ), - ), -); - diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/csmonitor.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/csmonitor.com.php deleted file mode 100644 index 481e4b09..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/csmonitor.com.php +++ /dev/null @@ -1,19 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.csmonitor.com/USA/Politics/2015/0925/John-Boehner-steps-down-Self-sacrificing-but-will-it-lead-to-better-government', - 'body' => array( - '//h2[@id="summary"]', - '//div[@class="flex-video youtube"]', - '//div[contains(@class,"eza-body")]', - ), - 'strip' => array( - '//span[@id="breadcrumb"]', - '//div[@id="byline-wrapper"]', - '//div[@class="injection"]', - '//*[contains(@class,"promo_link")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/dailyjs.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/dailyjs.com.php deleted file mode 100644 index 20eb1d75..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/dailyjs.com.php +++ /dev/null @@ -1,19 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://dailyjs.com/2014/08/07/p5js/', - 'body' => array( - '//div[@id="post"]', - ), - 'strip' => array( - '//h2[@class="post"]', - '//div[@class="meta"]', - '//*[contains(@class, "addthis_toolbox")]', - '//*[contains(@class, "addthis_default_style")]', - '//*[@class="navigation small"]', - '//*[@id="related"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/dailyreporter.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/dailyreporter.com.php deleted file mode 100644 index db3fc0e1..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/dailyreporter.com.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://dailyreporter.com/2016/01/09/us-supreme-court-case-could-weaken-government-workers-unions/', - 'body' => array( - '//div[contains(@class, "entry-content")]', - ), - 'strip' => array( - '//div[@class="dmcss_login_form"]', - '//*[contains(@class, "sharedaddy")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/dailytech.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/dailytech.com.php deleted file mode 100644 index 5d1df4a9..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/dailytech.com.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.dailytech.com/Apples+First+Fixes+to+iOS+9+Land+w+iOS++901+Release/article37495.htm', - 'body' => array( - '//div[@class="NewsBodyImage"]', - '//span[@id="lblSummary"]', - '//span[@id="lblBody"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/degroupnews.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/degroupnews.com.php deleted file mode 100644 index 91f5c56e..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/degroupnews.com.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.degroupnews.com/medias/vodsvod/amazon-concurrence-la-chromecast-de-google-avec-fire-tv-stick', - 'body' => array( - '//div[@class="contenu"]', - ), - 'strip' => array( - '//div[contains(@class, "a2a")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/derstandard.at.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/derstandard.at.php deleted file mode 100644 index 7e95a51f..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/derstandard.at.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://derstandard.at/2000010267354/The-Witcher-3-Hohe-Hardware-Anforderungen-fuer-PC-Spieler?ref=rss', - 'body' => array( - '//div[@class="copytext"]', - '//ul[@id="media-list"]', - ), - 'strip' => array( - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/dilbert.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/dilbert.com.php deleted file mode 100644 index b8e9b3d6..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/dilbert.com.php +++ /dev/null @@ -1,11 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'body' => array( - '//img[@class="img-responsive img-comic"]', - ), - 'test_url' => 'http://dilbert.com/strip/2016-01-28', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/discovermagazine.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/discovermagazine.com.php deleted file mode 100644 index ae0dfe71..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/discovermagazine.com.php +++ /dev/null @@ -1,26 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://blogs.discovermagazine.com/neuroskeptic/2017/01/25/publishers-jeffrey-beall/', - 'body' => array( - '//div[@class="contentWell"]', - ), - 'strip' => array( - '//h1', - '//div[@class="breadcrumbs"]', - '//div[@class="mobile"]', - '//div[@class="fromIssue"]', - '//div[contains(@class,"belowDeck")]', - '//div[@class="meta"]', - '//div[@class="shareIcons"]', - '//div[@class="categories"]', - '//div[@class="navigation"]', - '//div[@class="heading"]', - '//div[contains(@id,"-ad")]', - '//div[@class="relatedArticles"]', - '//div[@id="disqus_thread"]' - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/distrowatch.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/distrowatch.com.php deleted file mode 100644 index aefc8f81..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/distrowatch.com.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://distrowatch.com/?newsid=08355', - 'body' => array( - '//td[@class="NewsText"][1]', - ), - 'strip' => array( - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/dozodomo.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/dozodomo.com.php deleted file mode 100644 index e1166957..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/dozodomo.com.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://dozodomo.com/bento/2014/03/04/lart-des-maki-de-takayo-kiyota/', - 'body' => array( - '//div[@class="joke"]', - '//div[@class="story-cover"]', - '//div[@class="story-content"]', - ), - 'strip' => array( - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/drawingboardcomic.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/drawingboardcomic.com.php deleted file mode 100644 index cd30f2e0..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/drawingboardcomic.com.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'body' => array('//img[@id="comicimage"]'), - 'strip' => array(), - 'test_url' => 'http://drawingboardcomic.com/index.php?comic=208', - ), - ), - 'filter' => array( - '%.*%' => array( - '%title="(.+)" */>%' => '/><br/>$1', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/e-w-e.ru.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/e-w-e.ru.php deleted file mode 100644 index 8139cc9a..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/e-w-e.ru.php +++ /dev/null @@ -1,22 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://e-w-e.ru/16-prekrasnyx-izobretenij-zhenshhin/', - 'body' => array( - '//div[contains(@class, "post_text")]', - ), - 'strip' => array( - '//script', - '//form', - '//style', - '//*[@class="views_post"]', - '//*[@class="adman_mobile"]', - '//*[@class="adman_desctop"]', - '//*[contains(@rel, "nofollow")]', - '//*[contains(@class, "wp-smiley")]', - '//*[contains(text(),"Источник:")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/economist.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/economist.com.php deleted file mode 100644 index 522032fd..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/economist.com.php +++ /dev/null @@ -1,25 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.economist.com/blogs/buttonwood/2017/02/mixed-signals?fsrc=rss', - 'body' => array( - '//article', - ), - 'strip' => array( - '//span[@class="blog-post__siblings-list-header "]', - '//h1', - '//aside', - '//div[@class="blog-post__asideable-wrapper"]', - '//div[@class="share_inline_header"]', - '//div[@id="column-right"]', - '//div[contains(@class,"blog-post__siblings-list-aside")]', - '//div[@class="video-player__wrapper"]', - '//div[@class="blog-post__bottom-panel"]', - '//div[contains(@class,"latest-updates-panel__container")]', - '//div[contains(@class,"blog-post__asideable-content")]', - '//div[@aria-label="Advertisement"]' - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/encyclopedie.naheulbeuk.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/encyclopedie.naheulbeuk.com.php deleted file mode 100644 index 19bcbdef..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/encyclopedie.naheulbeuk.com.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://encyclopedie.naheulbeuk.com/article.php3?id_article=352', - 'body' => array( - '//td//h1[@class="titre-texte"]', - '//td//div[@class="surtitre"]', - '//td//div[@class="texte"]', - ), - ) - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/endlessorigami.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/endlessorigami.com.php deleted file mode 100644 index d06ed124..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/endlessorigami.com.php +++ /dev/null @@ -1,8 +0,0 @@ -<?php -return array( - 'filter' => array( - '%.*%' => array( - '%-150x150%' => '', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/engadget.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/engadget.com.php deleted file mode 100644 index cf9e4485..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/engadget.com.php +++ /dev/null @@ -1,10 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.engadget.com/2015/04/20/dark-matter-discovery/?ncid=rss_truncated', - 'body' => array('//div[@id="page_body"]/div[@class="container@m-"]'), - 'strip' => array('//aside[@role="banner"]'), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/escapistmagazine.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/escapistmagazine.com.php deleted file mode 100644 index e86b59cb..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/escapistmagazine.com.php +++ /dev/null @@ -1,45 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%/articles/view/comicsandcosplay/comics/critical-miss.*%' => array( - 'body' => array('//*[@class="body"]/span/img | //div[@class="folder_nav_links"]/following::p'), - 'test_url' => 'http://www.escapistmagazine.com/articles/view/comicsandcosplay/comics/critical-miss/13776-Critical-Miss-on-Framerates?utm_source=rss&utm_medium=rss&utm_campaign=articles', - 'strip' => array(), - ), - '%/articles/view/comicsandcosplay/comics/namegame.*%' => array( - 'body' => array('//*[@class="body"]/span/p/img[@height != "120"]'), - 'test_url' => 'http://www.escapistmagazine.com/articles/view/comicsandcosplay/comics/namegame/9759-Leaving-the-Nest?utm_source=rss&utm_medium=rss&utm_campaign=articles', - 'strip' => array(), - ), - '%/articles/view/comicsandcosplay/comics/stolen-pixels.*%' => array( - 'body' => array('//*[@class="body"]/span/p[2]/img'), - 'test_url' => 'http://www.escapistmagazine.com/articles/view/comicsandcosplay/comics/stolen-pixels/8866-Stolen-Pixels-258-Where-the-Boys-Are?utm_source=rss&utm_medium=rss&utm_campaign=articles', - 'strip' => array(), - ), - '%/articles/view/comicsandcosplay/comics/bumhugparade.*%' => array( - 'body' => array('//*[@class="body"]/span/p[2]/img'), - 'test_url' => 'http://www.escapistmagazine.com/articles/view/comicsandcosplay/comics/bumhugparade/8262-Bumhug-Parade-13?utm_source=rss&utm_medium=rss&utm_campaign=articles', - 'strip' => array(), - ), - '%/articles/view/comicsandcosplay.*/comics/escapistradiotheater%' => array( - 'body' => array('//*[@class="body"]/span/p[2]/img'), - 'test_url' => 'http://www.escapistmagazine.com/articles/view/comicsandcosplay/comics/escapistradiotheater/8265-The-Escapist-Radio-Theater-13?utm_source=rss&utm_medium=rss&utm_campaign=articles', - 'strip' => array(), - ), - '%/articles/view/comicsandcosplay/comics/paused.*%' => array( - 'body' => array('//*[@class="body"]/span/p[2]/img | //*[@class="body"]/span/div/img'), - 'test_url' => 'http://www.escapistmagazine.com/articles/view/comicsandcosplay/comics/paused/8263-Paused-16?utm_source=rss&utm_medium=rss&utm_campaign=articles', - 'strip' => array(), - ), - '%/articles/view/comicsandcosplay/comics/fraughtwithperil.*%' => array( - 'body' => array('//*[@class="body"]'), - 'test_url' => 'http://www.escapistmagazine.com/articles/view/comicsandcosplay/comics/fraughtwithperil/12166-The-Escapist-Presents-Escapist-Comics-Critical-Miss-B-lyeh-Fhlop?utm_source=rss&utm_medium=rss&utm_campaign=articles', - 'strip' => array(), - ), - '%/articles/view/video-games/columns/.*%' => array( - 'body' => array('//*[@id="article_content"]'), - 'test_url' => 'http://www.escapistmagazine.com/articles/view/video-games/columns/experienced-points/13971-What-50-Shades-and-Batman-Have-in-Common.2', - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/espn.go.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/espn.go.com.php deleted file mode 100644 index 76a20f74..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/espn.go.com.php +++ /dev/null @@ -1,11 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://espn.go.com/nfl/story/_/id/13388208/jason-whitlock-chip-kelly-controversy', - 'body' => array( - '//p', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/exocomics.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/exocomics.com.php deleted file mode 100644 index 5adc59f8..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/exocomics.com.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'body' => array('//a[@class="comic"]/img'), - 'strip' => array(), - 'test_url' => 'http://www.exocomics.com/379', - ), - ), - 'filter' => array( - '%.*%' => array( - '%title="(.+)" */>%' => '/><br/>$1', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/explosm.net.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/explosm.net.php deleted file mode 100644 index 3fdf02c0..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/explosm.net.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://explosm.net/comics/3803/', - 'body' => array( - '//div[@id="comic-container"]', - ), - 'strip' => array( - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/extrafabulouscomics.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/extrafabulouscomics.com.php deleted file mode 100644 index 12697ccb..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/extrafabulouscomics.com.php +++ /dev/null @@ -1,8 +0,0 @@ -<?php -return array( - 'filter' => array( - '%.*%' => array( - '%-150x150%' => '', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/factroom.ru.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/factroom.ru.php deleted file mode 100644 index a572061d..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/factroom.ru.php +++ /dev/null @@ -1,27 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.factroom.ru/life/20-facts-about-oil', - 'body' => array( - '//div[@class="post"]', - ), - 'strip' => array( - '//script', - '//form', - '//style', - '//h1', - '//div[@id="yandex_ad2"]', - '//*[@class="jp-relatedposts"]', - '//div[contains(@class, "likely-desktop")]', - '//div[contains(@class, "likely-mobile")]', - '//p[last()]', - '//div[contains(@class, "facebook")]', - '//div[contains(@class, "desktop-underpost-direct")]', - '//div[contains(@class, "source-box")]', - '//div[contains(@class, "under-likely-desktop")]', - '//div[contains(@class, "mobile-down-post")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/fastcodesign.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/fastcodesign.com.php deleted file mode 100644 index 74e70a86..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/fastcodesign.com.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.fastcodesign.com/3026548/exposure/peek-inside-the-worlds-forbidden-subway-tunnels', - 'body' => array( - '//article[contains(@class, "body prose")]', - ), - 'strip' => array( - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/fastcoexist.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/fastcoexist.com.php deleted file mode 100644 index 6916f280..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/fastcoexist.com.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.fastcoexist.com/3026114/take-a-seat-on-this-gates-funded-future-toilet-that-will-change-how-we-think-about-poop', - 'body' => array( - '//article[contains(@class, "body prose")]', - ), - 'strip' => array( - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/fastcompany.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/fastcompany.com.php deleted file mode 100644 index e0869a29..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/fastcompany.com.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.fastcompany.com/3026712/fast-feed/elon-musk-an-apple-tesla-merger-is-very-unlikely', - 'body' => array( - '//article[contains(@class, "body prose")]', - ), - 'strip' => array( - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/ffworld.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/ffworld.com.php deleted file mode 100644 index 20a47b2d..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/ffworld.com.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.ffworld.com/?rub=news&page=voir&id=2709', - 'body' => array( - '//div[@class="news_body"]', - ), - 'strip' => array( - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/foreignpolicy.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/foreignpolicy.com.php deleted file mode 100644 index 3cbcddc4..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/foreignpolicy.com.php +++ /dev/null @@ -1,21 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://foreignpolicy.com/2016/01/09/networking-giant-pulls-nsa-linked-code-exploited-by-hackers/', - 'body' => array( - '//article', - ), - 'strip' => array( - '//div[@id="post-category"]', - '//div[@id="desktop-right"]', - '//h1', - '//section[@class="article-meta"]', - '//div[@class="side-panel-wrapper"]', - '//*[contains(@class, "share-")]', - '//*[contains(@id, "taboola-")]', - '//div[@class="comments"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/fossbytes.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/fossbytes.com.php deleted file mode 100644 index 6ce47256..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/fossbytes.com.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://fossbytes.com/fbi-hacked-1000-computers-to-shut-down-largest-child-pornography-site-on-the-dark-web/', - 'body' => array( - '//div[@class="entry-inner"]', - ), - 'strip' => array( - '//*[@class="at-above-post addthis_default_style addthis_toolbox at-wordpress-hide"]', - '//*[@class="at-below-post addthis_default_style addthis_toolbox at-wordpress-hide"]', - '//*[@class="at-below-post-recommended addthis_default_style addthis_toolbox at-wordpress-hide"]', - '//*[@class="code-block code-block-12 ai-desktop"]', - '//*[@class="code-block code-block-13 ai-tablet-phone"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/fototelegraf.ru.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/fototelegraf.ru.php deleted file mode 100644 index ca2f85aa..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/fototelegraf.ru.php +++ /dev/null @@ -1,19 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://fototelegraf.ru/?p=348232', - 'body' => array( - '//div[@class="post-content"]', - ), - 'strip' => array( - '//script', - '//form', - '//style', - '//div[@class="imageButtonsBlock"]', - '//div[@class="adOnPostBtwImg"]', - '//div[contains(@class, "post-tags")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/fowllanguagecomics.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/fowllanguagecomics.com.php deleted file mode 100644 index 3f62f071..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/fowllanguagecomics.com.php +++ /dev/null @@ -1,10 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'body' => array('//*[@id="comic"] | //*[@class="post-image"]'), - 'strip' => array(), - 'test_url' => 'http://www.fowllanguagecomics.com/comic/working-out/', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/geek.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/geek.com.php deleted file mode 100644 index d9ccecc2..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/geek.com.php +++ /dev/null @@ -1,17 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.geek.com/news/the-11-best-ways-to-eat-eggs-1634076/', - 'body' => array( - '//div[@class="articleinfo"]/figure', - '//div[@class="articleinfo"]/article', - '//span[@class="by"]', - ), - 'strip' => array( - '//span[@class="red"]', - '//div[@class="on-target"]' - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/geektimes.ru.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/geektimes.ru.php deleted file mode 100644 index 19541386..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/geektimes.ru.php +++ /dev/null @@ -1,12 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'https://geektimes.ru/post/289151/', - 'body' => array( - "//div[contains(concat(' ',normalize-space(@class),' '),' content ')]" - ), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/gerbilwithajetpack.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/gerbilwithajetpack.com.php deleted file mode 100644 index 44013b3b..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/gerbilwithajetpack.com.php +++ /dev/null @@ -1,12 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'body' => array( - '//div[@id="comic-1"]', - '//div[@class="entry"]', - ), - 'test_url' => 'http://gerbilwithajetpack.com/passing-the-digital-buck/', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/giantitp.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/giantitp.com.php deleted file mode 100644 index d9c3ae5d..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/giantitp.com.php +++ /dev/null @@ -1,12 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%/comics/oots.*%' => array( - 'test_url' => 'http://www.giantitp.com/comics/oots0989.html', - 'body' => array( - '//td[@align="center"]/img', - ), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/github.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/github.com.php deleted file mode 100644 index 726634f9..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/github.com.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'https://github.com/audreyr/favicon-cheat-sheet', - 'body' => array( - '//article[contains(@class, "entry-content")]', - ), - 'strip' => array( - '//h1', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/gocomics.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/gocomics.com.php deleted file mode 100644 index 32960f0e..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/gocomics.com.php +++ /dev/null @@ -1,12 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.gocomics.com/pearlsbeforeswine/2015/05/30', - 'body' => array( - '//div[1]/p[1]/a[1]/img', - ), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/golem.de.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/golem.de.php deleted file mode 100644 index 84224830..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/golem.de.php +++ /dev/null @@ -1,20 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.golem.de/news/breko-telekom-verzoegert-gezielt-den-vectoring-ausbau-1311-102974.html', - 'body' => array( - '//header[@class="cluster-header"]', - '//header[@class="paged-cluster-header"]', - '//div[@class="formatted"]', - ), - 'next_page' => array( - '//a[@id="atoc_next"]' - ), - 'strip' => array( - '//header[@class="cluster-header"]/a', - '//div[@id="iqadtile4"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/gorabbit.ru.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/gorabbit.ru.php deleted file mode 100644 index 4e432481..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/gorabbit.ru.php +++ /dev/null @@ -1,19 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://gorabbit.ru/article/10-oshchushcheniy-za-rulem-kogda-tolko-poluchil-voditelskie-prava', - 'body' => array( - '//div[@class="detail_text"]', - ), - 'strip' => array( - '//script', - '//form', - '//style', - '//div[@class="socials"]', - '//div[@id="cr_1"]', - '//div[@class="related_items"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/habrahabr.ru.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/habrahabr.ru.php deleted file mode 100644 index 3f1ec165..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/habrahabr.ru.php +++ /dev/null @@ -1,12 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'https://habrahabr.ru/company/pentestit/blog/328606/', - 'body' => array( - "//div[contains(concat(' ',normalize-space(@class),' '),' content ')]" - ), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/happletea.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/happletea.com.php deleted file mode 100644 index 75b0b83d..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/happletea.com.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'body' => array( - '//div[@id="comic"]', - '//div[@class="entry"]', - ), - 'strip' => array('//div[@class="ssba"]'), - 'test_url' => 'http://www.happletea.com/comic/mans-best-friend/', - ), - ), - 'filter' => array( - '%.*%' => array( - '%title="(.+)" */>%' => '/><br/>$1', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/hardware.fr.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/hardware.fr.php deleted file mode 100644 index 56aec4f4..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/hardware.fr.php +++ /dev/null @@ -1,11 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%^/news.*%' => array( - 'test_url' => 'http://www.hardware.fr/news/14760/intel-lance-nouveaux-ssd-nand-3d.html', - 'body' => array( - '//div[@class="content_actualite"]/div[@class="md"]', - ) - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/heise.de.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/heise.de.php deleted file mode 100644 index 2055b3bc..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/heise.de.php +++ /dev/null @@ -1,12 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.heise.de/security/meldung/BND-300-Millionen-Euro-fuer-Fruehwarnsystem-gegen-Cyber-Attacken-2192237.html', - 'body' => array( - '//div[@class="meldung_wrapper"]', - '//div[@class="artikel_content"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/hotshowlife.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/hotshowlife.com.php deleted file mode 100644 index faf01f3d..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/hotshowlife.com.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'https://hotshowlife.com/top-10-chempionov-produktov-po-szhiganiyu-kalorij/', - 'body' => array( - '//div[@class="entry-content"]', - ), - 'strip' => array( - '//script', - '//form', - '//style', - '//div[@class="ads2"]', - '//div[@class="mistape_caption"]', - '//div[contains(@class, "et_social_media_hidden")]', - '//div[contains(@class, "et_social_inline_bottom")]', - '//div[contains(@class, "avatar")]', - '//ul[contains(@class, "entry-tags")]', - '//div[contains(@class, "entry-meta")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/huffingtonpost.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/huffingtonpost.com.php deleted file mode 100644 index b52b07b5..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/huffingtonpost.com.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.huffingtonpost.com/2014/02/20/centscere-social-media-syracuse_n_4823848.html', - 'body' => array( - '//article[@class="content")]', - ), - 'strip' => array( - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/imogenquest.net.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/imogenquest.net.php deleted file mode 100644 index 3214c62a..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/imogenquest.net.php +++ /dev/null @@ -1,8 +0,0 @@ -<?php -return array( - 'filter' => array( - '%.*%' => array( - '%title="(.+)" */>%' => '/><br/>$1', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/indiehaven.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/indiehaven.com.php deleted file mode 100644 index a40ce694..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/indiehaven.com.php +++ /dev/null @@ -1,11 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://indiehaven.com/no-mans-sky-is-a-solo-space-adventure-and-im-ok-with-that/', - 'body' => array( - '//section[contains(@class, "entry-content")]', - ) - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/ing.dk.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/ing.dk.php deleted file mode 100644 index 5a021a08..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/ing.dk.php +++ /dev/null @@ -1,12 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://ing.dk/artikel/smart-husisolering-og-styring-skal-mindske-japans-energikrise-164517', - 'body' => array( - '//section[contains(@class, "teaser")]', - '//section[contains(@class, "body")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/invisiblebread.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/invisiblebread.com.php deleted file mode 100644 index 90f87597..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/invisiblebread.com.php +++ /dev/null @@ -1,8 +0,0 @@ -<?php -return array( - 'filter' => array( - '%.*%' => array( - '%(<img.+(\\d{4}-\\d{2}-\\d{2}).+/>)%' => '$1<img src="http://invisiblebread.com/eps/$2-extrapanel.png"/>', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/ir.amd.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/ir.amd.com.php deleted file mode 100644 index af99fe99..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/ir.amd.com.php +++ /dev/null @@ -1,10 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'body' => array('//span[@class="ccbnTxt"]'), - 'strip' => array(), - 'test_url' => 'http://ir.amd.com/phoenix.zhtml?c=74093&p=RssLanding&cat=news&id=2055819', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/japantimes.co.jp.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/japantimes.co.jp.php deleted file mode 100644 index 9959441d..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/japantimes.co.jp.php +++ /dev/null @@ -1,21 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.japantimes.co.jp/news/2015/09/27/world/social-issues-world/pope-meets-sex-abuse-victims-philadelphia-promises-accountability/', - 'body' => array( - '//article[@role="main"]', - ), - 'strip' => array( - '//script', - '//header', - '//div[contains(@class, "meta")]', - '//div[@class="clearfix"]', - '//div[@class="OUTBRAIN"]', - '//ul[@id="content_footer_menu"]', - '//div[@class="article_footer_ad"]', - '//div[@id="disqus_thread"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/japantoday.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/japantoday.com.php deleted file mode 100644 index 22485d69..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/japantoday.com.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.japantoday.com/category/politics/view/japan-u-s-to-sign-new-base-environment-pact', - 'body' => array( - '//div[@id="article_container"]', - ), - 'strip' => array( - '//h2', - '//div[@id="article_info"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/journaldugeek.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/journaldugeek.com.php deleted file mode 100644 index 876b2698..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/journaldugeek.com.php +++ /dev/null @@ -1,11 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www./2014/05/20/le-playstation-now-arrive-en-beta-fermee-aux-etats-unis/', - 'body' => array( - '//div[@class="post-content"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/jsonline.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/jsonline.com.php deleted file mode 100644 index 5895256e..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/jsonline.com.php +++ /dev/null @@ -1,37 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.%/picture-gallery/%' => array( - 'test_url' => 'http://www.jsonline.com/picture-gallery/news/local/milwaukee/2017/02/22/photos-aclu-sues-milwaukee-police-over-profiling-stop-and-frisk/98250836/', - 'body' => array( - '//div[@class="priority-asset-gallery galleries standalone hasendslate"]', - ), - 'strip' => array( - '//div[@class="buy-photo-btn"]', - '//div[@class="gallery-thumbs thumbs pag-thumbs")]', - ), - ), - '%.*%' => array( - 'test_url' => 'http://www.jsonline.com/news/usandworld/as-many-as-a-million-expected-for-popes-last-mass-in-us-b99585180z1-329688131.html', - 'body' => array( - '//div[@itemprop="articleBody"]', - ), - 'strip' => array( - '//h1', - '//iframe', - '//span[@class="mycapture-small-btn mycapture-btn-with-text mycapture-expandable-photo-btn-small js-mycapture-btn-small"]', - '//div[@class="close-wrap"]', - '//div[contains(@class,"ui-video-wrapper")]', - '//div[contains(@class,"media-mob")]', - '//div[contains(@class,"left-mob")]', - '//div[contains(@class,"nerdbox")]', - '//p/span', - '//div[contains(@class,"oembed-asset")]', - '//*[contains(@class,"share")]', - '//div[contains(@class,"gallery-asset")]', - '//div[contains(@class,"oembed-asset")]', - '//div[@class="article-print-url"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/justcoolidea.ru.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/justcoolidea.ru.php deleted file mode 100644 index 089ff29c..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/justcoolidea.ru.php +++ /dev/null @@ -1,19 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://justcoolidea.ru/idealnyj-sad-samodelnye-proekty-dlya-berezhlivogo-domovladeltsa/', - 'body' => array( - '//section[@class="entry-content"]', - ), - 'strip' => array( - '//script', - '//form', - '//style', - '//*[contains(@class, "essb_links")]', - '//*[contains(@rel, "nofollow")]', - '//*[contains(@class, "ads")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/kanpai.fr.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/kanpai.fr.php deleted file mode 100644 index c3a1abc4..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/kanpai.fr.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.kanpai.fr/japon/comment-donner-lheure-en-japonais.html', - 'body' => array( - '//div[@class="single-left"]', - ), - 'strip' => array( - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/karriere.jobfinder.dk.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/karriere.jobfinder.dk.php deleted file mode 100644 index 25d6dfa3..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/karriere.jobfinder.dk.php +++ /dev/null @@ -1,12 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://karriere.jobfinder.dk/artikel/dansk-professor-skal-lede-smart-grid-forskning-20-millioner-dollars-763', - 'body' => array( - '//section[contains(@class, "teaser")]', - '//section[contains(@class, "body")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/kodi.tv.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/kodi.tv.php deleted file mode 100644 index 439fc907..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/kodi.tv.php +++ /dev/null @@ -1,11 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'https://kodi.tv/article/andwere-baaaaack', - 'body' => array( - '//div[@class="l-region--content"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/koreaherald.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/koreaherald.com.php deleted file mode 100644 index 96510560..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/koreaherald.com.php +++ /dev/null @@ -1,11 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.koreaherald.com/view.php?ud=20150926000018', - 'body' => array( - '//div[@id="articleText"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/koreatimes.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/koreatimes.php deleted file mode 100644 index f274b4a9..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/koreatimes.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.koreatimes.co.kr/www/news/nation/2015/12/116_192409.html', - 'body' => array( - '//div[@id="p"]', - ), - 'strip' => array( - '//div[@id="webtalks_btn_listenDiv"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/lastplacecomics.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/lastplacecomics.com.php deleted file mode 100644 index 12697ccb..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/lastplacecomics.com.php +++ /dev/null @@ -1,8 +0,0 @@ -<?php -return array( - 'filter' => array( - '%.*%' => array( - '%-150x150%' => '', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/legorafi.fr.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/legorafi.fr.php deleted file mode 100644 index e6aae46b..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/legorafi.fr.php +++ /dev/null @@ -1,22 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => array( - 'http://www.legorafi.fr/2016/12/16/gorafi-magazine-bravo-vous-avez-bientot-presque-survecu-a-2016/', - 'http://www.legorafi.fr/2016/12/15/manuel-valls-promet-quune-fois-elu-il-debarrassera-la-france-de-manuel-valls/', - ), - 'body' => array( - '//section[@id="banner_magazine"]', - '//figure[@class="main_picture"]', - '//div[@class="content"]', - ), - 'strip' => array( - '//figcaption', - '//div[@class="sharebox"]', - '//div[@class="tags"]', - '//section[@class="taboola_article"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/lejapon.fr.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/lejapon.fr.php deleted file mode 100644 index 8f2b2932..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/lejapon.fr.php +++ /dev/null @@ -1,17 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://lejapon.fr/guide-voyage-japon/5223/tokyo-sous-la-neige.htm', - 'body' => array( - '//div[@class="entry"]', - ), - 'strip' => array( - '//*[contains(@class, "addthis_toolbox")]', - '//*[contains(@class, "addthis_default_style")]', - '//*[@class="navigation small"]', - '//*[@id="related"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/lesjoiesducode.fr.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/lesjoiesducode.fr.php deleted file mode 100644 index 369206ab..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/lesjoiesducode.fr.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://lesjoiesducode.fr/post/75576211207/quand-lappli-ne-fonctionne-plus-sans-aucune-raison', - 'body' => array( - '//div[@class="blog-post-content"]', - ), - 'strip' => array( - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/lfg.co.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/lfg.co.php deleted file mode 100644 index d978a5fc..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/lfg.co.php +++ /dev/null @@ -1,12 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.lfg.co/page/871/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+LookingForGroup+%28Looking+For+Group%29&utm_content=FeedBurner', - 'body' => array( - '//*[@id="comic"]/img | //*[@class="content"]', - ), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/lifehacker.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/lifehacker.com.php deleted file mode 100644 index b9a69338..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/lifehacker.com.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://lifehacker.com/bring-water-bottle-caps-into-concerts-to-protect-your-d-1269334973', - 'body' => array( - '//div[contains(@class, "row")/img', - '//div[contains(@class, "content-column")]', - ), - 'strip' => array( - '//*[contains(@class, "meta")]', - '//span[contains(@class, "icon")]', - '//h1', - '//aside', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/lifehacker.ru.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/lifehacker.ru.php deleted file mode 100644 index bc140f67..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/lifehacker.ru.php +++ /dev/null @@ -1,22 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://lifehacker.ru/2016/03/03/polymail/', - 'body' => array( - '//div[@class="post-content"]', - ), - 'strip' => array( - '//script', - '//form', - '//style', - '//*[@class="wp-thumbnail-caption"]', - '//*[contains(@class, "social-likes")]', - '//*[@class="jp-relatedposts"]', - '//*[contains(@class, "wpappbox")]', - '//*[contains(@class, "icon__image")]', - '//div[@id="hypercomments_widget"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/linux.org.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/linux.org.php deleted file mode 100644 index 2520d0d0..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/linux.org.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.linux.org/threads/lua-the-scripting-interpreter.8352/', - 'body' => array( - '//div[@class="messageContent"]', - ), - 'strip' => array( - '//aside', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/linux.org.ru.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/linux.org.ru.php deleted file mode 100644 index 7fa02497..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/linux.org.ru.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.linux.org/threads/lua-the-scripting-interpreter.8352/', - 'body' => array( - '//div[@itemprop="articleBody"]', - ), - 'strip' => array( - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/linuxinsider.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/linuxinsider.com.php deleted file mode 100644 index 4e0a4cc1..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/linuxinsider.com.php +++ /dev/null @@ -1,20 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.linuxinsider.com/story/82526.html?rss=1', - 'body' => array( - '//div[@id="story"]', - ), - 'strip' => array( - '//script', - '//h1', - '//div[@id="story-toolbox1"]', - '//div[@id="story-byline"]', - '//div[@id="story"]/p', - '//div[@class="story-advertisement"]', - '//iframe', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/lists.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/lists.php deleted file mode 100644 index c7051a20..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/lists.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://lists.freebsd.org/pipermail/freebsd-announce/2013-September/001504.html', - 'body' => array( - '//pre', - ), - 'strip' => array( - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/loadingartist.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/loadingartist.com.php deleted file mode 100644 index d06ed124..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/loadingartist.com.php +++ /dev/null @@ -1,8 +0,0 @@ -<?php -return array( - 'filter' => array( - '%.*%' => array( - '%-150x150%' => '', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/loldwell.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/loldwell.com.php deleted file mode 100644 index d358e156..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/loldwell.com.php +++ /dev/null @@ -1,10 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://loldwell.com/?comic=food-math-101', - 'body' => array('//*[@id="comic"]'), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/lukesurl.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/lukesurl.com.php deleted file mode 100644 index 816233dd..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/lukesurl.com.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'body' => array('//div[@id="comic"]//img'), - 'strip' => array(), - 'test_url' => 'http://www.lukesurl.com/archives/comic/665-3-of-clubs', - ), - ), - 'filter' => array( - '%.*%' => array( - '%title="(.+)" */>%' => '/><br/>$1', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/macg.co.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/macg.co.php deleted file mode 100644 index bbe6dbcd..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/macg.co.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.macg.co//logiciels/2014/05/feedly-sameliore-un-petit-peu-sur-mac-82205', - 'body' => array( - '//div[contains(@class, "field-name-body")]', - ), - 'strip' => array( - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/marc.info.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/marc.info.php deleted file mode 100644 index 5f582a6d..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/marc.info.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://marc.info/?l=openbsd-misc&m=141987113202061&w=2', - 'body' => array( - '//pre', - ), - 'strip' => array( - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/marriedtothesea.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/marriedtothesea.com.php deleted file mode 100644 index 469640df..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/marriedtothesea.com.php +++ /dev/null @@ -1,12 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.marriedtothesea.com/index.php?date=052915', - 'body' => array( - '//div[@align]/a/img', - ), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/marycagle.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/marycagle.com.php deleted file mode 100644 index b8665e35..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/marycagle.com.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'body' => array( - '//img[@id="cc-comic"]', - '//div[@class="cc-newsbody"]', - ), - 'strip' => array(), - 'test_url' => 'http://www.marycagle.com/letsspeakenglish/74-grim-reality/', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/maximumble.thebookofbiff.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/maximumble.thebookofbiff.com.php deleted file mode 100644 index 88800546..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/maximumble.thebookofbiff.com.php +++ /dev/null @@ -1,10 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://maximumble.thebookofbiff.com/2015/04/20/1084-change/', - 'body' => array('//div[@id="comic"]/div/a/img'), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/medium.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/medium.com.php deleted file mode 100644 index e20860e0..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/medium.com.php +++ /dev/null @@ -1,19 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'https://medium.com/lessons-learned/917b8b63ae3e', - 'body' => array( - '//div[@class="section-content"]', - ), - 'strip' => array( - '//div[contains(@class,"metabar")]', - '//img[contains(@class,"thumbnail")]', - '//h1', - '//blockquote', - '//div[@class="aspectRatioPlaceholder-fill"]', - '//footer' - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/mercworks.net.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/mercworks.net.php deleted file mode 100644 index c7a27dea..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/mercworks.net.php +++ /dev/null @@ -1,17 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'body' => array('//div[@id="comic"]', - '//div[contains(@class,"entry-content")]', - ), - 'strip' => array(), - 'test_url' => 'http://mercworks.net/comicland/healthy-choice/', - ), - ), - 'filter' => array( - '%.*%' => array( - '%title="(.+)" */>%' => '/><br/>$1', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/metronieuws.nl.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/metronieuws.nl.php deleted file mode 100644 index 5011169f..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/metronieuws.nl.php +++ /dev/null @@ -1,10 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.metronieuws.nl/sport/2015/04/broer-fellaini-zorgde-bijna-voor-paniek-bij-mourinho', - 'body' => array('//div[contains(@class,"article-top")]/div[contains(@class,"image-component")] | //div[@class="article-full-width"]/div[1]'), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/milwaukeenns.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/milwaukeenns.php deleted file mode 100644 index ddb29a56..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/milwaukeenns.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://milwaukeenns.org/2016/01/08/united-way-grant-enables-sdc-to-restore-free-tax-assistance-program/', - 'body' => array( - '//div[@class="pf-content"]', - ), - 'strip' => array( - '//div[@class="printfriendly"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/mokepon.smackjeeves.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/mokepon.smackjeeves.com.php deleted file mode 100644 index 1ddcd407..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/mokepon.smackjeeves.com.php +++ /dev/null @@ -1,10 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://mokepon.smackjeeves.com/comics/2120096/chapter-9-page-68/', - 'body' => array('//*[@id="comic_area_inner"]/img | //*[@id="comic_area_inner"]/a/img'), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/monandroid.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/monandroid.com.php deleted file mode 100644 index f87560e2..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/monandroid.com.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.monandroid.com/blog/tutoriel-avance-activer-le-stockage-fusionne-sur-android-6-marshamallow-t12.html', - 'body' => array( - '//div[@class="blog-post-body"]', - ), - 'strip' => array( - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/monwindows.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/monwindows.com.php deleted file mode 100644 index b2b24d74..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/monwindows.com.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.monwindows.com/tout-savoir-sur-le-centre-d-action-de-windows-phone-8-1-t40574.html', - 'body' => array( - '//div[@class="blog-post-body"]', - ), - 'strip' => array( - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/moya-planeta.ru.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/moya-planeta.ru.php deleted file mode 100644 index dd842844..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/moya-planeta.ru.php +++ /dev/null @@ -1,21 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.moya-planeta.ru/travel/view/chto_yaponcu_horosho_russkomu_ne_ponyat_20432/', - 'body' => array( - '//div[@class="full_object"]', - ), - 'strip' => array( - '//div[@class="full_object_panel object_panel"]', - '//div[@class="full_object_panel_geo object_panel"]', - '//div[@class="full_object_title"]', - '//div[@class="full_object_social_likes"]', - '//div[@class="full_object_planeta_likes"]', - '//div[@class="full_object_go2comments"]', - '//div[@id="yandex_ad_R-163191-3"]', - '//div[@class="full_object_shop_article_recommend"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/mrlovenstein.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/mrlovenstein.com.php deleted file mode 100644 index b971091f..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/mrlovenstein.com.php +++ /dev/null @@ -1,9 +0,0 @@ -<?php -return array( - 'filter' => array( - '%.*%' => array( - '%alt="(.+)" */>%' => '/><br/>$1', - '%\.png%' => '_rollover.png', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/muckrock.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/muckrock.com.php deleted file mode 100644 index 9e354a36..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/muckrock.com.php +++ /dev/null @@ -1,20 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'https://www.muckrock.com/news/archives/2016/jan/13/5-concerns-private-prisons/', - 'body' => array( - '//div[@class="content"]', - ), - 'strip' => array( - '//div[@class="newsletter-widget"]', - '//div[@class="contributors"]', - '//time', - '//h1', - '//div[@class="secondary"]', - '//aside', - '//div[@class="articles__related"]' - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/mynorthshorenow.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/mynorthshorenow.com.php deleted file mode 100644 index b6309157..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/mynorthshorenow.com.php +++ /dev/null @@ -1,27 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.mynorthshorenow.com/story/news/local/fox-point/2017/04/04/fox-point-building-board-approves-dunwood-commons-project/99875570/', - 'body' => array( - '//div[@itemprop="articleBody"]', - ), - 'strip' => array( - '//h1', - '//iframe', - '//span[@class="mycapture-small-btn mycapture-btn-with-text mycapture-expandable-photo-btn-small js-mycapture-btn-small"]', - '//div[@class="close-wrap"]', - '//div[contains(@class,"ui-video-wrapper")]', - '//div[contains(@class,"media-mob")]', - '//div[contains(@class,"left-mob")]', - '//div[contains(@class,"nerdbox")]', - '//p/span', - '//div[contains(@class,"oembed-asset")]', - '//*[contains(@class,"share")]', - '//div[contains(@class,"gallery-asset")]', - '//div[contains(@class,"oembed-asset")]', - '//div[@class="article-print-url"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/nakedCapitalism.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/nakedCapitalism.php deleted file mode 100644 index ec2d5fd5..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/nakedCapitalism.php +++ /dev/null @@ -1,11 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://feedproxy.google.com/~r/NakedCapitalism/~3/JOBxEHxN8ZI/mark-blyth-liberalism-undermined-democracy-failure-democratic-party.html', - 'body' => array( - '//div[@class="pf-content"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/nasa.gov.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/nasa.gov.php deleted file mode 100644 index c6692d07..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/nasa.gov.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'https://www.nasa.gov/image-feature/jpl/pia20514/coy-dione', - 'body' => array( - '//div[@class="article-body"]', - ), - 'strip' => array( - '//div[@class="title-bar"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/nat-geo.ru.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/nat-geo.ru.php deleted file mode 100644 index 1a42d997..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/nat-geo.ru.php +++ /dev/null @@ -1,11 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.nat-geo.ru/fact/868093-knidos-antichnyy-naukograd/', - 'body' => array( - '//div[@class="article-inner-text"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/nationaljournal.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/nationaljournal.com.php deleted file mode 100644 index 5e612bef..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/nationaljournal.com.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.nationaljournal.com/s/354962/south-carolina-evangelicals-outstrip-establishment?mref=home_top_main', - 'body' => array( - '//div[@class="section-body"]', - ), - 'strip' => array( - '//*[contains(@class, "-related")]', - '//*[contains(@class, "social")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/nature.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/nature.com.php deleted file mode 100644 index 6b9e87f4..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/nature.com.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.nature.com/doifinder/10.1038/nature.2015.18340', - 'body' => array( - '//div[contains(@class,"main-content")]', - ), - 'strip' => array(), - ), - ), -); - diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/nba.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/nba.com.php deleted file mode 100644 index c8ea926f..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/nba.com.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.nba.com/2015/news/09/25/knicks-jackson-to-spend-more-time-around-coaching-staff.ap/index.html?rss=true', - 'body' => array( - '//div[@class="paragraphs"]', - ), - 'strip' => array( - '//div[@id="nbaArticleSocialWrapper_bot"]', - '//h5', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/nedroid.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/nedroid.com.php deleted file mode 100644 index 3214c62a..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/nedroid.com.php +++ /dev/null @@ -1,8 +0,0 @@ -<?php -return array( - 'filter' => array( - '%.*%' => array( - '%title="(.+)" */>%' => '/><br/>$1', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/networkworld.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/networkworld.com.php deleted file mode 100644 index 18524354..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/networkworld.com.php +++ /dev/null @@ -1,20 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.networkworld.com/article/3020585/security/the-incident-response-fab-five.html', - 'body' => array( - '//figure/img[@class="hero-img"]', - '//section[@class="deck"]', - '//div[@itemprop="articleBody"] | //div[@itemprop="reviewBody"]', - '//div[@class="carousel-inside-crop"]', - ), - 'strip' => array( - '//script', - '//aside', - '//div[@class="credit"]', - '//div[@class="view-large"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/neustadt-ticker.de.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/neustadt-ticker.de.php deleted file mode 100644 index e0c0d19d..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/neustadt-ticker.de.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.neustadt-ticker.de/41302/alltag/kultur/demo-auf-der-boehmischen', - 'body' => array( - '//div[@class="entry-content"]', - ), - 'strip' => array( - '//*[contains(@class, "sharedaddy")]', - '//*[contains(@class, "yarpp-related")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/nextinpact.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/nextinpact.com.php deleted file mode 100644 index 29dd9d6b..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/nextinpact.com.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.nextinpact.com/news/101122-3d-nand-intel-lance-six-nouvelles-gammes-ssd-pour-tous-usages.htm', - 'body' => array( - '//div[@class="container_article"]', - ), - 'strip' => array( - '//div[@class="infos_article"]', - '//div[@id="actu_auteur"]', - '//div[@id="soutenir_journaliste"]', - '//section[@id="bandeau_abonnez_vous"]', - '//br' - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/niceteethcomic.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/niceteethcomic.com.php deleted file mode 100644 index f41e4438..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/niceteethcomic.com.php +++ /dev/null @@ -1,10 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%/archives.*%' => array( - 'test_url' => 'http://niceteethcomic.com/archives/page119/', - 'body' => array('//*[@class="comicpane"]/a/img'), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/nichtlustig.de.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/nichtlustig.de.php deleted file mode 100644 index 4d083f98..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/nichtlustig.de.php +++ /dev/null @@ -1,8 +0,0 @@ -<?php -return array( - 'filter' => array( - '%.*%' => array( - '%.*static.nichtlustig.de/comics/full/(\\d+).*%s' => '<img src="http://static.nichtlustig.de/comics/full/$1.jpg" />', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/oglaf.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/oglaf.com.php deleted file mode 100644 index 8b2b5b65..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/oglaf.com.php +++ /dev/null @@ -1,19 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'body' => array( - '//img[@id="strip"]', - '//a/div[@id="nx"]/..', - ), - 'strip' => array(), - 'test_url' => 'http://oglaf.com/slodging/', - ), - ), - 'filter' => array( - '%.*%' => array( - '%alt="(.+)" title="(.+)" */>%' => '/><br/>$1<br/>$2<br/>', - '%</a>%' => 'Next page</a>', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/onhax.net.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/onhax.net.php deleted file mode 100644 index 213849d8..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/onhax.net.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://onhax.net/process-lasso-8-9-1-4-pro-key-portable-is-here-latest', - 'body' => array( - '//div[@class="postcontent"]', - ), - 'strip' => array( - '//*[@class="sharedaddy sd-sharing-enabled"]', - '//*[@class="yarpp-related"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/onmilwaukee.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/onmilwaukee.php deleted file mode 100644 index f66ac4b8..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/onmilwaukee.php +++ /dev/null @@ -1,24 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://onmilwaukee.com/movies/articles/downerspelunking.html', - 'body' => array( - '//article[contains(@class, "show")]', - ), - 'strip' => array( - '//h1', - '//div[contains(@class,"-ad")]', - '//div[contains(@class,"_ad")]', - '//div[@id="pub_wrapper"]', - '//div[contains(@class,"share_tools")]', - '//div[@class="clearfix"]', - '//div[contains(@class,"image_control")]', - '//section[@class="ribboned"]', - '//div[contains(@class,"sidebar")]', - '//aside[@class="article_tag_list"]', - '//section[contains(@id,"more_posts")]' - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/openculture.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/openculture.com.php deleted file mode 100644 index 84f2beed..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/openculture.com.php +++ /dev/null @@ -1,11 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.openculture.com/2017/03/are-we-living-inside-a-computer-simulation-watch-the-simulation-argument.html', - 'body' => array( - '//div[@class="entry"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/opennet.ru.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/opennet.ru.php deleted file mode 100644 index 1fb7722b..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/opennet.ru.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'https://www.opennet.ru/opennews/art.shtml?num=46549', - 'body' => array( - '//*[@id="r_memo"]', - ), - 'strip' => array( - ), - ) - ) -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/openrightsgroup.org.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/openrightsgroup.org.php deleted file mode 100644 index 94139a72..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/openrightsgroup.org.php +++ /dev/null @@ -1,20 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'https://www.openrightsgroup.org/blog/2014/3-days-to-go-till-orgcon2014', - 'body' => array( - '//div[contains(@class, "content")]/div', - ), - 'strip' => array( - '//h2[1]', - '//div[@class="info"]', - '//div[@class="tags"]', - '//div[@class="comments"]', - '//div[@class="breadcrumbs"]', - '//h1[@class="pageTitle"]', - '//p[@class="bookmarkThis"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/opensource.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/opensource.com.php deleted file mode 100644 index 60f3577b..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/opensource.com.php +++ /dev/null @@ -1,22 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://opensource.com/life/15/10/how-internet-things-will-change-way-we-think', - 'body' => array( - '//div[@id="article-template"]', - ), - 'strip' => array( - '//div[contains(@class,"os-article__sidebar")]', - '//div[@class="panel-pane pane-node-title"]', - '//div[@class="panel-pane pane-os-article-byline"]', - '//ul', - '//div[contains(@class,"-license")]', - '//div[contains(@class,"-tags")]', - '//div[@class="panel-pane pane-os-article-byline"]', - '//div[@class="os-article__content-below"]', - '//div[@id="comments"]' - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/optipess.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/optipess.com.php deleted file mode 100644 index 3214c62a..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/optipess.com.php +++ /dev/null @@ -1,8 +0,0 @@ -<?php -return array( - 'filter' => array( - '%.*%' => array( - '%title="(.+)" */>%' => '/><br/>$1', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/osnews.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/osnews.com.php deleted file mode 100644 index 1d1396c8..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/osnews.com.php +++ /dev/null @@ -1,11 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://osnews.com/story/28863/Google_said_to_be_under_US_antitrust_scrutiny_over_Android', - 'body' => array( - '//div[@class="newscontent1"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/pastebin.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/pastebin.com.php deleted file mode 100644 index b20bf41c..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/pastebin.com.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://pastebin.com/ed1pP9Ak', - 'body' => array( - '//div[@class="text"]', - ), - 'strip' => array( - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/peebleslab.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/peebleslab.com.php deleted file mode 100644 index ce4891d1..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/peebleslab.com.php +++ /dev/null @@ -1,9 +0,0 @@ -<?php -return array( - 'filter' => array( - '%.*%' => array( - // the extra space is required to strip the title cleanly - '%title="(.+) " */>%' => '/><br/>$1', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/penny-arcade.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/penny-arcade.com.php deleted file mode 100644 index dd39983b..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/penny-arcade.com.php +++ /dev/null @@ -1,21 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%/news/.*%' => array( - 'test_url' => 'http://penny-arcade.com/news/post/2015/04/15/101-part-two', - 'body' => array( - '//*[@class="postBody"]/*', - ), - 'strip' => array( - ), - ), - '%/comic/.*%' => array( - 'test_url' => 'http://penny-arcade.com/comic/2015/04/15', - 'body' => array( - '//*[@id="comicFrame"]/a/img', - ), - 'strip' => array( - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/pixelbeat.org.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/pixelbeat.org.php deleted file mode 100644 index fa9052ea..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/pixelbeat.org.php +++ /dev/null @@ -1,12 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.pixelbeat.org/programming/sigpipe_handling.html#1425573246', - 'body' => array( - '//div[@class="contentText"]', - ), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/plus.google.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/plus.google.com.php deleted file mode 100644 index 5e48a6cf..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/plus.google.com.php +++ /dev/null @@ -1,11 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'https://plus.google.com/+LarryPage/posts/Lh8SKC6sED1', - 'body' => array( - '//div[@role="article"]/div[contains(@class, "eE")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/popstrip.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/popstrip.com.php deleted file mode 100644 index 801a2814..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/popstrip.com.php +++ /dev/null @@ -1,8 +0,0 @@ -<?php -return array( - 'filter' => array( - '%.*%' => array( - '%(<img.+/s/[^"]+/)(.+)%' => '$1$2$1bonus.png"/>', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/publicpolicyforum.org.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/publicpolicyforum.org.php deleted file mode 100644 index 5dc8be88..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/publicpolicyforum.org.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'https://publicpolicyforum.org/blog/going-extra-mile', - 'body' => array( - '//div[contains(@class,"field-name-post-date")]', - '//div[contains(@class,"field-name-body")]', - ), - 'strip' => array( - '//img[@src="http://publicpolicyforum.org/sites/default/files/logo3.jpg"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/publy.ru.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/publy.ru.php deleted file mode 100644 index bcfeeb99..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/publy.ru.php +++ /dev/null @@ -1,24 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.publy.ru/post/19988', - 'body' => array( - '//div[@class="singlepost"]', - ), - 'strip' => array( - '//script', - '//form', - '//style', - '//*[@class="featured"]', - '//*[@class="toc_white no_bullets"]', - '//*[@class="toc_title"]', - '//*[@class="pba"]', - '//*[@class="comments"]', - '//*[contains(@class, "g-single")]', - '//*[@class="ts-fab-wrapper"]', - '//*[contains(@class, "wp_rp_wrap")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/putaindecode.fr.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/putaindecode.fr.php deleted file mode 100644 index 9fa5568c..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/putaindecode.fr.php +++ /dev/null @@ -1,16 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://putaindecode.fr/posts/js/etat-lieux-js-modulaire-front/', - 'body' => array( - '//*[@class="putainde-Post-md"]', - ), - 'strip' => array( - '//*[contains(@class, "inlineimg")]', - '//*[contains(@class, "comment-respond")]', - '//header', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/recode.net.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/recode.net.php deleted file mode 100644 index 343cd12f..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/recode.net.php +++ /dev/null @@ -1,20 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://recode.net/2015/09/26/big-tech-rolls-out-red-carpet-for-indian-prime-minister-lobbies-behind-closed-doors/', - 'body' => array( - '//img[contains(@class,"attachment-large")]', - '//div[contains(@class,"postarea")]', - '//li[@class,"author"]', - ), - 'strip' => array( - '//script', - '//div[contains(@class,"sharedaddy")]', - '//div[@class="post-send-off"]', - '//div[@class="large-12 columns"]', - '//div[contains(@class,"inner-related-article")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/retractionwatch.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/retractionwatch.com.php deleted file mode 100644 index b97c73ed..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/retractionwatch.com.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://retractionwatch.com/2015/11/12/psychologist-jens-forster-settles-case-by-agreeing-to-2-retractions/', - 'body' => array( - '//*[@class="main"]', - '//*[@class="entry-content"]', - ), - 'strip' => array( - '//*[contains(@class, "sharedaddy")]', - '//*[contains(@class, "jp-relatedposts")]', - '//p[@class="p1"]', - ) - ) - ) -); - diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/rockpapershotgun.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/rockpapershotgun.com.php deleted file mode 100644 index 71110786..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/rockpapershotgun.com.php +++ /dev/null @@ -1,11 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'https://www.rockpapershotgun.com/2016/08/26/the-divisions-expansions-delayed-to-improve-the-game/', - 'body' => array( - '//div[@class="entry"]', - ) - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/rue89.nouvelobs.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/rue89.nouvelobs.com.php deleted file mode 100644 index cb9116a3..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/rue89.nouvelobs.com.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://rue89.feedsportal.com/c/33822/f/608948/s/30999fa0/sc/24/l/0L0Srue890N0C20A130C0A80C30A0Cfaisait0Eboris0Eboillon0Eex0Esarko0Eboy0E350A0E0A0A0A0Eeuros0Egare0Enord0E245315/story01.htm', - 'body' => array( - '//*[@id="article"]/div[contains(@class, "content")]', - ), - 'strip' => array( - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/rugbyrama.fr.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/rugbyrama.fr.php deleted file mode 100644 index 9915c234..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/rugbyrama.fr.php +++ /dev/null @@ -1,20 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.rugbyrama.fr/rugby/top-14/2015-2016/top-14-hayman-coupe-du-monde-finale-2012-lutte.-voici-levan-chilachava-toulon_sto5283863/story.shtml', - 'body' => array( - '//div[@class="storyfull__content"]', - ), - 'strip' => array( - '//script', - '//form', - '//style', - '//*[@class="share-buttons"]', - '//*[@class="ad"]', - '//*[@class="hide-desktop"]', - '//*[@id="tracking_img"]', - ) - ) - ) -);
\ No newline at end of file diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/satwcomic.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/satwcomic.com.php deleted file mode 100644 index d63fc11c..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/satwcomic.com.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://satwcomic.com/day-at-the-beach', - 'body' => array( - '//div[@class="container"]/center/a/img', - '//span[@itemprop="articleBody"]', - ), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/scrumalliance.org.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/scrumalliance.org.php deleted file mode 100644 index 7835fd9e..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/scrumalliance.org.php +++ /dev/null @@ -1,12 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'https://www.scrumalliance.org/community/articles/2015/march/an-introduction-to-agile-project-intake?feed=articles', - 'body' => array( - '//div[@class="article_content"]', - ), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/securityfocus.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/securityfocus.com.php deleted file mode 100644 index 01045148..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/securityfocus.com.php +++ /dev/null @@ -1,17 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.securityfocus.com/archive/1/540139', - 'body' => array( - '//div[@id="vulnerability"]', - '//div[@class="comments_reply"]', - ), - 'strip' => array( - '//span[@class="title"]', - '//div[@id="logo_new"]', - '//div[@id="bannerAd"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/sentfromthemoon.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/sentfromthemoon.com.php deleted file mode 100644 index f4354179..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/sentfromthemoon.com.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'body' => array( - '//div[@class="comicpane"]/a/img', - '//div[@class="entry"]', - ), - 'strip' => array(), - 'test_url' => 'http://sentfromthemoon.com/archives/1417', - ), - ), - 'filter' => array( - '%.*%' => array( - '%title="(.+)" */>%' => '/><br/>$1', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/sitepoint.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/sitepoint.com.php deleted file mode 100644 index ab0eb7d4..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/sitepoint.com.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.sitepoint.com/creating-hello-world-app-swift/', - 'body' => array( - '//section[@class="article_body"]', - ), - 'strip' => array( - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/slashdot.org.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/slashdot.org.php deleted file mode 100644 index 89ced8b6..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/slashdot.org.php +++ /dev/null @@ -1,11 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://science.slashdot.org/story/15/04/20/0528253/pull-top-can-tabs-at-50-reach-historic-archaeological-status', - 'body' => array( - '//article/div[@class="body"] | //article[@class="layout-article"]/div[@class="elips"]', ), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/smallhousebliss.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/smallhousebliss.com.php deleted file mode 100644 index 8c13c44c..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/smallhousebliss.com.php +++ /dev/null @@ -1,19 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://smallhousebliss.com/2013/08/29/house-g-by-lode-architecture/', - 'body' => array( - '//div[@class="post-content"]', - ), - 'strip' => array( - '//*[contains(@class, "gallery")]', - '//*[contains(@class, "share")]', - '//*[contains(@class, "wpcnt")]', - '//*[contains(@class, "meta")]', - '//*[contains(@class, "postitle")]', - '//*[@id="nav-below"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/smarthomewelt.de.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/smarthomewelt.de.php deleted file mode 100644 index 7463abc7..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/smarthomewelt.de.php +++ /dev/null @@ -1,10 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://smarthomewelt.de/apple-tv-amazon-echo-smart-home/', - 'body' => array('//div[@class="entry-inner"]/p | //div[@class="entry-inner"]/div[contains(@class,"wp-caption")]'), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/smashingmagazine.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/smashingmagazine.com.php deleted file mode 100644 index cbe10726..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/smashingmagazine.com.php +++ /dev/null @@ -1,10 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.smashingmagazine.com/2015/04/17/using-sketch-for-responsive-web-design-case-study/', - 'body' => array('//article[contains(@class,"post")]/p'), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/smbc-comics.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/smbc-comics.com.php deleted file mode 100644 index 42262dc9..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/smbc-comics.com.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.smbc-comics.com/comic/the-troll-toll', - 'body' => array( - '//div[@id="cc-comicbody"]', - '//div[@id="aftercomic"]', - ), - 'strip' => array( - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/snopes.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/snopes.com.php deleted file mode 100644 index b0fe6557..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/snopes.com.php +++ /dev/null @@ -1,22 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.snopes.com/bacca-brides-on-tour/', - 'body' => array( - '//article', - ), - 'strip' => array( - '//span[@itemprop="author"]', - '//div[contains(@class,"author-")]', - '//h1', - '//style', - '//div[contains(@class,"socialShares")]', - '//div[contains(@class,"ad-unit")]', - '//aside', - '//div[contains(@class,"boomtrain")]', - '//footer' - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/soundandvision.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/soundandvision.com.php deleted file mode 100644 index 6448bb05..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/soundandvision.com.php +++ /dev/null @@ -1,21 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.soundandvision.com/content/james-guthrie-mixing-roger-waters-and-pink-floyd-51', - 'body' => array( - '//div[@id="left"]', - ), - 'strip' => array( - '//div[@class="meta"]', - '//div[@class="ratingsbox"]', - '//h1', - '//h2', - '//addthis', - '//comment-links', - '//div[@class="book-navigation"]', - '//div[@class="comment-links"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/spiegel.de.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/spiegel.de.php deleted file mode 100644 index e2e3db00..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/spiegel.de.php +++ /dev/null @@ -1,11 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.spiegel.de/politik/ausland/afrika-angola-geht-gegen-islam-vor-und-schliesst-moscheen-a-935788.html', - 'body' => array( - '//div[contains(@class, "article-section")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/stereophile.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/stereophile.com.php deleted file mode 100644 index 8e410be4..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/stereophile.com.php +++ /dev/null @@ -1,11 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.stereophile.com/content/2015-rocky-mountain-audio-fest-starts-friday', - 'body' => array( - '//div[@class="content clear-block"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/stupidfox.net.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/stupidfox.net.php deleted file mode 100644 index 61182d72..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/stupidfox.net.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://stupidfox.net/134-sleepy-time', - 'body' => array( - '//div[@class="comicmid"]/center/a/img', - '//div[@class="stand_high"]', - ), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/subtraction.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/subtraction.com.php deleted file mode 100644 index 6d744277..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/subtraction.com.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.subtraction.com/2015/06/06/time-lapse-video-of-one-world-trade-center/', - 'body' => array('//article/div[@class="entry-content"]'), - 'strip' => array(), - ), - ), - 'filter' => array( - '%.*%' => array( - '%\+<h3.*/ul>%' => '', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/sz.de.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/sz.de.php deleted file mode 100644 index 90bde5a9..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/sz.de.php +++ /dev/null @@ -1,10 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://sz.de/1.2443161', - 'body' => array('//article[@id="sitecontent"]/section[@class="topenrichment"]//img | //article[@id="sitecontent"]/section[@class="body"]/section[@class="authors"]/preceding-sibling::*[not(contains(@class, "ad"))]'), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/takprosto.cc.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/takprosto.cc.php deleted file mode 100644 index 624ef907..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/takprosto.cc.php +++ /dev/null @@ -1,21 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://takprosto.cc/kokteyl-dlya-pohudeniya-v-domashnih-usloviyah/', - 'body' => array( - '//div[contains(@class, "entry-contentt")]', - ), - 'strip' => array( - '//script', - '//form', - '//style', - '//*[@class="views_post"]', - '//*[contains(@class, "mailchimp-box")]', - '//*[contains(@class, "essb_links")]', - '//*[contains(@rel, "nofollow")]', - '//*[contains(@class, "ads")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/techcrunch.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/techcrunch.com.php deleted file mode 100644 index d6e620f6..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/techcrunch.com.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://techcrunch.com/2013/08/31/indias-visa-maze/', - 'body' => array( - '//div[contains(@class, "media-container")]', - '//div[@class="body-copy"]', - ), - 'strip' => array( - '//*[contains(@class, "module-crunchbase")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/the-ebook-reader.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/the-ebook-reader.com.php deleted file mode 100644 index 3b01eb96..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/the-ebook-reader.com.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://blog.the-ebook-reader.com/2015/09/25/kobo-glo-hd-and-kobo-touch-2-0-covers-and-cases-roundup/', - 'body' => array( - '//div[@class="entry"]', - ), - 'strip' => array( - '//div[@id="share"]', - '//div[contains(@class,"ItemCenter")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/theatlantic.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/theatlantic.com.php deleted file mode 100644 index bfad4ab2..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/theatlantic.com.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.theatlantic.com/politics/archive/2015/09/what-does-it-mean-to-lament-the-poor-inside-panem/407317/', - 'body' => array( - '//picture[@class="img"]', - '//figure/figcaption/span', - '//div/p[@itemprop="description"]', - '//div[@class="article-body"]', - '//ul[@class="photos"]', - ), - 'strip' => array( - '//aside[@class="callout"]', - '//span[@class="credit"]', - '//figcaption[@class="credit"]', - '//aside[contains(@class,"partner-box")]', - '//div[contains(@class,"ad")]', - '//a[contains(@class,"social-icon")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/theawkwardyeti.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/theawkwardyeti.com.php deleted file mode 100644 index fd4f3d50..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/theawkwardyeti.com.php +++ /dev/null @@ -1,12 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%/comic/.*%' => array( - 'test_url' => 'http://theawkwardyeti.com/comic/things-to-do/', - 'body' => array( - '//div[@id="comic"]' - ), - 'strip' => array() - ) - ) -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/thecodinglove.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/thecodinglove.com.php deleted file mode 100644 index c6ec5bf5..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/thecodinglove.com.php +++ /dev/null @@ -1,10 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://thecodinglove.com/post/116897934767', - 'body' => array('//div[@class="bodytype"]'), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/thedoghousediaries.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/thedoghousediaries.com.php deleted file mode 100644 index d2f840d7..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/thedoghousediaries.com.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'body' => array( - '//div[@class="comicpane"]/a/img', - '//div[@class="entry"]', - ), - 'strip' => array(), - 'test_url' => 'http://thedoghousediaries.com/6023', - ), - ), - 'filter' => array( - '%.*%' => array( - '%title="(.+)" */>%' => '/><br/>$1', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/thegamercat.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/thegamercat.com.php deleted file mode 100644 index f9b4637b..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/thegamercat.com.php +++ /dev/null @@ -1,10 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.thegamercat.com/comic/just-no/', - 'body' => array('//div[@id="comic"] | //div[@class="post-content"]/div[@class="entry"]/p'), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/thehindu.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/thehindu.com.php deleted file mode 100644 index 1e6735ba..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/thehindu.com.php +++ /dev/null @@ -1,19 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.thehindu.com/sci-tech/science/why-is-the-shape-of-cells-in-a-honeycomb-always-hexagonal/article7692306.ece?utm_source=RSS_Feed&utm_medium=RSS&utm_campaign=RSS_Syndication', - 'body' => array( - '//div/img[@class="main-image"]', - '//div[@class="photo-caption"]', - '//div[@class="articleLead"]', - '//p', - '//span[@class="upper"]', - ), - 'strip' => array( - '//div[@id="articleKeywords"]', - '//div[@class="photo-source"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/thelocal.se.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/thelocal.se.php deleted file mode 100644 index c3ec250c..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/thelocal.se.php +++ /dev/null @@ -1,17 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'www.thelocal.se/20161219/this-swede-can-memorize-hundreds-of-numbers-in-only-five-minutes', - 'body' => array( - '//div[@id="article-photo"]', - '//div[@id="article-description"]', - '//div[@id="article-body"]', - ), - 'strip' => array( - '//div[@id="article-info-middle"]', - ) - ) - ) -); - diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/themerepublic.net.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/themerepublic.net.php deleted file mode 100644 index bc47b278..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/themerepublic.net.php +++ /dev/null @@ -1,10 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.themerepublic.net/2015/04/david-lopez-pitoko.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+blogspot%2FDngUJ+%28Theme+Republic%29&utm_content=FeedBurner', - 'body' => array('//*[@class="post-body"]'), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/themoscowtimes.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/themoscowtimes.com.php deleted file mode 100644 index 0f5bf75e..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/themoscowtimes.com.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.themoscowtimes.com/business/article/535500.html', - 'body' => array( - '//div[@class="article_main_img"]', - '//div[@class="article_text"]', - ), - 'strip' => array( - '//div[@class="articlebottom"]', - '//p/b', - '//p/a[contains(@href, "/article.php?id=")]', - '//div[@class="disqus_wrap"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/thenewslens.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/thenewslens.com.php deleted file mode 100644 index 75381707..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/thenewslens.com.php +++ /dev/null @@ -1,21 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://international.thenewslens.com/post/255032/', - 'body' => array( - '//div[@class="article-section"]', - ), - 'strip' => array( - '//div[contains(@class,"ad-")]', - '//div[@class="article-title-box"]', - '//div[@class="function-box"]', - '//p/span', - '//aside', - '//footer', - '//div[@class="article-infoBot-box"]', - '//div[contains(@class,"standard-container")]' - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/theodd1sout.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/theodd1sout.com.php deleted file mode 100644 index d06ed124..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/theodd1sout.com.php +++ /dev/null @@ -1,8 +0,0 @@ -<?php -return array( - 'filter' => array( - '%.*%' => array( - '%-150x150%' => '', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/theonion.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/theonion.com.php deleted file mode 100644 index acbfd36b..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/theonion.com.php +++ /dev/null @@ -1,12 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.theonion.com/article/wild-eyed-jim-harbaugh-informs-players-they-must-k-51397?utm_medium=RSS&utm_campaign=feeds', - 'body' => array( - '//div[@class="content-masthead"]/figure/div/noscript/img', - '//div[@class="content-text"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/thestandard.com.hk.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/thestandard.com.hk.php deleted file mode 100644 index 1163b345..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/thestandard.com.hk.php +++ /dev/null @@ -1,22 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.thestandard.com.hk/breaking_news_detail.asp?id=67156', - 'body' => array( - '//table/tr/td/span[@class="bodyCopy"]', - ), - 'strip' => array( - '//script', - '//br', - '//map[@name="gif_bar"]', - '//img[contains(@usemap,"gif_bar")]', - '//a', - '//span[@class="bodyHeadline"]', - '//i', - '//b', - '//table', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/threepanelsoul.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/threepanelsoul.com.php deleted file mode 100644 index 4af6196e..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/threepanelsoul.com.php +++ /dev/null @@ -1,11 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'body' => array( - '//img[@id="cc-comic"]', - ), - 'test_url' => 'http://www.threepanelsoul.com/comic/uncloaking', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/timesofindia.indiatimes.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/timesofindia.indiatimes.com.php deleted file mode 100644 index 19246806..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/timesofindia.indiatimes.com.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://timesofindia.indiatimes.com/city/mangaluru/Adani-UPCL-to-release-CSR-grant-of-Rs-3-74-crore-to-YellurGram-Panchayat/articleshow/50512116.cms', - 'body' => array( - '//div[@class="article_content clearfix"]', - '//section[@class="highlight clearfix"]', - ), - 'strip' => array( - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/travel-dealz.de.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/travel-dealz.de.php deleted file mode 100644 index 4ee4fcdc..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/travel-dealz.de.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%^/blog.*%' => array( - 'test_url' => 'http://travel-dealz.de/blog/venere-gutschein/', - 'body' => array('//div[@class="post-entry"]'), - 'strip' => array( - '//*[@id="jp-relatedposts"]', - '//*[@class="post-meta"]', - '//*[@class="post-data"]', - '//*[@id="author-meta"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/treehugger.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/treehugger.com.php deleted file mode 100644 index 55eb7e01..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/treehugger.com.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.treehugger.com/uncategorized/top-ten-posts-week-bunnies-2.html', - 'body' => array( - '//div[contains(@class, "promo-image")]', - '//div[contains(@id, "entry-body")]', - ), - 'strip' => array( - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/treelobsters.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/treelobsters.com.php deleted file mode 100644 index 3214c62a..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/treelobsters.com.php +++ /dev/null @@ -1,8 +0,0 @@ -<?php -return array( - 'filter' => array( - '%.*%' => array( - '%title="(.+)" */>%' => '/><br/>$1', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/twogag.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/twogag.com.php deleted file mode 100644 index 79f4f62e..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/twogag.com.php +++ /dev/null @@ -1,8 +0,0 @@ -<?php -return array( - 'filter' => array( - '%.*%' => array( - '%http://www.twogag.com/comics-rss/([^.]+)\\.jpg%' => 'http://www.twogag.com/comics/$1.jpg', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/twokinds.keenspot.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/twokinds.keenspot.com.php deleted file mode 100644 index 3428fcb4..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/twokinds.keenspot.com.php +++ /dev/null @@ -1,10 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://twokinds.keenspot.com/archive.php?p=0', - 'body' => array('//*[@class="comic"]/div/a/img | //*[@class="comic"]/div/img | //*[@id="cg_img"]/img | //*[@id="cg_img"]/a/img'), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/undeadly.org.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/undeadly.org.php deleted file mode 100644 index 8b15900a..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/undeadly.org.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://undeadly.org/cgi?action=article&sid=20141101181155', - 'body' => array( - '/html/body/table[3]/tbody/tr/td[1]/table[2]/tr/td[1]', - ), - 'strip' => array( - '//font', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/upi.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/upi.com.php deleted file mode 100644 index ec8d1a1a..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/upi.com.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.upi.com/Top_News/US/2015/09/26/Tech-giants-Hollywood-stars-among-guests-at-state-dinner-for-Chinas-Xi-Jinping/4541443281006/', - 'body' => array( - '//div[@class="img"]', - '//div/article[@itemprop="articleBody"]', - ), - 'strip' => array( - '//div[@align="center"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/usatoday.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/usatoday.com.php deleted file mode 100644 index edd6aa44..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/usatoday.com.php +++ /dev/null @@ -1,27 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.usatoday.com/story/life/music/2017/02/13/things-you-should-know-happened-grammy-awards-2017/97833734/', - 'body' => array( - '//div[@itemprop="articleBody"]', - ), - 'strip' => array( - '//script', - '//h1', - '//iframe', - '//span[@class="mycapture-small-btn mycapture-btn-with-text mycapture-expandable-photo-btn-small js-mycapture-btn-small"]', - '//div[@class="close-wrap"]', - '//div[contains(@class,"ui-video-wrapper")]', - '//div[contains(@class,"media-mob")]', - '//div[contains(@class,"left-mob")]', - '//div[contains(@class,"nerdbox")]', - '//div[contains(@class,"oembed-asset")]', - '//*[contains(@class,"share")]', - '//div[contains(@class,"gallery-asset")]', - '//div[contains(@class,"oembed-asset")]', - '//div[@class="article-print-url"]' - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/version2.dk.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/version2.dk.php deleted file mode 100644 index a6d49f2e..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/version2.dk.php +++ /dev/null @@ -1,12 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.version2.dk/artikel/surface-pro-2-fungerer-bedre-til-arbejde-end-fornoejelse-55195', - 'body' => array( - '//section[contains(@class, "teaser")]', - '//section[contains(@class, "body")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/vgcats.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/vgcats.com.php deleted file mode 100644 index b2830a37..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/vgcats.com.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%/comics.*%' => array( - 'test_url' => 'http://www.vgcats.com/comics/?strip_id=358', - 'body' => array('//*[@align="center"]/img'), - 'strip' => array(), - ), - '%/super.*%' => array( - 'test_url' => 'http://www.vgcats.com/super/?strip_id=84', - 'body' => array('//*[@align="center"]/p/img'), - 'strip' => array(), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/vuxml.org.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/vuxml.org.php deleted file mode 100644 index b9bef7a4..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/vuxml.org.php +++ /dev/null @@ -1,17 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.vuxml.org/freebsd/a5f160fa-deee-11e4-99f8-080027ef73ec.html', - 'body' => array( - '//body', - ), - 'strip' => array( - '//h1', - '//div[@class="blurb"]', - '//hr', - '//p[@class="copyright"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/wausaudailyherald.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/wausaudailyherald.com.php deleted file mode 100644 index 58aceeaf..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/wausaudailyherald.com.php +++ /dev/null @@ -1,27 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.wausaudailyherald.com/story/news/2017/04/01/hundreds-gather-remember-attorney-killed-shooting-spree/99826062/?from=global&sessionKey=&autologin=', - 'body' => array( - '//div[@itemprop="articleBody"]', - ), - 'strip' => array( - '//h1', - '//iframe', - '//span[@class="mycapture-small-btn mycapture-btn-with-text mycapture-expandable-photo-btn-small js-mycapture-btn-small"]', - '//div[@class="close-wrap"]', - '//div[contains(@class,"ui-video-wrapper")]', - '//div[contains(@class,"media-mob")]', - '//div[contains(@class,"left-mob")]', - '//div[contains(@class,"nerdbox")]', - '//p/span', - '//div[contains(@class,"oembed-asset")]', - '//*[contains(@class,"share")]', - '//div[contains(@class,"gallery-asset")]', - '//div[contains(@class,"oembed-asset")]', - '//div[@class="article-print-url"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.bbc.co.uk.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.bbc.co.uk.php deleted file mode 100644 index 98fc368a..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.bbc.co.uk.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.bbc.co.uk/news/world-middle-east-23911833', - 'body' => array( - '//div[@class="story-body__inner"] | //div[@class="article"]', - '//div[@class="indPost"]', - ), - 'strip' => array( - '//form', - '//div[@id="headline"]', - '//*[@class="warning"]', - '//span[@class="off-screen"]', - '//span[@class="story-image-copyright"]', - '//ul[@class="story-body__unordered-list"]', - '//div[@class="ad_wrapper"]', - '//div[@id="article-sidebar"]', - '//div[@class="data-table-outer"]', - '//*[@class="story-date"]', - '//*[@class="story-header"]', - '//figure[contains(@class,"has-caption")]', - '//*[@class="story-related"]', - '//*[contains(@class, "byline")]', - '//p[contains(@class, "media-message")]', - '//*[contains(@class, "story-feature")]', - '//*[@id="video-carousel-container"]', - '//*[@id="also-related-links"]', - '//*[contains(@class, "share") or contains(@class, "hidden") or contains(@class, "hyper")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.bdgest.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.bdgest.com.php deleted file mode 100644 index 41ef68d4..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.bdgest.com.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.bdgest.com/chronique-6027-BD-Adrastee-Tome-2.html', - 'body' => array( - '//*[contains(@class, "chronique")]', - ), - 'strip' => array( - '//*[contains(@class, "post-review")]', - '//*[contains(@class, "footer-review")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.bgr.in.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.bgr.in.php deleted file mode 100644 index 63ca069e..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.bgr.in.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.bgr.in/news/xiaomi-redmi-3-with-13-megapixel-camera-snapdragon-616-launched-price-specifications-and-features/', - 'body' => array( - '//div[@class="article-content"]', - ), - 'strip' => array( - '//*[@class="article-meta"]', - '//*[@class="contentAdsense300"]', - '//*[@class="iwpl-social-hide"]', - '//iframe[@class="iframeads"]', - '//*[@class="disqus_thread"]', - '//*[@class="outb-mobile OUTBRAIN"]', - '//*[@class="wdt_smart_alerts"]', - '//*[@class="footnote"]', - '//*[@id="gadget-widget"]', - '//header[@class="article-title entry-header"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.businessweek.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.businessweek.com.php deleted file mode 100644 index 0acc44ec..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.businessweek.com.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.businessweek.com/articles/2013-09-18/elon-musks-hyperloop-will-work-says-some-very-smart-software', - 'body' => array( - '//div[@id="lead_graphic"]', - '//div[@id="article_body"]', - ), - 'strip' => array( - '//*[contains(@class, "related_item")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.cnn.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.cnn.com.php deleted file mode 100644 index 31d03ed9..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.cnn.com.php +++ /dev/null @@ -1,24 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.cnn.com/2013/08/31/world/meast/syria-civil-war/index.html?hpt=hp_t1', - 'body' => array( - '//div[@class="cnn_strycntntlft"]', - ), - 'strip' => array( - '//div[@class="cnn_stryshrwdgtbtm"]', - '//div[@class="cnn_strybtmcntnt"]', - '//div[@class="cnn_strylftcntnt"]', - '//div[contains(@class, "cnnGalleryContainer")]', - '//div[contains(@class, "cnn_strylftcexpbx")]', - '//div[contains(@class, "articleGalleryNavContainer")]', - '//div[contains(@class, "cnnArticleGalleryCaptionControl")]', - '//div[contains(@class, "cnnArticleGalleryNavPrevNextDisabled")]', - '//div[contains(@class, "cnnArticleGalleryNavPrevNext")]', - '//div[contains(@class, "cnn_html_media_title_new")]', - '//div[contains(@id, "disqus")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.developpez.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.developpez.com.php deleted file mode 100644 index 1535e437..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.developpez.com.php +++ /dev/null @@ -1,21 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.developpez.com/actu/81757/Mozilla-annonce-la-disponibilite-de-Firefox-36-qui-passe-au-HTTP-2-et-permet-la-synchronisation-de-son-ecran-d-accueil/', - 'body' => array( - '//*[@itemprop="articleBody"]', - ), - 'strip' => array( - '//form', - '//div[@class="content"]/img', - '//a[last()]/following-sibling::*', - '//*[contains(@class,"actuTitle")]', - '//*[contains(@class,"date")]', - '//*[contains(@class,"inlineimg")]', - '//*[@id="signaler"]', - '//*[@id="signalerFrame"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.egscomics.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.egscomics.com.php deleted file mode 100644 index 263f0755..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.egscomics.com.php +++ /dev/null @@ -1,12 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.egscomics.com/index.php?id=1690', - 'title' => '/html/head/title', - 'body' => array( - '//img[@id="comic"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.fakingnews.firstpost.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.fakingnews.firstpost.com.php deleted file mode 100644 index c948c77b..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.fakingnews.firstpost.com.php +++ /dev/null @@ -1,17 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.fakingnews.firstpost.com/2016/01/engineering-student-creates-record-in-a-decade-becomes-the-first-to-completely-exhaust-ball-pen-refill/', - 'body' => array( - '//div[@class="entry"]', - ), - 'strip' => array( - '//*[@class="socialshare_bar"]', - '//*[@class="authorbox"]', - '//*[@class="cf5_rps"]', - '//*[@class="60563 fb-comments fb-social-plugin"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.forbes.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.forbes.com.php deleted file mode 100644 index fd16ed57..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.forbes.com.php +++ /dev/null @@ -1,20 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.forbes.com/sites/andygreenberg/2013/09/05/follow-the-bitcoins-how-we-got-busted-buying-drugs-on-silk-roads-black-market/', - 'body' => array( - '//div[@id="leftRail"]/div[contains(@class, body)]', - ), - 'strip' => array( - '//aside', - '//div[contains(@class, "entity_block")]', - '//div[contains(@class, "vestpocket") and not contains(@class, "body")]', - '//div[contains(@style, "display")]', - '//div[contains(@id, "comment")]', - '//div[contains(@class, "widget")]', - '//div[contains(@class, "pagination")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.franceculture.fr.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.franceculture.fr.php deleted file mode 100644 index f7ec0d8d..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.franceculture.fr.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.franceculture.fr/emission-culture-eco-la-finance-aime-toujours-la-france-2016-01-08', - 'body' => array( - '//div[@class="text-zone"]', - ), - 'strip' => array( - '//ul[@class="tags"]', - ), - ) - ) -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.futura-sciences.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.futura-sciences.com.php deleted file mode 100644 index ea94a0fb..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.futura-sciences.com.php +++ /dev/null @@ -1,19 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.futura-sciences.com/magazines/espace/infos/actu/d/astronautique-curiosity-franchi-succes-dune-dingo-gap-52289/#xtor=RSS-8', - 'body' => array( - '//div[contains(@class, "content fiche-")]', - ), - 'strip' => array( - '//h1', - '//*[contains(@class, "content-date")]', - '//*[contains(@class, "diaporama")]', - '//*[contains(@class, "slider")]', - '//*[contains(@class, "cartouche")]', - '//*[contains(@class, "noprint")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.geekculture.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.geekculture.com.php deleted file mode 100644 index 3d0b6c75..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.geekculture.com.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.geekculture.com/joyoftech/joyarchives/2180.html', - 'body' => array( - '//p[contains(@class,"Maintext")][2]/a/img[contains(@src,"joyimages")]', - ), - 'strip' => array(), - ), - ), -); - diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.howtogeek.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.howtogeek.com.php deleted file mode 100644 index 6879e767..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.howtogeek.com.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.howtogeek.com/235283/what-is-a-wireless-hard-drive-and-should-i-get-one/', - 'body' => array( - '//div[@class="thecontent"]', - ), - 'strip' => array( - '//*[@class="relatedside"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.lepoint.fr.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.lepoint.fr.php deleted file mode 100644 index dcb7e484..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.lepoint.fr.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.lepoint.fr/c-est-arrive-aujourd-hui/19-septembre-1783-pour-la-premiere-fois-un-mouton-un-canard-et-un-coq-s-envoient-en-l-air-devant-louis-xvi-18-09-2012-1507704_494.php', - 'body' => array( - '//article', - ), - 'strip' => array( - '//*[contains(@class, "info_article")]', - '//*[contains(@class, "fildariane_titre")]', - '//*[contains(@class, "entete2_article")]', - '//*[contains(@class, "signature_article")]', - '//*[contains(@id, "share")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.lesnumeriques.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.lesnumeriques.com.php deleted file mode 100644 index 0137e209..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.lesnumeriques.com.php +++ /dev/null @@ -1,25 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.lesnumeriques.com/blender/kitchenaid-diamond-5ksb1585-p27473/test.html', - 'body' => array( - '//*[@id="product-content"]', - '//*[@id="news-content"]', - '//*[@id="article-content"]', - ), - 'strip' => array( - '//form', - '//div[contains(@class, "price-v4"])', - '//div[contains(@class, "authors-and-date")]', - '//div[contains(@class, "mini-product")]', - '//div[@id="articles-related-authors"]', - '//div[@id="tags-socials"]', - '//div[@id="user-reviews"]', - '//div[@id="product-reviews"]', - '//div[@id="publication-breadcrumbs-and-date"]', - '//div[@id="publication-breadcrumbs-and-date"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.mac4ever.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.mac4ever.com.php deleted file mode 100644 index 60bc1bd4..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.mac4ever.com.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.mac4ever.com/actu/87392_video-quand-steve-jobs-et-bill-gates-jouaient-au-bachelor-avec-le-mac', - 'body' => array( - '//div[contains(@class, "news-news-content")]', - ), - 'strip' => array( - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.makeuseof.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.makeuseof.com.php deleted file mode 100644 index a274564a..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.makeuseof.com.php +++ /dev/null @@ -1,18 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.makeuseof.com/tag/having-problems-with-audio-in-windows-10-heres-a-likely-fix/', - 'body' => array( - '//div[@class="entry"]', - ), - 'strip' => array( - '//*[@class="new_sharebar"]', - '//*[@class="author"]', - '//*[@class="wdt_grouvi"]', - '//*[@class="wdt_smart_alerts"]', - '//*[@class="modal fade grouvi"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.monsieur-le-chien.fr.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.monsieur-le-chien.fr.php deleted file mode 100644 index 5f5e987b..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.monsieur-le-chien.fr.php +++ /dev/null @@ -1,11 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.monsieur-le-chien.fr/index.php?planche=672', - 'body' => array( - '//img[starts-with(@src, "i/planches/")]', - ), - ) - ) -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.npr.org.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.npr.org.php deleted file mode 100644 index ecc0213a..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.npr.org.php +++ /dev/null @@ -1,28 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.npr.org/blogs/thesalt/2013/09/17/223345977/auto-brewery-syndrome-apparently-you-can-make-beer-in-your-gut', - 'body' => array( - '//article[contains(@class,"story")]', - ), - 'strip' => array( - '//div[@class="story-tools"]', - '//h3[@class="slug"]', - '//div[@class="storytitle"]', - '//div[@id="story-meta"]', - '//a[@id="mainContent"]', - '//div[@class="credit-caption"]', - '//div[@class="enlarge_html"]', - '//button', - '//div[contains(@id,"pullquote")]', - '//div[contains(@class,"internallink")]', - '//div[contains(@class,"video")]', - '//div[@class="simplenodate"]', - '//div[contains(@class,"share-")]', - '//div[@class="tags"]', - '//aside' - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.numerama.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.numerama.com.php deleted file mode 100644 index fe4971c5..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.numerama.com.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.numerama.com/sciences/125959-recherches-ladn-recompensees-nobel-de-chimie.html', - 'body' => array( - '//article', - ), - 'strip' => array( - '//footer', - '//section[@class="related-article"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.oneindia.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.oneindia.com.php deleted file mode 100644 index 320c2147..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.oneindia.com.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.oneindia.com/india/b-luru-govt-likely-remove-word-eunuch-from-sec-36-a-karnataka-police-act-1981173.html', - 'body' => array( - '//div[@class="ecom-ad-content"]', - ), - 'strip' => array( - '//*[@id="view_cmtns"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.pseudo-sciences.org.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.pseudo-sciences.org.php deleted file mode 100644 index 9e467edf..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.pseudo-sciences.org.php +++ /dev/null @@ -1,16 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.pseudo-sciences.org/spip.php?article2275', - 'body' => array( - '//div[@id="art_main"]', - ), - 'strip' => array( - '//div[@id="art_print"]', - '//div[@id="art_chapo"]', - '//img[@class="puce"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.sciencemag.org.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.sciencemag.org.php deleted file mode 100644 index ae7a93ac..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.sciencemag.org.php +++ /dev/null @@ -1,16 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.sciencemag.org/news/2016/01/could-bright-foamy-wak$', - 'body' => array( - '//div[@class="row--hero"]', - '//article[contains(@class,"primary")]', - ), - 'strip' => array( - '//header[@class="article__header"]', - '//footer[@class="article__foot"]', - ), - ), - ) -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.slate.fr.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.slate.fr.php deleted file mode 100644 index 8c8dc893..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.slate.fr.php +++ /dev/null @@ -1,19 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.slate.fr/monde/77034/allemagne-2013-couacs-campagne', - 'body' => array( - '//div[@class="article_content"]', - ), - 'strip' => array( - '//*[@id="slate_associated_bn"]', - '//*[@id="ligatus-article"]', - '//*[@id="article_sidebar"]', - '//div[contains(@id, "reseaux")]', - '//*[contains(@class, "smart") or contains(@class, "article_tags") or contains(@class, "article_reactions")]', - '//*[contains(@class, "OUTBRAIN") or contains(@class, "related_item") or contains(@class, "share")]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.universfreebox.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.universfreebox.com.php deleted file mode 100644 index 0747d0fb..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.universfreebox.com.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://www.universfreebox.com/article/24305/4G-Bouygues-Telecom-lance-une-vente-flash-sur-son-forfait-Sensation-3Go', - 'body' => array( - '//div[@id="corps_corps"]', - ), - 'strip' => array( - '//*[@id="formulaire"]', - '//*[@id="commentaire"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.zeit.de.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.zeit.de.php deleted file mode 100644 index 316c2656..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/www.zeit.de.php +++ /dev/null @@ -1,41 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%^/zeit-magazin.*%' => array( - 'test_url' => 'http://www.zeit.de/zeit-magazin/2015/15/pegida-kathrin-oertel-lutz-bachmann', - 'body' => array( - '//article[@class="article"]', - ), - 'strip' => array( - '//header/div/h1', - '//header/div/div[@class="article__head__subtitle"]', - '//header/div/div[@class="article__column__author"]', - '//header/div/div[@class="article__column__author"]', - '//header/div/span[@class="article__head__meta-wrap"]', - '//form', - '//style', - '//div[contains(@class, "ad-tile")]', - '//div[@class="iqd-mobile-adplace"]', - '//div[@id="iq-artikelanker"]', - '//div[@id="js-social-services"]', - '//section[@id="js-comments"]', - '//aside', - ), - ), - '%.*%' => array( - 'test_url' => 'http://www.zeit.de/politik/ausland/2015-04/thessaloniki-krise-griechenland-yannis-boutaris/', - 'body' => array( - '//div[@class="article-body"]', - ), - 'strip' => array( - '//*[@class="articleheader"]', - '//*[@class="excerpt"]', - '//div[contains(@class, "ad")]', - '//div[@itemprop="video"]', - '//*[@class="articlemeta"]', - '//*[@class="articlemeta-clear"]', - '//*[@class="zol_inarticletools"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/xkcd.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/xkcd.com.php deleted file mode 100644 index 84957268..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/xkcd.com.php +++ /dev/null @@ -1,8 +0,0 @@ -<?php -return array( - 'filter' => array( - '%.*%' => array( - '%alt="(.+)" */>%' => '/><br/>$1', - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/ymatuhin.ru.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/ymatuhin.ru.php deleted file mode 100644 index 9fd83f18..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/ymatuhin.ru.php +++ /dev/null @@ -1,21 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'https://ymatuhin.ru/tools/git-default-editor/', - 'body' => array( - '//section', - ), - 'strip' => array( - "//script", - "//style", - "//h1", - "//time", - "//aside", - "/html/body/section/ul", - "//amp-iframe", - "/html/body/section/h4" - ), - ) - ) -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/zdnet.com.php b/vendor/miniflux/picofeed/lib/PicoFeed/Rules/zdnet.com.php deleted file mode 100644 index 79b35ddb..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Rules/zdnet.com.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php -return array( - 'grabber' => array( - '%.*%' => array( - 'test_url' => 'http://zdnet.com.feedsportal.com/c/35462/f/675637/s/4a33c93e/sc/11/l/0L0Szdnet0N0Carticle0Cchina0Eus0Eagree0Eon0Ecybercrime0Ecooperation0Eamid0Econtinued0Etension0C0Tftag0FRSSbaffb68/story01.htm', - 'body' => array( - '//p[@class="summary"]', - '//div[contains(@class,"storyBody")]', - ), - 'strip' => array( - '//*[contains(@class,"ad-")]', - '//p/span', - '//script', - '//p[@class="summary"]', - '//div[contains(@class,"relatedContent")]', - '//div[contains(@class,"loader")]', - '//p[@class="photoDetails"]', - '//div[@class="thumbnailSlider"]', - '//div[@class="shortcodeGalleryWrapper"]', - ), - ), - ), -); diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Scraper/CandidateParser.php b/vendor/miniflux/picofeed/lib/PicoFeed/Scraper/CandidateParser.php deleted file mode 100644 index 6c53a289..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Scraper/CandidateParser.php +++ /dev/null @@ -1,283 +0,0 @@ -<?php - -namespace PicoFeed\Scraper; - -use DomDocument; -use DOMXPath; -use PicoFeed\Logging\Logger; -use PicoFeed\Parser\XmlParser; - -/** - * Candidate Parser. - * - * @author Frederic Guillot - */ -class CandidateParser implements ParserInterface -{ - private $dom; - private $xpath; - - /** - * List of attributes to try to get the content, order is important, generic terms at the end. - * - * @var array - */ - private $candidatesAttributes = array( - 'articleBody', - 'articlebody', - 'article-body', - 'articleContent', - 'articlecontent', - 'article-content', - 'articlePage', - 'post-content', - 'post_content', - 'entry-content', - 'entry-body', - 'main-content', - 'story_content', - 'storycontent', - 'entryBox', - 'entrytext', - 'comic', - 'post', - 'article', - 'content', - 'main', - ); - - /** - * List of attributes to strip. - * - * @var array - */ - private $stripAttributes = array( - 'comment', - 'share', - 'links', - 'toolbar', - 'fb', - 'footer', - 'credit', - 'bottom', - 'nav', - 'header', - 'social', - 'tag', - 'metadata', - 'entry-utility', - 'related-posts', - 'tweet', - 'categories', - 'post_title', - 'by_line', - 'byline', - 'sponsors', - ); - - /** - * Tags to remove. - * - * @var array - */ - private $stripTags = array( - 'nav', - 'header', - 'footer', - 'aside', - 'form', - ); - - /** - * Constructor. - * - * @param string $html - */ - public function __construct($html) - { - $this->dom = XmlParser::getHtmlDocument('<?xml version="1.0" encoding="UTF-8">'.$html); - $this->xpath = new DOMXPath($this->dom); - } - - /** - * Get the relevant content with the list of potential attributes. - * - * @return string - */ - public function execute() - { - $content = $this->findContentWithCandidates(); - - if (strlen($content) < 200) { - $content = $this->findContentWithArticle(); - } - - if (strlen($content) < 50) { - $content = $this->findContentWithBody(); - } - - return $this->stripGarbage($content); - } - - /** - * Find content based on the list of tag candidates. - * - * @return string - */ - public function findContentWithCandidates() - { - foreach ($this->candidatesAttributes as $candidate) { - Logger::setMessage(get_called_class().': Try this candidate: "'.$candidate.'"'); - - $nodes = $this->xpath->query('//*[(contains(@class, "'.$candidate.'") or @id="'.$candidate.'") and not (contains(@class, "nav") or contains(@class, "page"))]'); - - if ($nodes !== false && $nodes->length > 0) { - Logger::setMessage(get_called_class().': Find candidate "'.$candidate.'"'); - - return $this->dom->saveXML($nodes->item(0)); - } - } - - return ''; - } - - /** - * Find <article/> tag. - * - * @return string - */ - public function findContentWithArticle() - { - $nodes = $this->xpath->query('//article'); - - if ($nodes !== false && $nodes->length > 0) { - Logger::setMessage(get_called_class().': Find <article/> tag'); - - return $this->dom->saveXML($nodes->item(0)); - } - - return ''; - } - - /** - * Find <body/> tag. - * - * @return string - */ - public function findContentWithBody() - { - $nodes = $this->xpath->query('//body'); - - if ($nodes !== false && $nodes->length > 0) { - Logger::setMessage(get_called_class().' Find <body/>'); - - return $this->dom->saveXML($nodes->item(0)); - } - - return ''; - } - - /** - * Strip useless tags. - * - * @param string $content - * - * @return string - */ - public function stripGarbage($content) - { - $dom = XmlParser::getDomDocument($content); - - if ($dom !== false) { - $xpath = new DOMXPath($dom); - - $this->stripTags($xpath); - $this->stripAttributes($dom, $xpath); - - $content = $dom->saveXML($dom->documentElement); - } - - return $content; - } - - /** - * Remove blacklisted tags. - * - * @param DOMXPath $xpath - */ - public function stripTags(DOMXPath $xpath) - { - foreach ($this->stripTags as $tag) { - $nodes = $xpath->query('//'.$tag); - - if ($nodes !== false && $nodes->length > 0) { - Logger::setMessage(get_called_class().': Strip tag: "'.$tag.'"'); - - foreach ($nodes as $node) { - $node->parentNode->removeChild($node); - } - } - } - } - - /** - * Remove blacklisted attributes. - * - * @param DomDocument $dom - * @param DOMXPath $xpath - */ - public function stripAttributes(DomDocument $dom, DOMXPath $xpath) - { - foreach ($this->stripAttributes as $attribute) { - $nodes = $xpath->query('//*[contains(@class, "'.$attribute.'") or contains(@id, "'.$attribute.'")]'); - - if ($nodes !== false && $nodes->length > 0) { - Logger::setMessage(get_called_class().': Strip attribute: "'.$attribute.'"'); - - foreach ($nodes as $node) { - if ($this->shouldRemove($dom, $node)) { - $node->parentNode->removeChild($node); - } - } - } - } - } - - /** - * Find link for next page of the article. - * - * @return string - */ - public function findNextLink() - { - return null; - } - - /** - * Return false if the node should not be removed. - * - * @param DomDocument $dom - * @param DomNode $node - * - * @return bool - */ - public function shouldRemove(DomDocument $dom, $node) - { - $document_length = strlen($dom->textContent); - $node_length = strlen($node->textContent); - - if ($document_length === 0) { - return true; - } - - $ratio = $node_length * 100 / $document_length; - - if ($ratio >= 90) { - Logger::setMessage(get_called_class().': Should not remove this node ('.$node->nodeName.') ratio: '.$ratio.'%'); - - return false; - } - - return true; - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Scraper/ParserInterface.php b/vendor/miniflux/picofeed/lib/PicoFeed/Scraper/ParserInterface.php deleted file mode 100644 index 3ded4b1c..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Scraper/ParserInterface.php +++ /dev/null @@ -1,20 +0,0 @@ -<?php - -namespace PicoFeed\Scraper; - -interface ParserInterface -{ - /** - * Execute the parser and return the contents. - * - * @return string - */ - public function execute(); - - /** - * Find link for next page of the article. - * - * @return string - */ - public function findNextLink(); -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Scraper/RuleLoader.php b/vendor/miniflux/picofeed/lib/PicoFeed/Scraper/RuleLoader.php deleted file mode 100644 index 6650682d..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Scraper/RuleLoader.php +++ /dev/null @@ -1,107 +0,0 @@ -<?php - -namespace PicoFeed\Scraper; - -use PicoFeed\Base; -use PicoFeed\Logging\Logger; - -/** - * RuleLoader class. - * - * @author Frederic Guillot - * @author Bernhard Posselt - */ -class RuleLoader extends Base -{ - /** - * Get the rules for an URL. - * - * @param string $url the URL that should be looked up - * - * @return array the array containing the rules - */ - public function getRules($url) - { - $hostname = parse_url($url, PHP_URL_HOST); - - if ($hostname !== false) { - $files = $this->getRulesFileList($hostname); - - foreach ($this->getRulesFolders() as $folder) { - $rule = $this->loadRuleFile($folder, $files); - - if (!empty($rule)) { - return $rule; - } - } - } - - return array(); - } - - /** - * Get the list of possible rules file names for a given hostname. - * - * @param string $hostname Hostname - * - * @return array - */ - public function getRulesFileList($hostname) - { - $files = array($hostname); // subdomain.domain.tld - $parts = explode('.', $hostname); - $len = count($parts); - - if ($len > 2) { - $subdomain = array_shift($parts); - $files[] = implode('.', $parts); // domain.tld - $files[] = '.'.implode('.', $parts); // .domain.tld - $files[] = $subdomain; // subdomain - } elseif ($len === 2) { - $files[] = '.'.implode('.', $parts); // .domain.tld - $files[] = $parts[0]; // domain - } - - return $files; - } - - /** - * Load a rule file from the defined folder. - * - * @param string $folder Rule directory - * @param array $files List of possible file names - * - * @return array - */ - public function loadRuleFile($folder, array $files) - { - foreach ($files as $file) { - $filename = $folder.'/'.$file.'.php'; - if (file_exists($filename)) { - Logger::setMessage(get_called_class().' Load rule: '.$file); - - return include $filename; - } - } - - return array(); - } - - /** - * Get the list of folders that contains rules. - * - * @return array - */ - public function getRulesFolders() - { - $folders = array(); - - if ($this->config !== null && $this->config->getGrabberRulesFolder() !== null) { - $folders[] = $this->config->getGrabberRulesFolder(); - } - - $folders[] = __DIR__ . '/../Rules'; - - return $folders; - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Scraper/RuleParser.php b/vendor/miniflux/picofeed/lib/PicoFeed/Scraper/RuleParser.php deleted file mode 100644 index 9beb59c1..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Scraper/RuleParser.php +++ /dev/null @@ -1,102 +0,0 @@ -<?php - -namespace PicoFeed\Scraper; - -use DOMXPath; -use PicoFeed\Parser\XmlParser; - -/** - * Rule Parser. - * - * @author Frederic Guillot - */ -class RuleParser implements ParserInterface -{ - private $dom; - private $xpath; - private $rules = array(); - - /** - * Constructor. - * - * @param string $html - * @param array $rules - */ - public function __construct($html, array $rules) - { - $this->rules = $rules; - $this->dom = XmlParser::getHtmlDocument('<?xml version="1.0" encoding="UTF-8">'.$html); - $this->xpath = new DOMXPath($this->dom); - } - - /** - * Get the relevant content with predefined rules. - * - * @return string - */ - public function execute() - { - $this->stripTags(); - - return $this->findContent(); - } - - /** - * Remove HTML tags. - */ - public function stripTags() - { - if (isset($this->rules['strip']) && is_array($this->rules['strip'])) { - foreach ($this->rules['strip'] as $pattern) { - $nodes = $this->xpath->query($pattern); - - if ($nodes !== false && $nodes->length > 0) { - foreach ($nodes as $node) { - $node->parentNode->removeChild($node); - } - } - } - } - } - - /** - * Fetch content based on Xpath rules. - */ - public function findContent() - { - $content = ''; - if (isset($this->rules['body']) && is_array($this->rules['body'])) { - foreach ($this->rules['body'] as $pattern) { - $nodes = $this->xpath->query($pattern); - - if ($nodes !== false && $nodes->length > 0) { - foreach ($nodes as $node) { - $content .= $this->dom->saveXML($node); - } - } - } - } - - return $content; - } - - /** - * Fetch next link based on Xpath rules. - * - * @return string - */ - public function findNextLink() - { - if (isset($this->rules['next_page']) && is_array($this->rules['next_page'])) { - foreach ($this->rules['next_page'] as $pattern) { - $nodes = $this->xpath->query($pattern); - if ($nodes !== false && $nodes->length > 0) { - foreach ($nodes as $node) { - return $node->getAttribute('href'); - } - } - } - } - return null; - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Scraper/Scraper.php b/vendor/miniflux/picofeed/lib/PicoFeed/Scraper/Scraper.php deleted file mode 100644 index e5b9817f..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Scraper/Scraper.php +++ /dev/null @@ -1,279 +0,0 @@ -<?php - -namespace PicoFeed\Scraper; - -use PicoFeed\Base; -use PicoFeed\Client\Client; -use PicoFeed\Client\ClientException; -use PicoFeed\Client\Url; -use PicoFeed\Encoding\Encoding; -use PicoFeed\Filter\Filter; -use PicoFeed\Logging\Logger; -use PicoFeed\Parser\XmlParser; - -/** - * Scraper class. - * - * @author Frederic Guillot - */ -class Scraper extends Base -{ - /** - * URL. - * - * @var string - */ - private $url = ''; - - /** - * Relevant content. - * - * @var string - */ - private $content = ''; - - /** - * HTML content. - * - * @var string - */ - private $html = ''; - - /** - * HTML content encoding. - * - * @var string - */ - private $encoding = ''; - - /** - * Flag to enable candidates parsing. - * - * @var bool - */ - private $enableCandidateParser = true; - - /** - * Disable candidates parsing. - * - * @return Scraper - */ - public function disableCandidateParser() - { - $this->enableCandidateParser = false; - return $this; - } - - /** - * Get encoding. - * - * @return string - */ - public function getEncoding() - { - return $this->encoding; - } - - /** - * Set encoding. - * - * @param string $encoding - * - * @return Scraper - */ - public function setEncoding($encoding) - { - $this->encoding = $encoding; - - return $this; - } - - /** - * Get URL to download. - * - * @return string - */ - public function getUrl() - { - return $this->url; - } - - /** - * Set URL to download. - * - * @param string $url URL - * - * @return Scraper - */ - public function setUrl($url) - { - $this->url = $url; - - return $this; - } - - /** - * Return true if the scraper found relevant content. - * - * @return bool - */ - public function hasRelevantContent() - { - return !empty($this->content); - } - - /** - * Get relevant content. - * - * @return string - */ - public function getRelevantContent() - { - return $this->content; - } - - /** - * Get raw content (unfiltered). - * - * @return string - */ - public function getRawContent() - { - return $this->html; - } - - /** - * Set raw content (unfiltered). - * - * @param string $html - * - * @return Scraper - */ - public function setRawContent($html) - { - $this->html = $html; - - return $this; - } - - /** - * Get filtered relevant content. - * - * @return string - */ - public function getFilteredContent() - { - $filter = Filter::html($this->content, $this->url); - $filter->setConfig($this->config); - - return $filter->execute(); - } - - /** - * Download the HTML content. - * - * @return bool - */ - public function download() - { - if (!empty($this->url)) { - - // Clear everything - $this->html = ''; - $this->content = ''; - $this->encoding = ''; - - try { - $client = Client::getInstance(); - $client->setConfig($this->config); - $client->setTimeout($this->config->getGrabberTimeout()); - $client->setUserAgent($this->config->getGrabberUserAgent()); - $client->execute($this->url); - - $this->url = $client->getUrl(); - $this->html = $client->getContent(); - $this->encoding = $client->getEncoding(); - - return true; - } catch (ClientException $e) { - Logger::setMessage(get_called_class().': '.$e->getMessage()); - } - } - - return false; - } - - /** - * Execute the scraper. - */ - public function execute($pageContent = '', $recursionDepth = 0) - { - $this->html = ''; - $this->encoding = ''; - $this->content = ''; - $this->download(); - $this->prepareHtml(); - - $parser = $this->getParser(); - - if ($parser !== null) { - $maxRecursions = $this->config->getMaxRecursions(); - if(!isset($maxRecursions)){ - $maxRecursions = 25; - } - $pageContent .= $parser->execute(); - // check if there is a link to next page and recursively get content (max 25 pages) - if((($nextLink = $parser->findNextLink()) !== null) && $recursionDepth < $maxRecursions){ - $nextLink = Url::resolve($nextLink,$this->url); - $this->setUrl($nextLink); - $this->execute($pageContent,$recursionDepth+1); - } - else{ - $this->content = $pageContent; - } - Logger::setMessage(get_called_class().': Content length: '.strlen($this->content).' bytes'); - } - } - - /** - * Get the parser. - * - * @return ParserInterface - */ - public function getParser() - { - $ruleLoader = new RuleLoader($this->config); - $rules = $ruleLoader->getRules($this->url); - - if (!empty($rules['grabber'])) { - Logger::setMessage(get_called_class().': Parse content with rules'); - - foreach ($rules['grabber'] as $pattern => $rule) { - $url = new Url($this->url); - $sub_url = $url->getFullPath(); - - if (preg_match($pattern, $sub_url)) { - Logger::setMessage(get_called_class().': Matched url '.$sub_url); - return new RuleParser($this->html, $rule); - } - } - } elseif ($this->enableCandidateParser) { - Logger::setMessage(get_called_class().': Parse content with candidates'); - } - - return new CandidateParser($this->html); - } - - /** - * Normalize encoding and strip head tag. - */ - public function prepareHtml() - { - $html_encoding = XmlParser::getEncodingFromMetaTag($this->html); - - $this->html = Encoding::convert($this->html, $html_encoding ?: $this->encoding); - $this->html = Filter::stripHeadTags($this->html); - - Logger::setMessage(get_called_class().': HTTP Encoding "'.$this->encoding.'" ; HTML Encoding "'.$html_encoding.'"'); - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Serialization/Subscription.php b/vendor/miniflux/picofeed/lib/PicoFeed/Serialization/Subscription.php deleted file mode 100644 index 12eccfd5..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Serialization/Subscription.php +++ /dev/null @@ -1,175 +0,0 @@ -<?php - -namespace PicoFeed\Serialization; - -/** - * Class Subscription - * - * @package PicoFeed\Serialization - * @author Frederic Guillot - */ -class Subscription -{ - protected $title = ''; - protected $feedUrl = ''; - protected $siteUrl = ''; - protected $category = ''; - protected $description = ''; - protected $type = ''; - - /** - * Create object instance - * - * @static - * @access public - * @return Subscription - */ - public static function create() - { - return new static(); - } - - /** - * Set title - * - * @access public - * @param string $title - * @return Subscription - */ - public function setTitle($title) - { - $this->title = $title; - return $this; - } - - /** - * Get title - * - * @access public - * @return string - */ - public function getTitle() - { - return $this->title; - } - - /** - * Set feed URL - * - * @access public - * @param string $feedUrl - * @return Subscription - */ - public function setFeedUrl($feedUrl) - { - $this->feedUrl = $feedUrl; - return $this; - } - - /** - * Get feed URL - * - * @access public - * @return string - */ - public function getFeedUrl() - { - return $this->feedUrl; - } - - /** - * Set site URL - * - * @access public - * @param string $siteUrl - * @return Subscription - */ - public function setSiteUrl($siteUrl) - { - $this->siteUrl = $siteUrl; - return $this; - } - - /** - * Get site URL - * - * @access public - * @return string - */ - public function getSiteUrl() - { - return $this->siteUrl; - } - - /** - * Set category - * - * @access public - * @param string $category - * @return Subscription - */ - public function setCategory($category) - { - $this->category = $category; - return $this; - } - - /** - * Get category - * - * @access public - * @return string - */ - public function getCategory() - { - return $this->category; - } - - /** - * Set description - * - * @access public - * @param string $description - * @return Subscription - */ - public function setDescription($description) - { - $this->description = $description; - return $this; - } - - /** - * Get description - * - * @access public - * @return string - */ - public function getDescription() - { - return $this->description; - } - - /** - * Set type - * - * @access public - * @param string $type - * @return Subscription - */ - public function setType($type) - { - $this->type = $type; - return $this; - } - - /** - * Get type - * - * @access public - * @return string - */ - public function getType() - { - return $this->type; - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Serialization/SubscriptionList.php b/vendor/miniflux/picofeed/lib/PicoFeed/Serialization/SubscriptionList.php deleted file mode 100644 index b173f89b..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Serialization/SubscriptionList.php +++ /dev/null @@ -1,75 +0,0 @@ -<?php - -namespace PicoFeed\Serialization; - -/** - * Class SubscriptionList - * - * @package PicoFeed\Serialization - * @author Frederic Guillot - */ -class SubscriptionList -{ - /** - * OPML entries - * - * @var Subscription[] - */ - public $subscriptions = array(); - - /** - * Title - * - * @var string - */ - protected $title = ''; - - /** - * Create object instance - * - * @static - * @access public - * @return SubscriptionList - */ - public static function create() - { - return new static(); - } - - /** - * Set title - * - * @access public - * @param string $title - * @return SubscriptionList - */ - public function setTitle($title) - { - $this->title = $title; - return $this; - } - - /** - * Get title - * - * @access public - * @return string - */ - public function getTitle() - { - return $this->title; - } - - /** - * Add subscription - * - * @access public - * @param Subscription $subscription - * @return SubscriptionList - */ - public function addSubscription(Subscription $subscription) - { - $this->subscriptions[] = $subscription; - return $this; - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Serialization/SubscriptionListBuilder.php b/vendor/miniflux/picofeed/lib/PicoFeed/Serialization/SubscriptionListBuilder.php deleted file mode 100644 index 838e4cb5..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Serialization/SubscriptionListBuilder.php +++ /dev/null @@ -1,204 +0,0 @@ -<?php - -namespace PicoFeed\Serialization; - -use DOMDocument; -use DOMElement; - -/** - * Class SubscriptionListBuilder - * - * @package PicoFeed\Serialization - * @author Frederic Guillot - */ -class SubscriptionListBuilder -{ - /** - * @var SubscriptionList - */ - protected $subscriptionList; - - /** - * @var DOMDocument - */ - protected $document; - - /** - * Constructor. - * - * @access public - * @param SubscriptionList $subscriptionList - */ - public function __construct(SubscriptionList $subscriptionList) - { - $this->subscriptionList = $subscriptionList; - } - - /** - * Get object instance - * - * @static - * @access public - * @param SubscriptionList $subscriptionList - * @return SubscriptionListBuilder - */ - public static function create(SubscriptionList $subscriptionList) - { - return new static($subscriptionList); - } - - /** - * Build OPML feed - * - * @access public - * @param string $filename - * @return string - */ - public function build($filename = '') - { - $this->document = new DomDocument('1.0', 'UTF-8'); - $this->document->formatOutput = true; - - $opmlElement = $this->document->createElement('opml'); - $opmlElement->setAttribute('version', '1.0'); - - $headElement = $this->document->createElement('head'); - - if ($this->subscriptionList->getTitle() !== '') { - $titleElement = $this->document->createElement('title'); - $titleElement->appendChild($this->document->createTextNode($this->subscriptionList->getTitle())); - $headElement->appendChild($titleElement); - } - - $opmlElement->appendChild($headElement); - $opmlElement->appendChild($this->buildBody()); - $this->document->appendChild($opmlElement); - - if ($filename !== '') { - $this->document->save($filename); - return ''; - } - - return $this->document->saveXML(); - } - - /** - * Return true if the list has categories - * - * @access public - * @return bool - */ - public function hasCategories() - { - foreach ($this->subscriptionList->subscriptions as $subscription) { - if ($subscription->getCategory() !== '') { - return true; - } - } - - return false; - } - - /** - * Build OPML body - * - * @access protected - * @return DOMElement - */ - protected function buildBody() - { - $bodyElement = $this->document->createElement('body'); - - if ($this->hasCategories()) { - $this->buildCategories($bodyElement); - return $bodyElement; - } - - foreach ($this->subscriptionList->subscriptions as $subscription) { - $bodyElement->appendChild($this->buildSubscription($subscription)); - } - - return $bodyElement; - } - - /** - * Build categories section - * - * @access protected - * @param DOMElement $bodyElement - */ - protected function buildCategories(DOMElement $bodyElement) - { - $categories = $this->groupByCategories(); - - foreach ($categories as $category => $subscriptions) { - $bodyElement->appendChild($this->buildCategory($category, $subscriptions)); - } - } - - /** - * Build category tag - * - * @access protected - * @param string $category - * @param array $subscriptions - * @return DOMElement - */ - protected function buildCategory($category, array $subscriptions) - { - $outlineElement = $this->document->createElement('outline'); - $outlineElement->setAttribute('text', $category); - - foreach ($subscriptions as $subscription) { - $outlineElement->appendChild($this->buildSubscription($subscription)); - } - - return $outlineElement; - } - - /** - * Build subscription entry - * - * @access public - * @param Subscription $subscription - * @return DOMElement - */ - protected function buildSubscription(Subscription $subscription) - { - $outlineElement = $this->document->createElement('outline'); - $outlineElement->setAttribute('type', $subscription->getType() ?: 'rss'); - $outlineElement->setAttribute('text', $subscription->getTitle() ?: $subscription->getFeedUrl()); - $outlineElement->setAttribute('xmlUrl', $subscription->getFeedUrl()); - - if ($subscription->getTitle() !== '') { - $outlineElement->setAttribute('title', $subscription->getTitle()); - } - - if ($subscription->getDescription() !== '') { - $outlineElement->setAttribute('description', $subscription->getDescription()); - } - - if ($subscription->getSiteUrl() !== '') { - $outlineElement->setAttribute('htmlUrl', $subscription->getSiteUrl()); - } - - return $outlineElement; - } - - /** - * Group subscriptions by category - * - * @access private - * @return array - */ - private function groupByCategories() - { - $categories = array(); - - foreach ($this->subscriptionList->subscriptions as $subscription) { - $categories[$subscription->getCategory()][] = $subscription; - } - - return $categories; - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Serialization/SubscriptionListParser.php b/vendor/miniflux/picofeed/lib/PicoFeed/Serialization/SubscriptionListParser.php deleted file mode 100644 index 9085588c..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Serialization/SubscriptionListParser.php +++ /dev/null @@ -1,100 +0,0 @@ -<?php - -namespace PicoFeed\Serialization; - -use PicoFeed\Parser\MalformedXmlException; -use PicoFeed\Parser\XmlParser; -use SimpleXMLElement; - -/** - * Class SubscriptionListParser - * - * @package PicoFeed\Serialization - * @author Frederic Guillot - */ -class SubscriptionListParser -{ - /** - * @var SubscriptionList - */ - protected $subscriptionList; - - /** - * @var string - */ - protected $data; - - /** - * Constructor - * - * @access public - * @param string $data - */ - public function __construct($data) - { - $this->subscriptionList = new SubscriptionList(); - $this->data = trim($data); - } - - /** - * Get object instance - * - * @static - * @access public - * @param string $data - * @return SubscriptionListParser - */ - public static function create($data) - { - return new static($data); - } - - /** - * Parse a subscription list entry - * - * @access public - * @throws MalformedXmlException - * @return SubscriptionList - */ - public function parse() - { - $xml = XmlParser::getSimpleXml($this->data); - - if (! $xml || !isset($xml->head) || !isset($xml->body)) { - throw new MalformedXmlException('Unable to parse OPML file: invalid XML'); - } - - $this->parseTitle($xml->head); - $this->parseEntries($xml->body); - - return $this->subscriptionList; - } - - /** - * Parse title - * - * @access protected - * @param SimpleXMLElement $xml - */ - protected function parseTitle(SimpleXMLElement $xml) - { - $this->subscriptionList->setTitle((string) $xml->title); - } - - /** - * Parse entries - * - * @access protected - * @param SimpleXMLElement $body - */ - private function parseEntries(SimpleXMLElement $body) - { - foreach ($body->outline as $outlineElement) { - if (isset($outlineElement->outline)) { - $this->parseEntries($outlineElement); - } else { - $this->subscriptionList->subscriptions[] = SubscriptionParser::create($body, $outlineElement)->parse(); - } - } - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Serialization/SubscriptionParser.php b/vendor/miniflux/picofeed/lib/PicoFeed/Serialization/SubscriptionParser.php deleted file mode 100644 index caff07c2..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Serialization/SubscriptionParser.php +++ /dev/null @@ -1,142 +0,0 @@ -<?php - -namespace PicoFeed\Serialization; - -use SimpleXMLElement; - -/** - * Class SubscriptionParser - * - * @package PicoFeed\Serialization - * @author Frederic Guillot - */ -class SubscriptionParser -{ - /** - * @var Subscription - */ - protected $subscription; - - /** - * @var SimpleXMLElement - */ - private $outlineElement; - - /** - * @var SimpleXMLElement - */ - private $parentElement; - - /** - * Constructor - * - * @access public - * @param SimpleXMLElement $parentElement - * @param SimpleXMLElement $outlineElement - */ - public function __construct(SimpleXMLElement $parentElement, SimpleXMLElement $outlineElement) - { - $this->parentElement = $parentElement; - $this->outlineElement = $outlineElement; - $this->subscription = new Subscription(); - } - - /** - * Get object instance - * - * @static - * @access public - * @param SimpleXMLElement $parentElement - * @param SimpleXMLElement $outlineElement - * @return SubscriptionParser - */ - public static function create(SimpleXMLElement $parentElement, SimpleXMLElement $outlineElement) - { - return new static($parentElement, $outlineElement); - } - - /** - * Parse subscription entry - * - * @access public - * @return Subscription - */ - public function parse() - { - $this->subscription->setCategory($this->findCategory()); - $this->subscription->setTitle($this->findTitle()); - $this->subscription->setFeedUrl($this->findFeedUrl()); - $this->subscription->setSiteUrl($this->findSiteUrl()); - $this->subscription->setType($this->findType()); - $this->subscription->setDescription($this->findDescription()); - - return $this->subscription; - } - - /** - * Find category. - * - * @access protected - * @return string - */ - protected function findCategory() - { - return isset($this->parentElement['text']) ? (string) $this->parentElement['text'] : ''; - } - - /** - * Find title. - * - * @access protected - * @return string - */ - protected function findTitle() - { - return isset($this->outlineElement['title']) ? (string) $this->outlineElement['title'] : (string) $this->outlineElement['text']; - } - - /** - * Find feed url. - * - * @access protected - * @return string - */ - protected function findFeedUrl() - { - return (string) $this->outlineElement['xmlUrl']; - } - - /** - * Find site url. - * - * @access protected - * @return string - */ - protected function findSiteUrl() - { - return isset($this->outlineElement['htmlUrl']) ? (string) $this->outlineElement['htmlUrl'] : $this->findFeedUrl(); - } - - /** - * Find type. - * - * @access protected - * @return string - */ - protected function findType() - { - return isset($this->outlineElement['version']) ? (string) $this->outlineElement['version'] : - isset($this->outlineElement['type']) ? (string) $this->outlineElement['type'] : 'rss'; - } - - /** - * Find description. - * - * @access protected - * @return string - */ - protected function findDescription() - { - return isset($this->outlineElement['description']) ? (string) $this->outlineElement['description'] : $this->findTitle(); - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Syndication/AtomFeedBuilder.php b/vendor/miniflux/picofeed/lib/PicoFeed/Syndication/AtomFeedBuilder.php deleted file mode 100644 index 34f37800..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Syndication/AtomFeedBuilder.php +++ /dev/null @@ -1,65 +0,0 @@ -<?php - -namespace PicoFeed\Syndication; - -use DOMAttr; -use DOMElement; - -/** - * Atom Feed Builder - * - * @package PicoFeed\Syndication - * @author Frederic Guillot - */ -class AtomFeedBuilder extends FeedBuilder -{ - /** - * @var DOMElement - */ - protected $feedElement; - - /** - * @var AtomHelper - */ - protected $helper; - - /** - * Build feed - * - * @access public - * @param string $filename - * @return string - */ - public function build($filename = '') - { - $this->helper = new AtomHelper($this->getDocument()); - - $this->feedElement = $this->getDocument()->createElement('feed'); - $this->feedElement->setAttributeNodeNS(new DomAttr('xmlns', 'http://www.w3.org/2005/Atom')); - - $generator = $this->getDocument()->createElement('generator', 'PicoFeed'); - $generator->setAttribute('uri', 'https://github.com/miniflux/picoFeed'); - $this->feedElement->appendChild($generator); - - $this->helper - ->buildTitle($this->feedElement, $this->feedTitle) - ->buildId($this->feedElement, $this->feedUrl) - ->buildDate($this->feedElement, $this->feedDate) - ->buildLink($this->feedElement, $this->siteUrl) - ->buildLink($this->feedElement, $this->feedUrl, 'self', 'application/atom+xml') - ->buildAuthor($this->feedElement, $this->authorName, $this->authorEmail, $this->authorUrl) - ; - - foreach ($this->items as $item) { - $this->feedElement->appendChild($item->build()); - } - - $this->getDocument()->appendChild($this->feedElement); - - if ($filename !== '') { - $this->getDocument()->save($filename); - } - - return $this->getDocument()->saveXML(); - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Syndication/AtomHelper.php b/vendor/miniflux/picofeed/lib/PicoFeed/Syndication/AtomHelper.php deleted file mode 100644 index def6b0b9..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Syndication/AtomHelper.php +++ /dev/null @@ -1,139 +0,0 @@ -<?php - -namespace PicoFeed\Syndication; - -use DateTime; -use DOMDocument; -use DOMElement; - -/** - * Class AtomHelper - * - * @package PicoFeed\Syndication - * @author Frederic Guillot - */ -class AtomHelper -{ - /** - * @var DOMDocument - */ - protected $document; - - /** - * Constructor - * - * @param DOMDocument $document - */ - public function __construct(DOMDocument $document) - { - $this->document = $document; - } - - /** - * Build node - * - * @access public - * @param DOMElement $element - * @param string $tag - * @param string $value - * @return AtomHelper - */ - public function buildNode(DOMElement $element, $tag, $value) - { - $node = $this->document->createElement($tag); - $node->appendChild($this->document->createTextNode($value)); - $element->appendChild($node); - return $this; - } - - /** - * Build title - * - * @access public - * @param DOMElement $element - * @param string $title - * @return AtomHelper - */ - public function buildTitle(DOMElement $element, $title) - { - return $this->buildNode($element, 'title', $title); - } - - /** - * Build id - * - * @access public - * @param DOMElement $element - * @param string $id - * @return AtomHelper - */ - public function buildId(DOMElement $element, $id) - { - return $this->buildNode($element, 'id', $id); - } - - /** - * Build date element - * - * @access public - * @param DOMElement $element - * @param DateTime $date - * @param string $type - * @return AtomHelper - */ - public function buildDate(DOMElement $element, DateTime $date, $type = 'updated') - { - return $this->buildNode($element, $type, $date->format(DateTime::ATOM)); - } - - /** - * Build link element - * - * @access public - * @param DOMElement $element - * @param string $url - * @param string $rel - * @param string $type - * @return AtomHelper - */ - public function buildLink(DOMElement $element, $url, $rel = 'alternate', $type = 'text/html') - { - $node = $this->document->createElement('link'); - $node->setAttribute('rel', $rel); - $node->setAttribute('type', $type); - $node->setAttribute('href', $url); - $element->appendChild($node); - - return $this; - } - - /** - * Build author element - * - * @access public - * @param DOMElement $element - * @param string $authorName - * @param string $authorEmail - * @param string $authorUrl - * @return AtomHelper - */ - public function buildAuthor(DOMElement $element, $authorName, $authorEmail, $authorUrl) - { - if (!empty($authorName)) { - $author = $this->document->createElement('author'); - $this->buildNode($author, 'name', $authorName); - - if (!empty($authorEmail)) { - $this->buildNode($author, 'email', $authorEmail); - } - - if (!empty($authorUrl)) { - $this->buildNode($author, 'uri', $authorUrl); - } - - $element->appendChild($author); - } - - return $this; - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Syndication/AtomItemBuilder.php b/vendor/miniflux/picofeed/lib/PicoFeed/Syndication/AtomItemBuilder.php deleted file mode 100644 index dfdfe68d..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Syndication/AtomItemBuilder.php +++ /dev/null @@ -1,63 +0,0 @@ -<?php - -namespace PicoFeed\Syndication; - -use DOMElement; - -/** - * Atom Item Builder - * - * @package PicoFeed\Syndication - * @author Frederic Guillot - */ -class AtomItemBuilder extends ItemBuilder -{ - /** - * @var DOMElement - */ - protected $itemElement; - - /** - * @var AtomHelper - */ - protected $helper; - - /** - * Build item - * - * @access public - * @return DOMElement - */ - public function build() - { - $this->itemElement = $this->feedBuilder->getDocument()->createElement('entry'); - $this->helper = new AtomHelper($this->feedBuilder->getDocument()); - - if (!empty($this->itemId)) { - $this->helper->buildId($this->itemElement, $this->itemId); - } else { - $this->helper->buildId($this->itemElement, $this->itemUrl); - } - - $this->helper - ->buildTitle($this->itemElement, $this->itemTitle) - ->buildLink($this->itemElement, $this->itemUrl) - ->buildDate($this->itemElement, $this->itemUpdatedDate, 'updated') - ->buildDate($this->itemElement, $this->itemPublishedDate, 'published') - ->buildAuthor($this->itemElement, $this->authorName, $this->authorEmail, $this->authorUrl) - ; - - if (!empty($this->itemSummary)) { - $this->helper->buildNode($this->itemElement, 'summary', $this->itemSummary); - } - - if (!empty($this->itemContent)) { - $node = $this->feedBuilder->getDocument()->createElement('content'); - $node->setAttribute('type', 'html'); - $node->appendChild($this->feedBuilder->getDocument()->createCDATASection($this->itemContent)); - $this->itemElement->appendChild($node); - } - - return $this->itemElement; - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Syndication/FeedBuilder.php b/vendor/miniflux/picofeed/lib/PicoFeed/Syndication/FeedBuilder.php deleted file mode 100644 index cf9d024e..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Syndication/FeedBuilder.php +++ /dev/null @@ -1,185 +0,0 @@ -<?php - -namespace PicoFeed\Syndication; - -use DateTime; -use DOMDocument; - -/** - * Class FeedBuilder - * - * @package PicoFeed\Syndication - * @author Frederic Guillot - */ -abstract class FeedBuilder -{ - /** - * @var DOMDocument - */ - protected $document; - - /** - * @var string - */ - protected $feedTitle; - - /** - * @var string - */ - protected $feedUrl; - - /** - * @var string - */ - protected $siteUrl; - - /** - * @var string - */ - protected $authorName; - - /** - * @var string - */ - protected $authorEmail; - - /** - * @var string - */ - protected $authorUrl; - - /** - * @var DateTime - */ - protected $feedDate; - - /** - * @var ItemBuilder[] - */ - protected $items = array(); - - /** - * Constructor - * - * @access public - */ - public function __construct() - { - $this->document = new DomDocument('1.0', 'UTF-8'); - $this->document->formatOutput = true; - } - - /** - * Get new object instance - * - * @access public - * @return static - */ - public static function create() - { - return new static(); - } - - /** - * Add feed title - * - * @access public - * @param string $title - * @return $this - */ - public function withTitle($title) - { - $this->feedTitle = $title; - return $this; - } - - /** - * Add feed url - * - * @access public - * @param string $url - * @return $this - */ - public function withFeedUrl($url) - { - $this->feedUrl = $url; - return $this; - } - - /** - * Add website url - * - * @access public - * @param string $url - * @return $this - */ - public function withSiteUrl($url) - { - $this->siteUrl = $url; - return $this; - } - - /** - * Add feed date - * - * @access public - * @param DateTime $date - * @return $this - */ - public function withDate(DateTime $date) - { - $this->feedDate = $date; - return $this; - } - - /** - * Add feed author - * - * @access public - * @param string $name - * @param string $email - * @param string $url - * @return $this - */ - public function withAuthor($name, $email = '', $url ='') - { - $this->authorName = $name; - $this->authorEmail = $email; - $this->authorUrl = $url; - return $this; - } - - /** - * Add feed item - * - * @access public - * @param ItemBuilder $item - * @return $this - */ - public function withItem(ItemBuilder $item) - { - $this->items[] = $item; - return $this; - } - - /** - * Get DOM document - * - * @access public - * @return DOMDocument - */ - public function getDocument() - { - return $this->document; - } - - /** - * Build feed - * - * @abstract - * @access public - * @param string $filename - * @return string - */ - abstract public function build($filename = ''); -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Syndication/ItemBuilder.php b/vendor/miniflux/picofeed/lib/PicoFeed/Syndication/ItemBuilder.php deleted file mode 100644 index 86985bc7..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Syndication/ItemBuilder.php +++ /dev/null @@ -1,209 +0,0 @@ -<?php - -namespace PicoFeed\Syndication; - -use DateTime; -use DOMElement; - -/** - * Class ItemBuilder - * - * @package PicoFeed\Syndication - * @author Frederic Guillot - */ -abstract class ItemBuilder -{ - /** - * @var string - */ - protected $itemTitle; - - /** - * @var string - */ - protected $itemId; - - /** - * @var string - */ - protected $itemSummary; - - /** - * @var string - */ - protected $authorName; - - /** - * @var string - */ - protected $authorEmail; - - /** - * @var string - */ - protected $authorUrl; - - /** - * @var DateTime - */ - protected $itemPublishedDate; - - /** - * @var DateTime - */ - protected $itemUpdatedDate; - - /** - * @var string - */ - protected $itemContent; - - /** - * @var string - */ - protected $itemUrl; - - /** - * @var FeedBuilder - */ - protected $feedBuilder; - - /** - * Constructor - * - * @param FeedBuilder $feedBuilder - */ - public function __construct(FeedBuilder $feedBuilder) - { - $this->feedBuilder = $feedBuilder; - } - - /** - * Get new object instance - * - * @access public - * @param FeedBuilder $feedBuilder - * @return static - */ - public static function create(FeedBuilder $feedBuilder) - { - return new static($feedBuilder); - } - - /** - * Add item title - * - * @access public - * @param string $title - * @return $this - */ - public function withTitle($title) - { - $this->itemTitle = $title; - return $this; - } - - /** - * Add item id - * - * @access public - * @param string $id - * @return $this - */ - public function withId($id) - { - $this->itemId = $id; - return $this; - } - - /** - * Add item url - * - * @access public - * @param string $url - * @return $this - */ - public function withUrl($url) - { - $this->itemUrl = $url; - return $this; - } - - /** - * Add item summary - * - * @access public - * @param string $summary - * @return $this - */ - public function withSummary($summary) - { - $this->itemSummary = $summary; - return $this; - } - - /** - * Add item content - * - * @access public - * @param string $content - * @return $this - */ - public function withContent($content) - { - $this->itemContent = $content; - return $this; - } - - /** - * Add item updated date - * - * @access public - * @param DateTime $date - * @return $this - */ - public function withUpdatedDate(DateTime $date) - { - $this->itemUpdatedDate = $date; - return $this; - } - - /** - * Add item published date - * - * @access public - * @param DateTime $date - * @return $this - */ - public function withPublishedDate(DateTime $date) - { - $this->itemPublishedDate = $date; - return $this; - } - - /** - * Add item author - * - * @access public - * @param string $name - * @param string $email - * @param string $url - * @return $this - */ - public function withAuthor($name, $email = '', $url ='') - { - $this->authorName = $name; - $this->authorEmail = $email; - $this->authorUrl = $url; - return $this; - } - - /** - * Build item - * - * @abstract - * @access public - * @return DOMElement - */ - abstract public function build(); -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Syndication/Rss20FeedBuilder.php b/vendor/miniflux/picofeed/lib/PicoFeed/Syndication/Rss20FeedBuilder.php deleted file mode 100644 index bc3f5135..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Syndication/Rss20FeedBuilder.php +++ /dev/null @@ -1,76 +0,0 @@ -<?php - -namespace PicoFeed\Syndication; - -use DOMAttr; -use DOMElement; - -/** - * Rss20 Feed Builder - * - * @package PicoFeed\Syndication - * @author Frederic Guillot - */ -class Rss20FeedBuilder extends FeedBuilder -{ - /** - * @var DOMElement - */ - protected $rssElement; - - /** - * @var Rss20Helper - */ - protected $helper; - - /** - * @var DOMElement - */ - protected $channelElement; - - /** - * Build feed - * - * @access public - * @param string $filename - * @return string - */ - public function build($filename = '') - { - $this->helper = new Rss20Helper($this->getDocument()); - - $this->rssElement = $this->getDocument()->createElement('rss'); - $this->rssElement->setAttribute('version', '2.0'); - $this->rssElement->setAttributeNodeNS(new DomAttr('xmlns:content', 'http://purl.org/rss/1.0/modules/content/')); - $this->rssElement->setAttributeNodeNS(new DomAttr('xmlns:atom', 'http://www.w3.org/2005/Atom')); - - $this->channelElement = $this->getDocument()->createElement('channel'); - $this->helper - ->buildNode($this->channelElement, 'generator', 'PicoFeed (https://github.com/miniflux/picoFeed)') - ->buildTitle($this->channelElement, $this->feedTitle) - ->buildNode($this->channelElement, 'description', $this->feedTitle) - ->buildDate($this->channelElement, $this->feedDate) - ->buildAuthor($this->channelElement, 'webMaster', $this->authorName, $this->authorEmail) - ->buildLink($this->channelElement, $this->siteUrl) - ; - - $link = $this->getDocument()->createElement('atom:link'); - $link->setAttribute('href', $this->feedUrl); - $link->setAttribute('rel', 'self'); - $link->setAttribute('type', 'application/rss+xml'); - $this->channelElement->appendChild($link); - - foreach ($this->items as $item) { - $this->channelElement->appendChild($item->build()); - } - - $this->rssElement->appendChild($this->channelElement); - $this->getDocument()->appendChild($this->rssElement); - - if ($filename !== '') { - $this->getDocument()->save($filename); - } - - return $this->getDocument()->saveXML(); - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Syndication/Rss20Helper.php b/vendor/miniflux/picofeed/lib/PicoFeed/Syndication/Rss20Helper.php deleted file mode 100644 index 72a19e56..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Syndication/Rss20Helper.php +++ /dev/null @@ -1,115 +0,0 @@ -<?php - -namespace PicoFeed\Syndication; - -use DateTime; -use DOMDocument; -use DOMElement; - -/** - * Class Rss20Helper - * - * @package PicoFeed\Syndication - * @author Frederic Guillot - */ -class Rss20Helper -{ - /** - * @var DOMDocument - */ - protected $document; - - /** - * Constructor - * - * @param DOMDocument $document - */ - public function __construct(DOMDocument $document) - { - $this->document = $document; - } - - /** - * Build node - * - * @access public - * @param DOMElement $element - * @param string $tag - * @param string $value - * @return $this - */ - public function buildNode(DOMElement $element, $tag, $value) - { - $node = $this->document->createElement($tag); - $node->appendChild($this->document->createTextNode($value)); - $element->appendChild($node); - return $this; - } - - /** - * Build title - * - * @access public - * @param DOMElement $element - * @param string $title - * @return $this - */ - public function buildTitle(DOMElement $element, $title) - { - return $this->buildNode($element, 'title', $title); - } - - /** - * Build date element - * - * @access public - * @param DOMElement $element - * @param DateTime $date - * @param string $type - * @return $this - */ - public function buildDate(DOMElement $element, DateTime $date, $type = 'pubDate') - { - return $this->buildNode($element, $type, $date->format(DateTime::RSS)); - } - - /** - * Build link element - * - * @access public - * @param DOMElement $element - * @param string $url - * @return $this - */ - public function buildLink(DOMElement $element, $url) - { - return $this->buildNode($element, 'link', $url); - } - - /** - * Build author element - * - * @access public - * @param DOMElement $element - * @param string $tag - * @param string $authorName - * @param string $authorEmail - * @return $this - */ - public function buildAuthor(DOMElement $element, $tag, $authorName, $authorEmail) - { - if (!empty($authorName)) { - $value = ''; - - if (!empty($authorEmail)) { - $value .= $authorEmail.' ('.$authorName.')'; - } else { - $value = $authorName; - } - - $this->buildNode($element, $tag, $value); - } - - return $this; - } -} diff --git a/vendor/miniflux/picofeed/lib/PicoFeed/Syndication/Rss20ItemBuilder.php b/vendor/miniflux/picofeed/lib/PicoFeed/Syndication/Rss20ItemBuilder.php deleted file mode 100644 index 125dc6ac..00000000 --- a/vendor/miniflux/picofeed/lib/PicoFeed/Syndication/Rss20ItemBuilder.php +++ /dev/null @@ -1,67 +0,0 @@ -<?php - -namespace PicoFeed\Syndication; - -use DOMElement; - -/** - * Rss20 Item Builder - * - * @package PicoFeed\Syndication - * @author Frederic Guillot - */ -class Rss20ItemBuilder extends ItemBuilder -{ - /** - * @var DOMElement - */ - protected $itemElement; - - /** - * @var Rss20Helper - */ - protected $helper; - - /** - * Build item - * - * @access public - * @return DOMElement - */ - public function build() - { - $this->itemElement = $this->feedBuilder->getDocument()->createElement('item'); - $this->helper = new Rss20Helper($this->feedBuilder->getDocument()); - - if (!empty($this->itemId)) { - $guid = $this->feedBuilder->getDocument()->createElement('guid'); - $guid->setAttribute('isPermaLink', 'false'); - $guid->appendChild($this->feedBuilder->getDocument()->createTextNode($this->itemId)); - $this->itemElement->appendChild($guid); - } else { - $guid = $this->feedBuilder->getDocument()->createElement('guid'); - $guid->setAttribute('isPermaLink', 'true'); - $guid->appendChild($this->feedBuilder->getDocument()->createTextNode($this->itemUrl)); - $this->itemElement->appendChild($guid); - } - - $this->helper - ->buildTitle($this->itemElement, $this->itemTitle) - ->buildLink($this->itemElement, $this->itemUrl) - ->buildDate($this->itemElement, $this->itemPublishedDate) - ->buildAuthor($this->itemElement, 'author', $this->authorName, $this->authorEmail) - ; - - if (!empty($this->itemSummary)) { - $this->helper->buildNode($this->itemElement, 'description', $this->itemSummary); - } - - if (!empty($this->itemContent)) { - $node = $this->feedBuilder->getDocument()->createElement('content:encoded'); - $node->appendChild($this->feedBuilder->getDocument()->createCDATASection($this->itemContent)); - $this->itemElement->appendChild($node); - } - - return $this->itemElement; - } -} diff --git a/vendor/miniflux/picofeed/picofeed b/vendor/miniflux/picofeed/picofeed deleted file mode 100755 index 8f35737a..00000000 --- a/vendor/miniflux/picofeed/picofeed +++ /dev/null @@ -1,135 +0,0 @@ -#!/usr/bin/env php -<?php - -require_once 'vendor/autoload.php'; - -use PicoFeed\Config\Config; -use PicoFeed\Reader\Favicon; -use PicoFeed\Scraper\Scraper; -use PicoFeed\Reader\Reader; -use PicoFeed\Logging\Logger; -use PicoFeed\PicoFeedException; - -Logger::enable(); - -function get_feed($url, $disable_filtering = false) -{ - try { - - $reader = new Reader; - $resource = $reader->discover($url); - - $parser = $reader->getParser( - $resource->getUrl(), - $resource->getContent(), - $resource->getEncoding() - ); - - if ($disable_filtering) { - $parser->disableContentFiltering(); - } - - return $parser->execute(); - } - catch (PicoFeedException $e) { - echo 'Exception thrown ===> "'.$e->getMessage().'"'.PHP_EOL; - return false; - } -} - -function get_item($feed, $item_id) -{ - foreach ($feed->items as $item) { - if ($item->getId() === $item_id) { - echo $item; - echo "============= CONTENT ================\n"; - echo $item->getContent(); - echo "\n============= CONTENT ================\n"; - break; - } - } -} - -function dump_feed($url) -{ - $feed = get_feed($url); - echo $feed; -} - -function debug_feed($url) -{ - get_feed($url); - print_r(Logger::getMessages()); -} - -function dump_item($url, $item_id) -{ - $feed = get_feed($url); - - if ($feed !== false) { - get_item($feed, $item_id); - } -} - -function nofilter_item($url, $item_id) -{ - $feed = get_feed($url, true); - - if ($feed !== false) { - get_item($feed, $item_id); - } -} - -function grabber($url) -{ - $grabber = new Scraper(new Config); - $grabber->setUrl($url); - $grabber->execute(); - - print_r(Logger::getMessages()); - echo "============= CONTENT ================\n"; - echo $grabber->getRelevantContent().PHP_EOL; - echo "============= FILTERED ================\n"; - echo $grabber->getFilteredContent().PHP_EOL; -} - -function fetch_favicon($url) -{ - $favicon = new Favicon(); - echo $favicon->find($url) . PHP_EOL; -} - -// Parse command line arguments -if ($argc === 4) { - switch ($argv[1]) { - case 'item': - dump_item($argv[2], $argv[3]); - die; - case 'nofilter': - nofilter_item($argv[2], $argv[3]); - die; - } -} else if ($argc === 3) { - switch ($argv[1]) { - case 'feed': - dump_feed($argv[2]); - die; - case 'debug': - debug_feed($argv[2]); - die; - case 'grabber': - grabber($argv[2]); - die; - case 'favicon': - fetch_favicon($argv[2]); - die; - } -} - -printf("Usage:\n"); -printf("%s feed <feed-url>\n", $argv[0]); -printf("%s debug <feed-url>\n", $argv[0]); -printf("%s item <feed-url> <item-id>\n", $argv[0]); -printf("%s nofilter <feed-url> <item-id>\n", $argv[0]); -printf("%s grabber <url>\n", $argv[0]); -printf("%s favicon <url>\n", $argv[0]); diff --git a/vendor/symfony/polyfill-mbstring/LICENSE b/vendor/symfony/polyfill-mbstring/LICENSE index 39fa189d..24fa32c2 100644 --- a/vendor/symfony/polyfill-mbstring/LICENSE +++ b/vendor/symfony/polyfill-mbstring/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2014-2016 Fabien Potencier +Copyright (c) 2015-2018 Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/symfony/polyfill-mbstring/Mbstring.php b/vendor/symfony/polyfill-mbstring/Mbstring.php index 97e8c9b4..67cf9ab8 100644 --- a/vendor/symfony/polyfill-mbstring/Mbstring.php +++ b/vendor/symfony/polyfill-mbstring/Mbstring.php @@ -20,7 +20,10 @@ namespace Symfony\Polyfill\Mbstring; * - mb_convert_variables - Convert character code in variable(s) * - mb_decode_mimeheader - Decode string in MIME header field * - mb_encode_mimeheader - Encode string for MIME header XXX NATIVE IMPLEMENTATION IS REALLY BUGGED + * - mb_decode_numericentity - Decode HTML numeric string reference to character + * - mb_encode_numericentity - Encode character to HTML numeric string reference * - mb_convert_case - Perform case folding on a string + * - mb_detect_encoding - Detect character encoding * - mb_get_info - Get internal settings of mbstring * - mb_http_input - Detect HTTP input character encoding * - mb_http_output - Set/Get HTTP output character encoding @@ -47,8 +50,6 @@ namespace Symfony\Polyfill\Mbstring; * * Not implemented: * - mb_convert_kana - Convert "kana" one from another ("zen-kaku", "han-kaku" and more) - * - mb_decode_numericentity - Decode HTML numeric string reference to character - * - mb_encode_numericentity - Encode character to HTML numeric string reference * - mb_ereg_* - Regular expression with multibyte support * - mb_parse_str - Parse GET/POST/COOKIE data and set global variable * - mb_preferred_mime_name - Get MIME charset string @@ -137,9 +138,134 @@ final class Mbstring trigger_error('mb_encode_mimeheader() is bugged. Please use iconv_mime_encode() instead', E_USER_WARNING); } + public static function mb_decode_numericentity($s, $convmap, $encoding = null) + { + if (null !== $s && !is_scalar($s) && !(is_object($s) && method_exists($s, '__toString'))) { + trigger_error('mb_decode_numericentity() expects parameter 1 to be string, '.gettype($s).' given', E_USER_WARNING); + return null; + } + + if (!is_array($convmap) || !$convmap) { + return false; + } + + if (null !== $encoding && !is_scalar($encoding)) { + trigger_error('mb_decode_numericentity() expects parameter 3 to be string, '.gettype($s).' given', E_USER_WARNING); + return ''; // Instead of null (cf. mb_encode_numericentity). + } + + $s = (string) $s; + if ('' === $s) { + return ''; + } + + $encoding = self::getEncoding($encoding); + + if ('UTF-8' === $encoding) { + $encoding = null; + if (!preg_match('//u', $s)) { + $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s); + } + } else { + $s = iconv($encoding, 'UTF-8//IGNORE', $s); + } + + $cnt = floor(count($convmap) / 4) * 4; + + for ($i = 0; $i < $cnt; $i += 4) { + // collector_decode_htmlnumericentity ignores $convmap[$i + 3] + $convmap[$i] += $convmap[$i + 2]; + $convmap[$i + 1] += $convmap[$i + 2]; + } + + $s = preg_replace_callback('/&#(?:0*([0-9]+)|x0*([0-9a-fA-F]+))(?!&);?/', function (array $m) use ($cnt, $convmap) { + $c = isset($m[2]) ? (int) hexdec($m[2]) : $m[1]; + for ($i = 0; $i < $cnt; $i += 4) { + if ($c >= $convmap[$i] && $c <= $convmap[$i + 1]) { + return Mbstring::mb_chr($c - $convmap[$i + 2]); + } + } + return $m[0]; + }, $s); + + if (null === $encoding) { + return $s; + } + + return iconv('UTF-8', $encoding.'//IGNORE', $s); + } + + public static function mb_encode_numericentity($s, $convmap, $encoding = null, $is_hex = false) + { + if (null !== $s && !is_scalar($s) && !(is_object($s) && method_exists($s, '__toString'))) { + trigger_error('mb_encode_numericentity() expects parameter 1 to be string, '.gettype($s).' given', E_USER_WARNING); + return null; + } + + if (!is_array($convmap) || !$convmap) { + return false; + } + + if (null !== $encoding && !is_scalar($encoding)) { + trigger_error('mb_encode_numericentity() expects parameter 3 to be string, '.gettype($s).' given', E_USER_WARNING); + return null; // Instead of '' (cf. mb_decode_numericentity). + } + + if (null !== $is_hex && !is_scalar($is_hex)) { + trigger_error('mb_encode_numericentity() expects parameter 4 to be boolean, '.gettype($s).' given', E_USER_WARNING); + return null; + } + + $s = (string) $s; + if ('' === $s) { + return ''; + } + + $encoding = self::getEncoding($encoding); + + if ('UTF-8' === $encoding) { + $encoding = null; + if (!preg_match('//u', $s)) { + $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s); + } + } else { + $s = iconv($encoding, 'UTF-8//IGNORE', $s); + } + + static $ulenMask = array("\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4); + + $cnt = floor(count($convmap) / 4) * 4; + $i = 0; + $len = strlen($s); + $result = ''; + + while ($i < $len) { + $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"]; + $uchr = substr($s, $i, $ulen); + $i += $ulen; + $c = self::mb_ord($uchr); + + for ($j = 0; $j < $cnt; $j += 4) { + if ($c >= $convmap[$j] && $c <= $convmap[$j + 1]) { + $cOffset = ($c + $convmap[$j + 2]) & $convmap[$j + 3]; + $result .= $is_hex ? sprintf('&#x%X;', $cOffset) : '&#'.$cOffset.';'; + continue 2; + } + } + $result .= $uchr; + } + + if (null === $encoding) { + return $result; + } + + return iconv('UTF-8', $encoding.'//IGNORE', $result); + } + public static function mb_convert_case($s, $mode, $encoding = null) { - if ('' === $s .= '') { + $s = (string) $s; + if ('' === $s) { return ''; } @@ -354,7 +480,8 @@ final class Mbstring return strpos($haystack, $needle, $offset); } - if ('' === $needle .= '') { + $needle = (string) $needle; + if ('' === $needle) { trigger_error(__METHOD__.': Empty delimiter', E_USER_WARNING); return false; @@ -428,7 +555,7 @@ final class Mbstring } } - return iconv_substr($s, $start, $length, $encoding).''; + return (string) iconv_substr($s, $start, $length, $encoding); } public static function mb_stripos($haystack, $needle, $offset = 0, $encoding = null) @@ -600,7 +727,7 @@ final class Mbstring return self::mb_substr($haystack, $pos, null, $encoding); } - private static function html_encoding_callback($m) + private static function html_encoding_callback(array $m) { $i = 1; $entities = ''; @@ -625,12 +752,12 @@ final class Mbstring return $entities; } - private static function title_case_lower($s) + private static function title_case_lower(array $s) { return self::mb_convert_case($s[0], MB_CASE_LOWER, 'UTF-8'); } - private static function title_case_upper($s) + private static function title_case_upper(array $s) { return self::mb_convert_case($s[0], MB_CASE_UPPER, 'UTF-8'); } diff --git a/vendor/symfony/polyfill-mbstring/bootstrap.php b/vendor/symfony/polyfill-mbstring/bootstrap.php index 33722910..2fdcc5a6 100644 --- a/vendor/symfony/polyfill-mbstring/bootstrap.php +++ b/vendor/symfony/polyfill-mbstring/bootstrap.php @@ -19,6 +19,8 @@ if (!function_exists('mb_strlen')) { function mb_convert_encoding($s, $to, $from = null) { return p\Mbstring::mb_convert_encoding($s, $to, $from); } function mb_decode_mimeheader($s) { return p\Mbstring::mb_decode_mimeheader($s); } function mb_encode_mimeheader($s, $charset = null, $transferEnc = null, $lf = null, $indent = null) { return p\Mbstring::mb_encode_mimeheader($s, $charset, $transferEnc, $lf, $indent); } + function mb_decode_numericentity($s, $convmap, $enc = null) { return p\Mbstring::mb_decode_numericentity($s, $convmap, $enc); } + function mb_encode_numericentity($s, $convmap, $enc = null, $is_hex = false) { return p\Mbstring::mb_encode_numericentity($s, $convmap, $enc, $is_hex); } function mb_convert_case($s, $mode, $enc = null) { return p\Mbstring::mb_convert_case($s, $mode, $enc); } function mb_internal_encoding($enc = null) { return p\Mbstring::mb_internal_encoding($enc); } function mb_language($lang = null) { return p\Mbstring::mb_language($lang); } diff --git a/vendor/symfony/polyfill-mbstring/composer.json b/vendor/symfony/polyfill-mbstring/composer.json index 5946b5d8..4febcdd5 100644 --- a/vendor/symfony/polyfill-mbstring/composer.json +++ b/vendor/symfony/polyfill-mbstring/composer.json @@ -28,7 +28,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-master": "1.6-dev" + "dev-master": "1.7-dev" } } } diff --git a/vendor/zendframework/zendxml/.gitignore b/vendor/zendframework/zendxml/.gitignore deleted file mode 100644 index 0a4f6e27..00000000 --- a/vendor/zendframework/zendxml/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -composer.lock -vendor -.buildpath -.project -.settings diff --git a/vendor/zendframework/zendxml/.travis.yml b/vendor/zendframework/zendxml/.travis.yml deleted file mode 100644 index 877b0650..00000000 --- a/vendor/zendframework/zendxml/.travis.yml +++ /dev/null @@ -1,43 +0,0 @@ -sudo: false - -language: php - -branches: - except: - - /^release-.*$/ - - /^ghgfk-.*$/ - -cache: - directories: - - $HOME/.composer/cache - -matrix: - allow_failures: - - php: hhvm -matrix: - fast_finish: true - include: - - php: 5.3 - - php: 5.4 - - php: 5.5 - env: - - EXECUTE_CS_CHECK=true - - php: 5.6 - - php: 7 - - php: hhvm - allow_failures: - - php: hhvm - -before_install: - - composer self-update - -install: - - travis_retry composer install --no-interaction --ignore-platform-reqs - -script: - - ./vendor/bin/phpunit -c ./tests - - if [[ $EXECUTE_CS_CHECK == 'true' ]]; then ./vendor/bin/phpcs --standard=PSR2 --ignore=tests/Bootstrap.php library tests ; fi - -notifications: - irc: "irc.freenode.org#zftalk.dev" - email: false diff --git a/vendor/zendframework/zendxml/CHANGELOG.md b/vendor/zendframework/zendxml/CHANGELOG.md deleted file mode 100644 index bca2961b..00000000 --- a/vendor/zendframework/zendxml/CHANGELOG.md +++ /dev/null @@ -1,24 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file, in reverse chronological order by release. - -## 1.0.2 - 2016-02-04 - -### Added - -- Nothing. - -### Deprecated - -- Nothing. - -### Removed - -- Nothing. - -### Fixed - -- [#11](https://github.com/zendframework/ZendXml/pull/11) updates the - dependencies to PHP `^5.3.3 || ^7.0` and PHPUnit `^3.7 || ^4.0`, ensuring - better compatibility with other components, and with PHP 7. The test matrix - was also expanded to add PHP 7 as a required platform. diff --git a/vendor/zendframework/zendxml/LICENSE.md b/vendor/zendframework/zendxml/LICENSE.md deleted file mode 100644 index 141d3a2d..00000000 --- a/vendor/zendframework/zendxml/LICENSE.md +++ /dev/null @@ -1,12 +0,0 @@ -Copyright (c) 2014-2015, Zend Technologies USA, Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -- Neither the name of Zend Technologies USA, Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/zendframework/zendxml/README.md b/vendor/zendframework/zendxml/README.md deleted file mode 100644 index 2c67008d..00000000 --- a/vendor/zendframework/zendxml/README.md +++ /dev/null @@ -1,50 +0,0 @@ -ZendXml -======= - -An utility component for XML usage and best practices in PHP - -Installation ------------- - -You can install using: - -``` -curl -s https://getcomposer.org/installer | php -php composer.phar install -``` - -Notice that this library doesn't have any external dependencies, the usage of composer is for autoloading and standard purpose. - - -ZendXml\Security ----------------- - -This is a security component to prevent [XML eXternal Entity](https://www.owasp.org/index.php/XML_External_Entity_%28XXE%29_Processing) (XXE) and [XML Entity Expansion](http://projects.webappsec.org/w/page/13247002/XML%20Entity%20Expansion) (XEE) attacks on XML documents. - -The XXE attack is prevented disabling the load of external entities in the libxml library used by PHP, using the function [libxml_disable_entity_loader](http://www.php.net/manual/en/function.libxml-disable-entity-loader.php). - -The XEE attack is prevented looking inside the XML document for ENTITY usage. If the XML document uses ENTITY the library throw an Exception. - -We have two static methods to scan and load XML document from a string (scan) and from a file (scanFile). You can decide to get a SimpleXMLElement or DOMDocument as result, using the following use cases: - -```php -use ZendXml\Security as XmlSecurity; - -$xml = <<<XML -<?xml version="1.0"?> -<results> - <result>test</result> -</results> -XML; - -// SimpleXML use case -$simplexml = XmlSecurity::scan($xml); -printf ("SimpleXMLElement: %s\n", ($simplexml instanceof \SimpleXMLElement) ? 'yes' : 'no'); - -// DOMDocument use case -$dom = new \DOMDocument('1.0'); -$dom = XmlSecurity::scan($xml, $dom); -printf ("DOMDocument: %s\n", ($dom instanceof \DOMDocument) ? 'yes' : 'no'); -``` - - diff --git a/vendor/zendframework/zendxml/composer.json b/vendor/zendframework/zendxml/composer.json deleted file mode 100644 index d9efb222..00000000 --- a/vendor/zendframework/zendxml/composer.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "zendframework/zendxml", - "description": "Utility library for XML usage, best practices, and security in PHP", - "type": "library", - "license": "BSD-3-Clause", - "keywords": [ - "zf2", - "xml", - "security" - ], - "homepage": "http://packages.zendframework.com/", - "autoload": { - "psr-0": { - "ZendXml\\": "library/" - } - }, - "autoload-dev": { - "psr-4": { - "ZendTest\\Xml\\": "tests/ZendXmlTest/" - } - }, - "repositories": [ - { - "type": "composer", - "url": "http://packages.zendframework.com/" - } - ], - "require": { - "php": "^5.3.3 || ^7.0" - }, - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "require-dev": { - "phpunit/phpunit": "^3.7 || ^4.0", - "squizlabs/php_codesniffer": "^1.5" - } -} diff --git a/vendor/zendframework/zendxml/library/ZendXml/Exception/ExceptionInterface.php b/vendor/zendframework/zendxml/library/ZendXml/Exception/ExceptionInterface.php deleted file mode 100644 index c55eb903..00000000 --- a/vendor/zendframework/zendxml/library/ZendXml/Exception/ExceptionInterface.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace ZendXml\Exception; - -interface ExceptionInterface -{ -} diff --git a/vendor/zendframework/zendxml/library/ZendXml/Exception/InvalidArgumentException.php b/vendor/zendframework/zendxml/library/ZendXml/Exception/InvalidArgumentException.php deleted file mode 100644 index 0fef6b29..00000000 --- a/vendor/zendframework/zendxml/library/ZendXml/Exception/InvalidArgumentException.php +++ /dev/null @@ -1,17 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace ZendXml\Exception; - -/** - * Invalid argument exception - */ -class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface -{ -} diff --git a/vendor/zendframework/zendxml/library/ZendXml/Exception/RuntimeException.php b/vendor/zendframework/zendxml/library/ZendXml/Exception/RuntimeException.php deleted file mode 100644 index b730da4f..00000000 --- a/vendor/zendframework/zendxml/library/ZendXml/Exception/RuntimeException.php +++ /dev/null @@ -1,17 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ - -namespace ZendXml\Exception; - -/** - * Runtime exception - */ -class RuntimeException extends \RuntimeException implements ExceptionInterface -{ -} diff --git a/vendor/zendframework/zendxml/library/ZendXml/Security.php b/vendor/zendframework/zendxml/library/ZendXml/Security.php deleted file mode 100644 index 892e2ab1..00000000 --- a/vendor/zendframework/zendxml/library/ZendXml/Security.php +++ /dev/null @@ -1,374 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ -namespace ZendXml; - -use DOMDocument; -use SimpleXMLElement; - -class Security -{ - const ENTITY_DETECT = 'Detected use of ENTITY in XML, disabled to prevent XXE/XEE attacks'; - - /** - * Heuristic scan to detect entity in XML - * - * @param string $xml - * @throws Exception\RuntimeException If entity expansion or external entity declaration was discovered. - */ - protected static function heuristicScan($xml) - { - foreach (self::getEntityComparison($xml) as $compare) { - if (strpos($xml, $compare) !== false) { - throw new Exception\RuntimeException(self::ENTITY_DETECT); - } - } - } - - /** - * Scan XML string for potential XXE and XEE attacks - * - * @param string $xml - * @param DomDocument $dom - * @throws Exception\RuntimeException - * @return SimpleXMLElement|DomDocument|boolean - */ - public static function scan($xml, DOMDocument $dom = null) - { - // If running with PHP-FPM we perform an heuristic scan - // We cannot use libxml_disable_entity_loader because of this bug - // @see https://bugs.php.net/bug.php?id=64938 - if (self::isPhpFpm()) { - self::heuristicScan($xml); - } - - if (null === $dom) { - $simpleXml = true; - $dom = new DOMDocument(); - } - - if (!self::isPhpFpm()) { - $loadEntities = libxml_disable_entity_loader(true); - $useInternalXmlErrors = libxml_use_internal_errors(true); - } - - // Load XML with network access disabled (LIBXML_NONET) - // error disabled with @ for PHP-FPM scenario - set_error_handler(function ($errno, $errstr) { - if (substr_count($errstr, 'DOMDocument::loadXML()') > 0) { - return true; - } - return false; - }, E_WARNING); - $result = $dom->loadXml($xml, LIBXML_NONET); - restore_error_handler(); - - if (!$result) { - // Entity load to previous setting - if (!self::isPhpFpm()) { - libxml_disable_entity_loader($loadEntities); - libxml_use_internal_errors($useInternalXmlErrors); - } - return false; - } - - // Scan for potential XEE attacks using ENTITY, if not PHP-FPM - if (!self::isPhpFpm()) { - foreach ($dom->childNodes as $child) { - if ($child->nodeType === XML_DOCUMENT_TYPE_NODE) { - if ($child->entities->length > 0) { - throw new Exception\RuntimeException(self::ENTITY_DETECT); - } - } - } - } - - // Entity load to previous setting - if (!self::isPhpFpm()) { - libxml_disable_entity_loader($loadEntities); - libxml_use_internal_errors($useInternalXmlErrors); - } - - if (isset($simpleXml)) { - $result = simplexml_import_dom($dom); - if (!$result instanceof SimpleXMLElement) { - return false; - } - return $result; - } - return $dom; - } - - /** - * Scan XML file for potential XXE/XEE attacks - * - * @param string $file - * @param DOMDocument $dom - * @throws Exception\InvalidArgumentException - * @return SimpleXMLElement|DomDocument - */ - public static function scanFile($file, DOMDocument $dom = null) - { - if (!file_exists($file)) { - throw new Exception\InvalidArgumentException( - "The file $file specified doesn't exist" - ); - } - return self::scan(file_get_contents($file), $dom); - } - - /** - * Return true if PHP is running with PHP-FPM - * - * This method is mainly used to determine whether or not heuristic checks - * (vs libxml checks) should be made, due to threading issues in libxml; - * under php-fpm, threading becomes a concern. - * - * However, PHP versions 5.5.22+ and 5.6.6+ contain a patch to the - * libxml support in PHP that makes the libxml checks viable; in such - * versions, this method will return false to enforce those checks, which - * are more strict and accurate than the heuristic checks. - * - * @return boolean - */ - public static function isPhpFpm() - { - $isVulnerableVersion = ( - version_compare(PHP_VERSION, '5.5.22', 'lt') - || ( - version_compare(PHP_VERSION, '5.6', 'gte') - && version_compare(PHP_VERSION, '5.6.6', 'lt') - ) - ); - - if (substr(php_sapi_name(), 0, 3) === 'fpm' && $isVulnerableVersion) { - return true; - } - return false; - } - - /** - * Determine and return the string(s) to use for the <!ENTITY comparison. - * - * @param string $xml - * @return string[] - */ - protected static function getEntityComparison($xml) - { - $encodingMap = self::getAsciiEncodingMap(); - return array_map(function ($encoding) use ($encodingMap) { - $generator = isset($encodingMap[$encoding]) ? $encodingMap[$encoding] : $encodingMap['UTF-8']; - return $generator('<!ENTITY'); - }, self::detectXmlEncoding($xml, self::detectStringEncoding($xml))); - } - - /** - * Determine the string encoding. - * - * Determines string encoding from either a detected BOM or a - * heuristic. - * - * @param string $xml - * @return string File encoding - */ - protected static function detectStringEncoding($xml) - { - return self::detectBom($xml) ?: self::detectXmlStringEncoding($xml); - } - - /** - * Attempt to match a known BOM. - * - * Iterates through the return of getBomMap(), comparing the initial bytes - * of the provided string to the BOM of each; if a match is determined, - * it returns the encoding. - * - * @param string $string - * @return false|string Returns encoding on success. - */ - protected static function detectBom($string) - { - foreach (self::getBomMap() as $criteria) { - if (0 === strncmp($string, $criteria['bom'], $criteria['length'])) { - return $criteria['encoding']; - } - } - return false; - } - - /** - * Attempt to detect the string encoding of an XML string. - * - * @param string $xml - * @return string Encoding - */ - protected static function detectXmlStringEncoding($xml) - { - foreach (self::getAsciiEncodingMap() as $encoding => $generator) { - $prefix = $generator('<' . '?xml'); - if (0 === strncmp($xml, $prefix, strlen($prefix))) { - return $encoding; - } - } - - // Fallback - return 'UTF-8'; - } - - /** - * Attempt to detect the specified XML encoding. - * - * Using the file's encoding, determines if an "encoding" attribute is - * present and well-formed in the XML declaration; if so, it returns a - * list with both the ASCII representation of that declaration and the - * original file encoding. - * - * If not, a list containing only the provided file encoding is returned. - * - * @param string $xml - * @param string $fileEncoding - * @return string[] Potential XML encodings - */ - protected static function detectXmlEncoding($xml, $fileEncoding) - { - $encodingMap = self::getAsciiEncodingMap(); - $generator = $encodingMap[$fileEncoding]; - $encAttr = $generator('encoding="'); - $quote = $generator('"'); - $close = $generator('>'); - - $closePos = strpos($xml, $close); - if (false === $closePos) { - return array($fileEncoding); - } - - $encPos = strpos($xml, $encAttr); - if (false === $encPos - || $encPos > $closePos - ) { - return array($fileEncoding); - } - - $encPos += strlen($encAttr); - $quotePos = strpos($xml, $quote, $encPos); - if (false === $quotePos) { - return array($fileEncoding); - } - - $encoding = self::substr($xml, $encPos, $quotePos); - return array( - // Following line works because we're only supporting 8-bit safe encodings at this time. - str_replace('\0', '', $encoding), // detected encoding - $fileEncoding, // file encoding - ); - } - - /** - * Return a list of BOM maps. - * - * Returns a list of common encoding -> BOM maps, along with the character - * length to compare against. - * - * @link https://en.wikipedia.org/wiki/Byte_order_mark - * @return array - */ - protected static function getBomMap() - { - return array( - array( - 'encoding' => 'UTF-32BE', - 'bom' => pack('CCCC', 0x00, 0x00, 0xfe, 0xff), - 'length' => 4, - ), - array( - 'encoding' => 'UTF-32LE', - 'bom' => pack('CCCC', 0xff, 0xfe, 0x00, 0x00), - 'length' => 4, - ), - array( - 'encoding' => 'GB-18030', - 'bom' => pack('CCCC', 0x84, 0x31, 0x95, 0x33), - 'length' => 4, - ), - array( - 'encoding' => 'UTF-16BE', - 'bom' => pack('CC', 0xfe, 0xff), - 'length' => 2, - ), - array( - 'encoding' => 'UTF-16LE', - 'bom' => pack('CC', 0xff, 0xfe), - 'length' => 2, - ), - array( - 'encoding' => 'UTF-8', - 'bom' => pack('CCC', 0xef, 0xbb, 0xbf), - 'length' => 3, - ), - ); - } - - /** - * Return a map of encoding => generator pairs. - * - * Returns a map of encoding => generator pairs, where the generator is a - * callable that accepts a string and returns the appropriate byte order - * sequence of that string for the encoding. - * - * @return array - */ - protected static function getAsciiEncodingMap() - { - return array( - 'UTF-32BE' => function ($ascii) { - return preg_replace('/(.)/', "\0\0\0\\1", $ascii); - }, - 'UTF-32LE' => function ($ascii) { - return preg_replace('/(.)/', "\\1\0\0\0", $ascii); - }, - 'UTF-32odd1' => function ($ascii) { - return preg_replace('/(.)/', "\0\\1\0\0", $ascii); - }, - 'UTF-32odd2' => function ($ascii) { - return preg_replace('/(.)/', "\0\0\\1\0", $ascii); - }, - 'UTF-16BE' => function ($ascii) { - return preg_replace('/(.)/', "\0\\1", $ascii); - }, - 'UTF-16LE' => function ($ascii) { - return preg_replace('/(.)/', "\\1\0", $ascii); - }, - 'UTF-8' => function ($ascii) { - return $ascii; - }, - 'GB-18030' => function ($ascii) { - return $ascii; - }, - ); - } - - /** - * Binary-safe substr. - * - * substr() is not binary-safe; this method loops by character to ensure - * multi-byte characters are aggregated correctly. - * - * @param string $string - * @param int $start - * @param int $end - * @return string - */ - protected static function substr($string, $start, $end) - { - $substr = ''; - for ($i = $start; $i < $end; $i += 1) { - $substr .= $string[$i]; - } - return $substr; - } -} diff --git a/vendor/zendframework/zendxml/tests/Bootstrap.php b/vendor/zendframework/zendxml/tests/Bootstrap.php deleted file mode 100644 index a9d0e6a5..00000000 --- a/vendor/zendframework/zendxml/tests/Bootstrap.php +++ /dev/null @@ -1,92 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - * @package Zend - */ - -/** - * Set error reporting to the level to which Zend Framework code must comply. - */ -error_reporting( E_ALL | E_STRICT ); - -if (class_exists('PHPUnit_Runner_Version', true)) { - $phpUnitVersion = PHPUnit_Runner_Version::id(); - if ('@package_version@' !== $phpUnitVersion && version_compare($phpUnitVersion, '3.7.0', '<')) { - echo 'This version of PHPUnit (' . - PHPUnit_Runner_Version::id() . - ') is not supported for ZendXml unit tests - use v 3.7.0 or higher.' - . PHP_EOL - ; - exit(1); - } - unset($phpUnitVersion); -} - -/** - * Setup autoloading - */ -// Try to use Composer autoloader -if (file_exists(__DIR__ . '/../vendor/autoload.php')) { - include_once __DIR__ . '/../vendor/autoload.php'; -} -// ... or use a simple SPL autoloader -else{ - - // update include path - set_include_path(implode(PATH_SEPARATOR, array( - __DIR__.'/../src', - __DIR__, - get_include_path() - ))); - - /** - * @link https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md#example-implementation - */ - spl_autoload_register(function ($className) { - $className = ltrim($className, '\\'); - $fileName = ''; - $namespace = ''; - if ($lastNsPos = strrpos($className, '\\')) { - $namespace = substr($className, 0, $lastNsPos); - $className = substr($className, $lastNsPos + 1); - $fileName = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR; - } - $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php'; - require $fileName; - }); - -} - -/** - * Code coverage option - */ -if (defined('TESTS_GENERATE_REPORT') && TESTS_GENERATE_REPORT === true) { - $codeCoverageFilter = new PHP_CodeCoverage_Filter(); - - $lastArg = end($_SERVER['argv']); - if (is_dir($zfCoreTests . '/' . $lastArg)) { - $codeCoverageFilter->addDirectoryToWhitelist($zfCoreLibrary . '/' . $lastArg); - } elseif (is_file($zfCoreTests . '/' . $lastArg)) { - $codeCoverageFilter->addDirectoryToWhitelist(dirname($zfCoreLibrary . '/' . $lastArg)); - } else { - $codeCoverageFilter->addDirectoryToWhitelist($zfCoreLibrary); - } - - /* - * Omit from code coverage reports the contents of the tests directory - */ - $codeCoverageFilter->addDirectoryToBlacklist($zfCoreTests, ''); - $codeCoverageFilter->addDirectoryToBlacklist(PEAR_INSTALL_DIR, ''); - $codeCoverageFilter->addDirectoryToBlacklist(PHP_LIBDIR, ''); - - unset($codeCoverageFilter); -} - -/* - * Unset global variables that are no longer needed. - */ -unset($phpUnitVersion); diff --git a/vendor/zendframework/zendxml/tests/ZendXmlTest/MultibyteTest.php b/vendor/zendframework/zendxml/tests/ZendXmlTest/MultibyteTest.php deleted file mode 100644 index 165e8fa5..00000000 --- a/vendor/zendframework/zendxml/tests/ZendXmlTest/MultibyteTest.php +++ /dev/null @@ -1,125 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ -namespace ZendTest\Xml; - -use ZendXml\Security as XmlSecurity; -use ZendXml\Exception; -use DOMDocument; -use ReflectionMethod; -use SimpleXMLElement; - -/** - * @group ZF2015-06 - */ -class MultibyteTest extends \PHPUnit_Framework_TestCase -{ - public function multibyteEncodings() - { - return array( - 'UTF-16LE' => array('UTF-16LE', pack('CC', 0xff, 0xfe), 3), - 'UTF-16BE' => array('UTF-16BE', pack('CC', 0xfe, 0xff), 3), - 'UTF-32LE' => array('UTF-32LE', pack('CCCC', 0xff, 0xfe, 0x00, 0x00), 4), - 'UTF-32BE' => array('UTF-32BE', pack('CCCC', 0x00, 0x00, 0xfe, 0xff), 4), - ); - } - - public function getXmlWithXXE() - { - return <<<XML -<?xml version="1.0" encoding="{ENCODING}"?> -<!DOCTYPE methodCall [ - <!ENTITY pocdata SYSTEM "file:///etc/passwd"> -]> -<methodCall> - <methodName>retrieved: &pocdata;</methodName> -</methodCall> -XML; - } - - /** - * Invoke ZendXml\Security::heuristicScan with the provided XML. - * - * @param string $xml - * @return void - * @throws Exception\RuntimeException - */ - public function invokeHeuristicScan($xml) - { - $r = new ReflectionMethod('ZendXml\Security', 'heuristicScan'); - $r->setAccessible(true); - return $r->invoke(null, $xml); - } - - /** - * @dataProvider multibyteEncodings - * @group heuristicDetection - */ - public function testDetectsMultibyteXXEVectorsUnderFPMWithEncodedStringMissingBOM($encoding, $bom, $bomLength) - { - $xml = $this->getXmlWithXXE(); - $xml = str_replace('{ENCODING}', $encoding, $xml); - $xml = iconv('UTF-8', $encoding, $xml); - $this->assertNotSame(0, strncmp($xml, $bom, $bomLength)); - $this->setExpectedException('ZendXml\Exception\RuntimeException', 'ENTITY'); - $this->invokeHeuristicScan($xml); - } - - /** - * @dataProvider multibyteEncodings - */ - public function testDetectsMultibyteXXEVectorsUnderFPMWithEncodedStringUsingBOM($encoding, $bom) - { - $xml = $this->getXmlWithXXE(); - $xml = str_replace('{ENCODING}', $encoding, $xml); - $orig = iconv('UTF-8', $encoding, $xml); - $xml = $bom . $orig; - $this->setExpectedException('ZendXml\Exception\RuntimeException', 'ENTITY'); - $this->invokeHeuristicScan($xml); - } - - public function getXmlWithoutXXE() - { - return <<<XML -<?xml version="1.0" encoding="{ENCODING}"?> -<methodCall> - <methodName>retrieved: &pocdata;</methodName> -</methodCall> -XML; - } - - /** - * @dataProvider multibyteEncodings - */ - public function testDoesNotFlagValidMultibyteXmlAsInvalidUnderFPM($encoding) - { - $xml = $this->getXmlWithoutXXE(); - $xml = str_replace('{ENCODING}', $encoding, $xml); - $xml = iconv('UTF-8', $encoding, $xml); - try { - $result = $this->invokeHeuristicScan($xml); - $this->assertNull($result); - } catch (\Exception $e) { - $this->fail('Security scan raised exception when it should not have'); - } - } - - /** - * @dataProvider multibyteEncodings - * @group mixedEncoding - */ - public function testDetectsXXEWhenXMLDocumentEncodingDiffersFromFileEncoding($encoding, $bom) - { - $xml = $this->getXmlWithXXE(); - $xml = str_replace('{ENCODING}', 'UTF-8', $xml); - $xml = iconv('UTF-8', $encoding, $xml); - $xml = $bom . $xml; - $this->setExpectedException('ZendXml\Exception\RuntimeException', 'ENTITY'); - $this->invokeHeuristicScan($xml); - } -} diff --git a/vendor/zendframework/zendxml/tests/ZendXmlTest/SecurityTest.php b/vendor/zendframework/zendxml/tests/ZendXmlTest/SecurityTest.php deleted file mode 100644 index fa3b30bf..00000000 --- a/vendor/zendframework/zendxml/tests/ZendXmlTest/SecurityTest.php +++ /dev/null @@ -1,135 +0,0 @@ -<?php -/** - * Zend Framework (http://framework.zend.com/) - * - * @link http://github.com/zendframework/zf2 for the canonical source repository - * @copyright Copyright (c) 2005-2013 Zend Technologies USA Inc. (http://www.zend.com) - * @license http://framework.zend.com/license/new-bsd New BSD License - */ -namespace ZendTest\Xml; - -use ZendXml\Security as XmlSecurity; -use ZendXml\Exception; -use DOMDocument; -use SimpleXMLElement; - -class SecurityTest extends \PHPUnit_Framework_TestCase -{ - /** - * @expectedException ZendXml\Exception\RuntimeException - */ - public function testScanForXEE() - { - $xml = <<<XML -<?xml version="1.0"?> -<!DOCTYPE results [<!ENTITY harmless "completely harmless">]> -<results> - <result>This result is &harmless;</result> -</results> -XML; - - $this->setExpectedException('ZendXml\Exception\RuntimeException'); - $result = XmlSecurity::scan($xml); - } - - public function testScanForXXE() - { - $file = tempnam(sys_get_temp_dir(), 'ZendXml_Security'); - file_put_contents($file, 'This is a remote content!'); - $xml = <<<XML -<?xml version="1.0"?> -<!DOCTYPE root -[ -<!ENTITY foo SYSTEM "file://$file"> -]> -<results> - <result>&foo;</result> -</results> -XML; - - try { - $result = XmlSecurity::scan($xml); - } catch (Exception\RuntimeException $e) { - unlink($file); - return; - } - $this->fail('An expected exception has not been raised.'); - } - - public function testScanSimpleXmlResult() - { - $result = XmlSecurity::scan($this->getXml()); - $this->assertTrue($result instanceof SimpleXMLElement); - $this->assertEquals($result->result, 'test'); - } - - public function testScanDom() - { - $dom = new DOMDocument('1.0'); - $result = XmlSecurity::scan($this->getXml(), $dom); - $this->assertTrue($result instanceof DOMDocument); - $node = $result->getElementsByTagName('result')->item(0); - $this->assertEquals($node->nodeValue, 'test'); - } - - public function testScanInvalidXml() - { - $xml = <<<XML -<foo>test</bar> -XML; - - $result = XmlSecurity::scan($xml); - $this->assertFalse($result); - } - - public function testScanInvalidXmlDom() - { - $xml = <<<XML -<foo>test</bar> -XML; - - $dom = new DOMDocument('1.0'); - $result = XmlSecurity::scan($xml, $dom); - $this->assertFalse($result); - } - - public function testScanFile() - { - $file = tempnam(sys_get_temp_dir(), 'ZendXml_Security'); - file_put_contents($file, $this->getXml()); - - $result = XmlSecurity::scanFile($file); - $this->assertTrue($result instanceof SimpleXMLElement); - $this->assertEquals($result->result, 'test'); - unlink($file); - } - - public function testScanXmlWithDTD() - { - $xml = <<<XML -<?xml version="1.0"?> -<!DOCTYPE results [ -<!ELEMENT results (result+)> -<!ELEMENT result (#PCDATA)> -]> -<results> - <result>test</result> -</results> -XML; - - $dom = new DOMDocument('1.0'); - $result = XmlSecurity::scan($xml, $dom); - $this->assertTrue($result instanceof DOMDocument); - $this->assertTrue($result->validate()); - } - - protected function getXml() - { - return <<<XML -<?xml version="1.0"?> -<results> - <result>test</result> -</results> -XML; - } -} diff --git a/vendor/zendframework/zendxml/tests/phpunit.xml.dist b/vendor/zendframework/zendxml/tests/phpunit.xml.dist deleted file mode 100755 index 069784bd..00000000 --- a/vendor/zendframework/zendxml/tests/phpunit.xml.dist +++ /dev/null @@ -1,27 +0,0 @@ -<phpunit bootstrap="./Bootstrap.php" colors="true"> - <testsuites> - <testsuite name="ZendXml Test Suite"> - <directory>./ZendXmlTest</directory> - <exclude>./ZendXmlTest/TestAsset</exclude> - </testsuite> - </testsuites> - - <groups> - <exclude> - </exclude> - </groups> - - <listeners> - </listeners> - - <filter> - <blacklist> - <directory suffix=".php">./ZendXmlTest</directory> - <directory>../vendor</directory> - </blacklist> - </filter> - - <php> - </php> - -</phpunit> |