From c061a51f8f95930674ac74c205f819d634c8dac1 Mon Sep 17 00:00:00 2001 From: eai04191 Date: Sat, 15 Jun 2019 04:57:35 +0900 Subject: [PATCH] =?UTF-8?q?SteamResolver=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/MetadataResolver/MetadataResolver.php | 1 + app/MetadataResolver/SteamResolver.php | 41 +++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 app/MetadataResolver/SteamResolver.php diff --git a/app/MetadataResolver/MetadataResolver.php b/app/MetadataResolver/MetadataResolver.php index c47608a..4ff1669 100644 --- a/app/MetadataResolver/MetadataResolver.php +++ b/app/MetadataResolver/MetadataResolver.php @@ -27,6 +27,7 @@ class MetadataResolver implements Resolver '~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, + '~store\.steampowered\.com/app/\d+~' => SteamResolver::class, ]; public $mimeTypes = [ diff --git a/app/MetadataResolver/SteamResolver.php b/app/MetadataResolver/SteamResolver.php new file mode 100644 index 0000000..c9bef92 --- /dev/null +++ b/app/MetadataResolver/SteamResolver.php @@ -0,0 +1,41 @@ +client = $client; + } + + public function resolve(string $url): Metadata + { + if (preg_match('~store\.steampowered\.com/app/(\d+)~', $url, $matches) !== 1) { + throw new \RuntimeException("Unmatched URL Pattern: $url"); + } + $appid = $matches[1]; + + $res = $this->client->get('https://store.steampowered.com/api/appdetails/?l=japanese&appids=' . $appid); + if ($res->getStatusCode() === 200) { + $json = json_decode($res->getBody()->getContents(), true); + $data = $json[$appid]['data']; + $metadata = new Metadata(); + + $metadata->title = $data['name'] ?? ''; + $metadata->description = strip_tags(str_replace('
', PHP_EOL, html_entity_decode($data['short_description'] ?? ''))); + $metadata->image = $data['header_image'] ?? ''; + + return $metadata; + } else { + throw new \RuntimeException("{$res->getStatusCode()}: $url"); + } + } +}