From 9a893bb23c9ad84d283c9f963608b5c2dd238821 Mon Sep 17 00:00:00 2001 From: flashwave Date: Sun, 19 Nov 2023 04:05:48 +0000 Subject: [PATCH] Fixed media type detection. --- src/Lookup/WebLookup.php | 39 +++++++++++++++++--------- src/Lookup/WebLookupFallbackResult.php | 3 +- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/src/Lookup/WebLookup.php b/src/Lookup/WebLookup.php index b68804a..fd5f481 100644 --- a/src/Lookup/WebLookup.php +++ b/src/Lookup/WebLookup.php @@ -1,6 +1,7 @@ lookupMedia($url, $mediaType); + } } - $isXHTML = $mediaType->equals('application/xhtml+xml') || $mediaType->equals('application/xml'); - if($isXHTML || $mediaType->equals('text/html')) - return $this->lookupSite($url, $req, $mediaType, $isXHTML); - + $body = self::reqBody($req); self::reqClose($req); - if(MediaTypeExts::isMedia($mediaType)) - return $this->lookupMedia($url, $mediaType); + if(!$hasContentType) + try { + $finfo = new finfo(FILEINFO_MIME); + $mediaType = MediaType::parse($finfo->buffer($body)); + } catch(InvalidArgumentException $ex) {} + + if($mediaType->equals('text/html') + || $mediaType->equals('application/xhtml+xml') + || $mediaType->equals('application/xml')) + return $this->lookupSite($url, $req, $mediaType, $body); return new WebLookupFallbackResult($url, $mediaType, $url->getHost() . ': ' . basename($url->getPath())); } - private function lookupSite(Url $url, $req, MediaType $mediaType, bool $isXHTML): WebLookupResult { - $body = self::reqBody($req); - self::reqClose($req); - + private function lookupSite(Url $url, $req, MediaType $mediaType, string $body): WebLookupResult { // ok hear me out // there's absolutely no good html scraping libraries for PHP // DOMDocument Exists but kinda blows at catching weird encoding events like with pixiv diff --git a/src/Lookup/WebLookupFallbackResult.php b/src/Lookup/WebLookupFallbackResult.php index 3deb2d9..1591a4a 100644 --- a/src/Lookup/WebLookupFallbackResult.php +++ b/src/Lookup/WebLookupFallbackResult.php @@ -4,6 +4,7 @@ namespace Uiharu\Lookup; use RuntimeException; use Uiharu\Url; use Index\MediaType; +use Index\Colour\Colour; class WebLookupFallbackResult extends WebLookupResult { private string $title; @@ -20,7 +21,7 @@ class WebLookupFallbackResult extends WebLookupResult { public function hasColour(): bool { return false; } - public function getColour(): int { + public function getColour(): Colour { throw new RuntimeException('Unsupported.'); }