diff --git a/app/MetadataResolver/MetadataResolver.php b/app/MetadataResolver/MetadataResolver.php index 88981e2..9e19fe9 100644 --- a/app/MetadataResolver/MetadataResolver.php +++ b/app/MetadataResolver/MetadataResolver.php @@ -20,6 +20,7 @@ class MetadataResolver implements Resolver '~www\.dlsite\.com/.*/dlaf/=/aid/.+/url/.+~' => DLsiteResolver::class, '~dlsite\.jp/...tw/..\d+~' => DLsiteResolver::class, '~www\.pixiv\.net/member_illust\.php\?illust_id=\d+~' => PixivResolver::class, + '~www\.pixiv\.net/artworks/\d+~' => PixivResolver::class, '~www\.pixiv\.net/user/\d+/series/\d+~' => PixivResolver::class, '~fantia\.jp/posts/\d+~' => FantiaResolver::class, '~dmm\.co\.jp/~' => FanzaResolver::class, diff --git a/app/MetadataResolver/PixivResolver.php b/app/MetadataResolver/PixivResolver.php index 327c74c..e6690ac 100644 --- a/app/MetadataResolver/PixivResolver.php +++ b/app/MetadataResolver/PixivResolver.php @@ -44,13 +44,17 @@ class PixivResolver implements Resolver return $metadata; } - parse_str(parse_url($url, PHP_URL_QUERY), $params); - $illustId = $params['illust_id']; $page = 0; + if (preg_match('~www\.pixiv\.net/artworks/(\d+)~', $url, $matches)) { + $illustId = $matches[1]; + } else { + parse_str(parse_url($url, PHP_URL_QUERY), $params); + $illustId = $params['illust_id']; - // 漫画ページ(ページ数はmanga_bigならあるかも) - if ($params['mode'] === 'manga_big' || $params['mode'] === 'manga') { - $page = $params['page'] ?? 0; + // 漫画ページ(ページ数はmanga_bigならあるかも) + if ($params['mode'] === 'manga_big' || $params['mode'] === 'manga') { + $page = $params['page'] ?? 0; + } } $res = $this->client->get('https://www.pixiv.net/ajax/illust/' . $illustId); diff --git a/tests/Unit/MetadataResolver/PixivResolverTest.php b/tests/Unit/MetadataResolver/PixivResolverTest.php index 41fc7cb..df5e83a 100644 --- a/tests/Unit/MetadataResolver/PixivResolverTest.php +++ b/tests/Unit/MetadataResolver/PixivResolverTest.php @@ -65,4 +65,20 @@ class PixivResolverTest extends TestCase $this->assertSame('https://www.pixiv.net/ajax/illust/46713544', (string) $this->handler->getLastRequest()->getUri()); } } + + public function testArtworkUrl() + { + $responseText = file_get_contents(__DIR__ . '/../../fixture/Pixiv/illust.json'); + + $this->createResolver(PixivResolver::class, $responseText); + + $metadata = $this->resolver->resolve('https://www.pixiv.net/artworks/68188073'); + $this->assertEquals('coffee break', $metadata->title); + $this->assertEquals('投稿者: 裕' . PHP_EOL, $metadata->description); + $this->assertEquals('https://i.pixiv.cat/img-master/img/2018/04/12/00/01/28/68188073_p0_master1200.jpg', $metadata->image); + $this->assertEquals(['オリジナル', 'カフェ', '眼鏡', 'イヤホン', 'ぱっつん', '艶ぼくろ', '眼鏡っ娘', 'オリジナル5000users入り'], $metadata->tags); + if ($this->shouldUseMock()) { + $this->assertSame('https://www.pixiv.net/ajax/illust/68188073', (string) $this->handler->getLastRequest()->getUri()); + } + } }