summaryrefslogtreecommitdiffstats
path: root/vendor/fguillot/picofeed/lib/PicoFeed/Client
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/fguillot/picofeed/lib/PicoFeed/Client')
-rw-r--r--vendor/fguillot/picofeed/lib/PicoFeed/Client/Client.php40
-rw-r--r--vendor/fguillot/picofeed/lib/PicoFeed/Client/Favicon.php170
-rw-r--r--vendor/fguillot/picofeed/lib/PicoFeed/Client/Url.php14
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