diff --git a/app/MetadataResolver/FC2ContentsResolver.php b/app/MetadataResolver/FC2ContentsResolver.php new file mode 100644 index 0000000..76497ee --- /dev/null +++ b/app/MetadataResolver/FC2ContentsResolver.php @@ -0,0 +1,44 @@ +client = $client; + $this->ogpResolver = $ogpResolver; + } + + public function resolve(string $url): Metadata + { + $res = $this->client->get($url); + if ($res->getStatusCode() === 200) { + $metadata = $this->ogpResolver->parse($res->getBody()); + + $dom = new \DOMDocument(); + @$dom->loadHTML(mb_convert_encoding($res->getBody(), 'HTML-ENTITIES', 'UTF-8')); + $xpath = new \DOMXPath($dom); + + $thumbnailNode = $xpath->query('//*[@class="main_thum_img"]/a')->item(0); + if ($thumbnailNode) { + $metadata->image = preg_replace('~^http:~', "https:", $thumbnailNode->getAttribute('href')); + } + + return $metadata; + } else { + throw new \RuntimeException("{$res->getStatusCode()}: $url"); + } + } +} diff --git a/app/MetadataResolver/MetadataResolver.php b/app/MetadataResolver/MetadataResolver.php index 1a8c6fe..181aab3 100644 --- a/app/MetadataResolver/MetadataResolver.php +++ b/app/MetadataResolver/MetadataResolver.php @@ -25,6 +25,7 @@ class MetadataResolver implements Resolver '~\.syosetu\.com/n\d+[a-z]{2,}~' => NarouResolver::class, '~ci-en\.jp/creator/\d+/article/\d+~' => CienResolver::class, '~www\.plurk\.com\/p\/.*~' => PlurkResolver::class, + '~(adult\.)?contents\.fc2\.com\/article_search\.php\?id=\d+~' => FC2ContentsResolver::class, ]; public $mimeTypes = [