pixivのOGP画像で常にプロキシURLを使用する (#92)
This commit is contained in:
parent
116dd3b798
commit
cedee0a20e
@ -8,6 +8,7 @@ class PixivResolver implements Resolver
|
|||||||
* サムネイル画像 URL から最大長辺 1200px の画像 URL に変換する
|
* サムネイル画像 URL から最大長辺 1200px の画像 URL に変換する
|
||||||
*
|
*
|
||||||
* @param string $thumbnailUrl サムネイル画像 URL
|
* @param string $thumbnailUrl サムネイル画像 URL
|
||||||
|
*
|
||||||
* @return string 1200px の画像 URL
|
* @return string 1200px の画像 URL
|
||||||
*/
|
*/
|
||||||
public function thumbnailToMasterUrl(string $thumbnailUrl): string
|
public function thumbnailToMasterUrl(string $thumbnailUrl): string
|
||||||
@ -23,6 +24,7 @@ class PixivResolver implements Resolver
|
|||||||
* HUGE THANKS TO PIXIV.CAT!
|
* HUGE THANKS TO PIXIV.CAT!
|
||||||
*
|
*
|
||||||
* @param string $pixivUrl i.pximg URL
|
* @param string $pixivUrl i.pximg URL
|
||||||
|
*
|
||||||
* @return string i.pixiv.cat URL
|
* @return string i.pixiv.cat URL
|
||||||
*/
|
*/
|
||||||
public function proxize(string $pixivUrl): string
|
public function proxize(string $pixivUrl): string
|
||||||
@ -41,52 +43,24 @@ class PixivResolver implements Resolver
|
|||||||
|
|
||||||
// 未ログインでは漫画ページを開けないため、URL を作品ページに変換する
|
// 未ログインでは漫画ページを開けないため、URL を作品ページに変換する
|
||||||
$url = preg_replace('~mode=manga(_big)?~', 'mode=medium', $url);
|
$url = preg_replace('~mode=manga(_big)?~', 'mode=medium', $url);
|
||||||
|
}
|
||||||
|
|
||||||
$client = new \GuzzleHttp\Client();
|
$client = new \GuzzleHttp\Client();
|
||||||
$res = $client->get($url);
|
$res = $client->get($url);
|
||||||
if ($res->getStatusCode() === 200) {
|
if ($res->getStatusCode() === 200) {
|
||||||
$ogpResolver = new OGPResolver();
|
$ogpResolver = new OGPResolver();
|
||||||
$metadata = $ogpResolver->parse($res->getBody());
|
$metadata = $ogpResolver->parse($res->getBody());
|
||||||
|
|
||||||
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);
|
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];
|
$illustThumbnailUrl = $match[0];
|
||||||
|
|
||||||
$illustUrl = $this->thumbnailToMasterUrl($illustThumbnailUrl);
|
$illustUrl = $this->thumbnailToMasterUrl($illustThumbnailUrl);
|
||||||
|
|
||||||
// 指定ページに変換
|
$metadata->image = $this->proxize($illustUrl);
|
||||||
$illustUrl = str_replace('p0_master', "p{$page}_master", $illustUrl);
|
|
||||||
|
|
||||||
$metadata->image = $this->proxize($illustUrl);
|
return $metadata;
|
||||||
|
|
||||||
return $metadata;
|
|
||||||
} else {
|
|
||||||
throw new \RuntimeException("{$res->getStatusCode()}: $url");
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
$client = new \GuzzleHttp\Client();
|
throw new \RuntimeException("{$res->getStatusCode()}: $url");
|
||||||
$res = $client->get($url);
|
|
||||||
if ($res->getStatusCode() === 200) {
|
|
||||||
$ogpResolver = new OGPResolver();
|
|
||||||
$metadata = $ogpResolver->parse($res->getBody());
|
|
||||||
|
|
||||||
// OGP がデフォルト画像であるようならなんとかして画像を取得する
|
|
||||||
if (strpos($metadata->image, 'pixiv_logo.gif') || strpos($metadata->image, 'pictures.jpg')) {
|
|
||||||
|
|
||||||
// 作品ページの場合のみ対応
|
|
||||||
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];
|
|
||||||
|
|
||||||
$illustUrl = $this->thumbnailToMasterUrl($illustThumbnailUrl);
|
|
||||||
|
|
||||||
$metadata->image = $this->proxize($illustUrl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $metadata;
|
|
||||||
} else {
|
|
||||||
throw new \RuntimeException("{$res->getStatusCode()}: $url");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user