diff options
Diffstat (limited to 'vendor/fguillot/picofeed/lib/PicoFeed/Client')
3 files changed, 50 insertions, 174 deletions
diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Client/Client.php b/vendor/fguillot/picofeed/lib/PicoFeed/Client/Client.php index e962ba4e8..c8c812c1a 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Client/Client.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Client/Client.php @@ -22,6 +22,14 @@ abstract class Client private $is_modified = true; /** + * HTTP Content-Type + * + * @access private + * @var string + */ + private $content_type = ''; + + /** * HTTP encoding * * @access private @@ -231,7 +239,8 @@ abstract class Client { if ($response['status'] == 200) { $this->content = $response['body']; - $this->encoding = $this->findCharset($response); + $this->content_type = $this->findContentType($response); + $this->encoding = $this->findCharset(); } } @@ -249,14 +258,26 @@ abstract class Client } /** - * Find charset from response headers + * Find content type from response headers * * @access public * @param array $response Client response + * @return string */ - public function findCharset(array $response) + public function findContentType(array $response) { - $result = explode('charset=', strtolower($this->getHeader($response, 'Content-Type'))); + return strtolower($this->getHeader($response, 'Content-Type')); + } + + /** + * Find charset from response headers + * + * @access public + * @return string + */ + public function findCharset() + { + $result = explode('charset=', $this->content_type); return isset($result[1]) ? $result[1] : ''; } @@ -390,6 +411,17 @@ abstract class Client } /** + * Get the content type value from HTTP headers + * + * @access public + * @return string + */ + public function getContentType() + { + return $this->content_type; + } + + /** * Get the encoding value from HTTP headers * * @access public diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Client/Favicon.php b/vendor/fguillot/picofeed/lib/PicoFeed/Client/Favicon.php deleted file mode 100644 index 5b63cf044..000000000 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Client/Favicon.php +++ /dev/null @@ -1,170 +0,0 @@ -<?php - -namespace PicoFeed\Client; - -use DOMXpath; - -use PicoFeed\Config\Config; -use PicoFeed\Logging\Logger; -use PicoFeed\Parser\XmlParser; - -/** - * Favicon class - * - * https://en.wikipedia.org/wiki/Favicon - * - * @author Frederic Guillot - * @package Client - */ -class Favicon -{ - /** - * Config class instance - * - * @access private - * @var \PicoFeed\Config\Config - */ - private $config; - - /** - * Icon content - * - * @access private - * @var string - */ - private $content = ''; - - /** - * Constructor - * - * @access public - * @param \PicoFeed\Config\Config $config Config class instance - */ - public function __construct(Config $config = null) - { - $this->config = $config ?: new Config; - } - - /** - * Get the icon file content (available only after the download) - * - * @access public - * @return string - */ - public function getContent() - { - return $this->content; - } - - /** - * Download and check if a resource exists - * - * @access public - * @param string $url URL - * @return string Resource content - */ - public function download($url) - { - try { - - Logger::setMessage(get_called_class().' Download => '.$url); - - $client = Client::getInstance(); - $client->setConfig($this->config); - $client->execute($url); - - return $client->getContent(); - } - catch (ClientException $e) { - return ''; - } - } - - /** - * Check if a remote file exists - * - * @access public - * @param string $url URL - * @return boolean - */ - public function exists($url) - { - return $this->download($url) !== ''; - } - - /** - * Get the icon link for a website - * - * @access public - * @param string $website_link URL - * @return string - */ - public function find($website_link) - { - $website = new Url($website_link); - - $icons = $this->extract($this->download($website->getBaseUrl('/'))); - $icons[] = $website->getBaseUrl('/favicon.ico'); - - foreach ($icons as $icon_link) { - - $icon_link = $this->convertLink($website, new Url($icon_link)); - $this->content = $this->download($icon_link); - - if ($this->content !== '') { - return $icon_link; - } - } - - return ''; - } - - /** - * Convert icon links to absolute url - * - * @access public - * @param \PicoFeed\Client\Url $website Website url - * @param \PicoFeed\Client\Url $icon Icon url - * @return string - */ - public function convertLink(Url $website, Url $icon) - { - $base_url = ''; - - if ($icon->isRelativeUrl()) { - $base_url = $website->getBaseUrl(); - } - else if ($icon->isProtocolRelative()) { - $icon->setScheme($website->getScheme()); - } - - return $icon->getAbsoluteUrl($base_url); - } - - /** - * Extract the icon links from the HTML - * - * @access public - * @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[contains(@rel, 'icon') and not(contains(@rel, 'apple'))]"); - - for ($i = 0; $i < $elements->length; $i++) { - $icons[] = $elements->item($i)->getAttribute('href'); - } - - return $icons; - } -} diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Client/Url.php b/vendor/fguillot/picofeed/lib/PicoFeed/Client/Url.php index 90d7fb6f7..a74c23508 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Client/Url.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Client/Url.php @@ -80,6 +80,20 @@ class Url } /** + * Shortcut method to get a base url + * + * @static + * @access public + * @param string $url + * @return string + */ + public static function base($url) + { + $link = new Url($url); + return $link->getBaseUrl(); + } + + /** * Get the base URL * * @access public |