From c417dabff29b66377f79c590859c6f4283d680e7 Mon Sep 17 00:00:00 2001 From: unarist Date: Mon, 4 Feb 2019 02:43:40 +0900 Subject: [PATCH] =?UTF-8?q?Pixiv=E3=81=AEmode=3Dmanga=E3=81=AB=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C=20(#79)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/MetadataResolver/PixivResolver.php | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/app/MetadataResolver/PixivResolver.php b/app/MetadataResolver/PixivResolver.php index ca5463c..41a8ba4 100644 --- a/app/MetadataResolver/PixivResolver.php +++ b/app/MetadataResolver/PixivResolver.php @@ -32,16 +32,15 @@ class PixivResolver implements Resolver public function resolve(string $url): Metadata { - preg_match("~illust_id=(\d+)~", parse_url($url)['query'], $match); - $illustId = $match[1]; + parse_str(parse_url($url, PHP_URL_QUERY), $params); + $illustId = $params['illust_id']; - // 漫画ページかつページ数あり - if (strpos(parse_url($url)['query'], 'mode=manga_big') && strpos(parse_url($url)['query'], 'page=')) { - preg_match("~page=(\d+)~", parse_url($url)['query'], $match); - $page = $match[1]; + // 漫画ページ(ページ数はmanga_bigならあるかも) + if ($params['mode'] === 'manga_big' || $params['mode'] === 'manga') { + $page = $params['page'] ?? 0; // 未ログインでは漫画ページを開けないため、URL を作品ページに変換する - $url = str_replace('mode=manga_big', 'mode=medium', $url); + $url = preg_replace('~mode=manga(_big)?~', 'mode=medium', $url); $client = new \GuzzleHttp\Client(); $res = $client->get($url); @@ -74,7 +73,7 @@ class PixivResolver implements Resolver if (strpos($metadata->image, 'pixiv_logo.gif') || strpos($metadata->image, 'pictures.jpg')) { // 作品ページの場合のみ対応 - if (strpos(parse_url($url)['query'], 'mode=medium')) { + if ($params['mode'] === 'medium') { preg_match("~https://i\.pximg\.net/c/128x128/img-master/img/\d{4}/\d{2}/\d{2}/\d{2}/\d{2}/\d{2}/{$illustId}(_p0)?_square1200\.jpg~", $res->getBody(), $match); $illustThumbnailUrl = $match[0];