Guzzle\Clientをモッカブルにする
This commit is contained in:
		@@ -21,7 +21,8 @@ class LinkCollector
 | 
			
		||||
    /**
 | 
			
		||||
     * Create the event listener.
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     * @param Formatter $formatter
 | 
			
		||||
     * @param MetadataResolver $metadataResolver
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct(Formatter $formatter, MetadataResolver $metadataResolver)
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -3,16 +3,30 @@
 | 
			
		||||
namespace App\MetadataResolver;
 | 
			
		||||
 | 
			
		||||
use Carbon\Carbon;
 | 
			
		||||
use GuzzleHttp\Client;
 | 
			
		||||
 | 
			
		||||
class CienResolver extends MetadataResolver
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @var Client
 | 
			
		||||
     */
 | 
			
		||||
    private $client;
 | 
			
		||||
    /**
 | 
			
		||||
     * @var OGPResolver
 | 
			
		||||
     */
 | 
			
		||||
    private $ogpResolver;
 | 
			
		||||
 | 
			
		||||
    public function __construct(Client $client, OGPResolver $ogpResolver)
 | 
			
		||||
    {
 | 
			
		||||
        $this->client = $client;
 | 
			
		||||
        $this->ogpResolver = $ogpResolver;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function resolve(string $url): Metadata
 | 
			
		||||
    {
 | 
			
		||||
        $client = new \GuzzleHttp\Client();
 | 
			
		||||
        $res = $client->get($url);
 | 
			
		||||
        $res = $this->client->get($url);
 | 
			
		||||
        if ($res->getStatusCode() === 200) {
 | 
			
		||||
            $ogpResolver = new OGPResolver();
 | 
			
		||||
            $metadata = $ogpResolver->parse($res->getBody());
 | 
			
		||||
            $metadata = $this->ogpResolver->parse($res->getBody());
 | 
			
		||||
 | 
			
		||||
            // 画像URLから有効期限の起点を拾う
 | 
			
		||||
            parse_str(parse_url($metadata->image, PHP_URL_QUERY), $params);
 | 
			
		||||
 
 | 
			
		||||
@@ -2,16 +2,31 @@
 | 
			
		||||
 | 
			
		||||
namespace App\MetadataResolver;
 | 
			
		||||
 | 
			
		||||
use GuzzleHttp\Client;
 | 
			
		||||
 | 
			
		||||
class DLsiteResolver implements Resolver
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @var Client
 | 
			
		||||
     */
 | 
			
		||||
    private $client;
 | 
			
		||||
    /**
 | 
			
		||||
     * @var OGPResolver
 | 
			
		||||
     */
 | 
			
		||||
    private $ogpResolver;
 | 
			
		||||
 | 
			
		||||
    public function __construct(Client $client, OGPResolver $ogpResolver)
 | 
			
		||||
    {
 | 
			
		||||
        $this->client = $client;
 | 
			
		||||
        $this->ogpResolver = $ogpResolver;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function resolve(string $url): Metadata
 | 
			
		||||
    {
 | 
			
		||||
        $client = new \GuzzleHttp\Client();
 | 
			
		||||
        $res = $client->get($url);
 | 
			
		||||
        $res = $this->client->get($url);
 | 
			
		||||
        if ($res->getStatusCode() === 200) {
 | 
			
		||||
            $ogpResolver = new OGPResolver();
 | 
			
		||||
            $metadata = $ogpResolver->parse($res->getBody());
 | 
			
		||||
            $metadata->image =  str_replace('img_sam.jpg', 'img_main.jpg', $metadata->image);
 | 
			
		||||
            $metadata = $this->ogpResolver->parse($res->getBody());
 | 
			
		||||
            $metadata->image = str_replace('img_sam.jpg', 'img_main.jpg', $metadata->image);
 | 
			
		||||
 | 
			
		||||
            return $metadata;
 | 
			
		||||
        } else {
 | 
			
		||||
 
 | 
			
		||||
@@ -2,15 +2,30 @@
 | 
			
		||||
 | 
			
		||||
namespace App\MetadataResolver;
 | 
			
		||||
 | 
			
		||||
use GuzzleHttp\Client;
 | 
			
		||||
 | 
			
		||||
class DeviantArtResolver implements Resolver
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @var Client
 | 
			
		||||
     */
 | 
			
		||||
    private $client;
 | 
			
		||||
    /**
 | 
			
		||||
     * @var OGPResolver
 | 
			
		||||
     */
 | 
			
		||||
    private $ogpResolver;
 | 
			
		||||
 | 
			
		||||
    public function __construct(Client $client, OGPResolver $ogpResolver)
 | 
			
		||||
    {
 | 
			
		||||
        $this->client = $client;
 | 
			
		||||
        $this->ogpResolver = $ogpResolver;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function resolve(string $url): Metadata
 | 
			
		||||
    {
 | 
			
		||||
        $client = new \GuzzleHttp\Client();
 | 
			
		||||
        $res = $client->get($url);
 | 
			
		||||
        $res = $this->client->get($url);
 | 
			
		||||
        if ($res->getStatusCode() === 200) {
 | 
			
		||||
            $ogpResolver = new OGPResolver();
 | 
			
		||||
            $metadata = $ogpResolver->parse($res->getBody());
 | 
			
		||||
            $metadata = $this->ogpResolver->parse($res->getBody());
 | 
			
		||||
 | 
			
		||||
            $dom = new \DOMDocument();
 | 
			
		||||
            @$dom->loadHTML(mb_convert_encoding($res->getBody(), 'HTML-ENTITIES', 'UTF-8'));
 | 
			
		||||
 
 | 
			
		||||
@@ -2,20 +2,33 @@
 | 
			
		||||
 | 
			
		||||
namespace App\MetadataResolver;
 | 
			
		||||
 | 
			
		||||
use GuzzleHttp\Client;
 | 
			
		||||
use Illuminate\Support\Facades\Log;
 | 
			
		||||
 | 
			
		||||
class FantiaResolver implements Resolver
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @var Client
 | 
			
		||||
     */
 | 
			
		||||
    private $client;
 | 
			
		||||
    /**
 | 
			
		||||
     * @var OGPResolver
 | 
			
		||||
     */
 | 
			
		||||
    private $ogpResolver;
 | 
			
		||||
 | 
			
		||||
    public function __construct(Client $client, OGPResolver $ogpResolver)
 | 
			
		||||
    {
 | 
			
		||||
        $this->client = $client;
 | 
			
		||||
        $this->ogpResolver = $ogpResolver;
 | 
			
		||||
    }
 | 
			
		||||
    public function resolve(string $url): Metadata
 | 
			
		||||
    {
 | 
			
		||||
        preg_match("~\d+~", $url, $match);
 | 
			
		||||
        $postId = $match[0];
 | 
			
		||||
 | 
			
		||||
        $client = new \GuzzleHttp\Client();
 | 
			
		||||
        $res = $client->get($url);
 | 
			
		||||
        $res = $this->client->get($url);
 | 
			
		||||
        if ($res->getStatusCode() === 200) {
 | 
			
		||||
            $ogpResolver = new OGPResolver();
 | 
			
		||||
            $metadata = $ogpResolver->parse($res->getBody());
 | 
			
		||||
            $metadata = $this->ogpResolver->parse($res->getBody());
 | 
			
		||||
 | 
			
		||||
            $dom = new \DOMDocument();
 | 
			
		||||
            @$dom->loadHTML(mb_convert_encoding($res->getBody(), 'HTML-ENTITIES', 'UTF-8'));
 | 
			
		||||
 
 | 
			
		||||
@@ -2,16 +2,31 @@
 | 
			
		||||
 | 
			
		||||
namespace App\MetadataResolver;
 | 
			
		||||
 | 
			
		||||
use GuzzleHttp\Client;
 | 
			
		||||
 | 
			
		||||
class FanzaResolver implements Resolver
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @var Client
 | 
			
		||||
     */
 | 
			
		||||
    private $client;
 | 
			
		||||
    /**
 | 
			
		||||
     * @var OGPResolver
 | 
			
		||||
     */
 | 
			
		||||
    private $ogpResolver;
 | 
			
		||||
 | 
			
		||||
    public function __construct(Client $client, OGPResolver $ogpResolver)
 | 
			
		||||
    {
 | 
			
		||||
        $this->client = $client;
 | 
			
		||||
        $this->ogpResolver = $ogpResolver;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function resolve(string $url): Metadata
 | 
			
		||||
    {
 | 
			
		||||
        $client = new \GuzzleHttp\Client();
 | 
			
		||||
        $res = $client->get($url);
 | 
			
		||||
        $res = $this->client->get($url);
 | 
			
		||||
        if ($res->getStatusCode() === 200) {
 | 
			
		||||
            $ogpResolver = new OGPResolver();
 | 
			
		||||
            $metadata = $ogpResolver->parse($res->getBody());
 | 
			
		||||
            $metadata->image =  preg_replace("~(pr|ps)\.jpg$~", 'pl.jpg', $metadata->image);
 | 
			
		||||
            $metadata = $this->ogpResolver->parse($res->getBody());
 | 
			
		||||
            $metadata->image = preg_replace("~(pr|ps)\.jpg$~", 'pl.jpg', $metadata->image);
 | 
			
		||||
 | 
			
		||||
            return $metadata;
 | 
			
		||||
        } else {
 | 
			
		||||
 
 | 
			
		||||
@@ -2,12 +2,24 @@
 | 
			
		||||
 | 
			
		||||
namespace App\MetadataResolver;
 | 
			
		||||
 | 
			
		||||
use GuzzleHttp\Client;
 | 
			
		||||
 | 
			
		||||
class IwaraResolver implements Resolver
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @var Client
 | 
			
		||||
     */
 | 
			
		||||
    private $client;
 | 
			
		||||
 | 
			
		||||
    public function __construct(Client $client)
 | 
			
		||||
    {
 | 
			
		||||
        $this->client = $client;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function resolve(string $url): Metadata
 | 
			
		||||
    {
 | 
			
		||||
        $client = new \GuzzleHttp\Client();
 | 
			
		||||
        $res = $client->get($url);
 | 
			
		||||
        $res = $this->client->get($url);
 | 
			
		||||
 | 
			
		||||
        if ($res->getStatusCode() === 200) {
 | 
			
		||||
            $dom = new \DOMDocument();
 | 
			
		||||
            @$dom->loadHTML(mb_convert_encoding($res->getBody(), 'HTML-ENTITIES', 'UTF-8'));
 | 
			
		||||
 
 | 
			
		||||
@@ -2,8 +2,20 @@
 | 
			
		||||
 | 
			
		||||
namespace App\MetadataResolver;
 | 
			
		||||
 | 
			
		||||
use GuzzleHttp\Client;
 | 
			
		||||
 | 
			
		||||
class KomifloResolver implements Resolver
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @var Client
 | 
			
		||||
     */
 | 
			
		||||
    private $client;
 | 
			
		||||
 | 
			
		||||
    public function __construct(Client $client)
 | 
			
		||||
    {
 | 
			
		||||
        $this->client = $client;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function resolve(string $url): Metadata
 | 
			
		||||
    {
 | 
			
		||||
        if (preg_match('~komiflo\.com(?:/#!)?/comics/(\\d+)~', $url, $matches) !== 1) {
 | 
			
		||||
@@ -11,8 +23,7 @@ class KomifloResolver implements Resolver
 | 
			
		||||
        }
 | 
			
		||||
        $id = $matches[1];
 | 
			
		||||
 | 
			
		||||
        $client = new \GuzzleHttp\Client();
 | 
			
		||||
        $res = $client->get('https://api.komiflo.com/content/id/' . $id);
 | 
			
		||||
        $res = $this->client->get('https://api.komiflo.com/content/id/' . $id);
 | 
			
		||||
        if ($res->getStatusCode() === 200) {
 | 
			
		||||
            $json = json_decode($res->getBody()->getContents(), true);
 | 
			
		||||
            $metadata = new Metadata();
 | 
			
		||||
 
 | 
			
		||||
@@ -2,19 +2,33 @@
 | 
			
		||||
 | 
			
		||||
namespace App\MetadataResolver;
 | 
			
		||||
 | 
			
		||||
use GuzzleHttp\Client;
 | 
			
		||||
use GuzzleHttp\Cookie\CookieJar;
 | 
			
		||||
 | 
			
		||||
class MelonbooksResolver implements Resolver
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @var Client
 | 
			
		||||
     */
 | 
			
		||||
    private $client;
 | 
			
		||||
    /**
 | 
			
		||||
     * @var OGPResolver
 | 
			
		||||
     */
 | 
			
		||||
    private $ogpResolver;
 | 
			
		||||
 | 
			
		||||
    public function __construct(Client $client, OGPResolver $ogpResolver)
 | 
			
		||||
    {
 | 
			
		||||
        $this->client = $client;
 | 
			
		||||
        $this->ogpResolver = $ogpResolver;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function resolve(string $url): Metadata
 | 
			
		||||
    {
 | 
			
		||||
        $cookieJar = CookieJar::fromArray(['AUTH_ADULT' => '1'], 'www.melonbooks.co.jp');
 | 
			
		||||
 | 
			
		||||
        $client = new \GuzzleHttp\Client();
 | 
			
		||||
        $res = $client->get($url, ['cookies' => $cookieJar]);
 | 
			
		||||
        $res = $this->client->get($url, ['cookies' => $cookieJar]);
 | 
			
		||||
        if ($res->getStatusCode() === 200) {
 | 
			
		||||
            $ogpResolver = new OGPResolver();
 | 
			
		||||
            $metadata = $ogpResolver->parse($res->getBody());
 | 
			
		||||
            $metadata = $this->ogpResolver->parse($res->getBody());
 | 
			
		||||
 | 
			
		||||
            // censoredフラグの除去
 | 
			
		||||
            if (mb_strpos($metadata->image, '&c=1') !== false) {
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,8 @@ class MetadataResolver implements Resolver
 | 
			
		||||
    {
 | 
			
		||||
        foreach ($this->rules as $pattern => $class) {
 | 
			
		||||
            if (preg_match($pattern, $url) === 1) {
 | 
			
		||||
                $resolver = new $class();
 | 
			
		||||
                /** @var Resolver $resolver */
 | 
			
		||||
                $resolver = app($class);
 | 
			
		||||
 | 
			
		||||
                return $resolver->resolve($url);
 | 
			
		||||
            }
 | 
			
		||||
@@ -49,13 +50,14 @@ class MetadataResolver implements Resolver
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (isset($this->defaultResolver)) {
 | 
			
		||||
            $resolver = new $this->defaultResolver();
 | 
			
		||||
            /** @var Resolver $resolver */
 | 
			
		||||
            $resolver = app($this->defaultResolver);
 | 
			
		||||
            return $resolver->resolve($url);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        throw new \UnexpectedValueException('URL not matched.');
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    public function resolveWithAcceptHeader(string $url): ?Metadata
 | 
			
		||||
    {
 | 
			
		||||
        try {
 | 
			
		||||
 
 | 
			
		||||
@@ -2,19 +2,33 @@
 | 
			
		||||
 | 
			
		||||
namespace App\MetadataResolver;
 | 
			
		||||
 | 
			
		||||
use GuzzleHttp\Client;
 | 
			
		||||
use GuzzleHttp\Cookie\CookieJar;
 | 
			
		||||
 | 
			
		||||
class NarouResolver implements Resolver
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @var Client
 | 
			
		||||
     */
 | 
			
		||||
    private $client;
 | 
			
		||||
    /**
 | 
			
		||||
     * @var OGPResolver
 | 
			
		||||
     */
 | 
			
		||||
    private $ogpResolver;
 | 
			
		||||
 | 
			
		||||
    public function __construct(Client $client, OGPResolver $ogpResolver)
 | 
			
		||||
    {
 | 
			
		||||
        $this->client = $client;
 | 
			
		||||
        $this->ogpResolver = $ogpResolver;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function resolve(string $url): Metadata
 | 
			
		||||
    {
 | 
			
		||||
        $cookieJar = CookieJar::fromArray(['over18' => 'yes'], '.syosetu.com');
 | 
			
		||||
 | 
			
		||||
        $client = new \GuzzleHttp\Client();
 | 
			
		||||
        $res = $client->get($url, ['cookies' => $cookieJar]);
 | 
			
		||||
        $res = $this->client->get($url, ['cookies' => $cookieJar]);
 | 
			
		||||
        if ($res->getStatusCode() === 200) {
 | 
			
		||||
            $ogpResolver = new OGPResolver();
 | 
			
		||||
            $metadata = $ogpResolver->parse($res->getBody());
 | 
			
		||||
            $metadata = $this->ogpResolver->parse($res->getBody());
 | 
			
		||||
            $metadata->description = '';
 | 
			
		||||
 | 
			
		||||
            $dom = new \DOMDocument();
 | 
			
		||||
 
 | 
			
		||||
@@ -2,15 +2,30 @@
 | 
			
		||||
 | 
			
		||||
namespace App\MetadataResolver;
 | 
			
		||||
 | 
			
		||||
use GuzzleHttp\Client;
 | 
			
		||||
 | 
			
		||||
class NicoSeigaResolver implements Resolver
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @var Client
 | 
			
		||||
     */
 | 
			
		||||
    private $client;
 | 
			
		||||
    /**
 | 
			
		||||
     * @var OGPResolver
 | 
			
		||||
     */
 | 
			
		||||
    private $ogpResolver;
 | 
			
		||||
 | 
			
		||||
    public function __construct(Client $client, OGPResolver $ogpResolver)
 | 
			
		||||
    {
 | 
			
		||||
        $this->client = $client;
 | 
			
		||||
        $this->ogpResolver = $ogpResolver;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function resolve(string $url): Metadata
 | 
			
		||||
    {
 | 
			
		||||
        $client = new \GuzzleHttp\Client();
 | 
			
		||||
        $res = $client->get($url);
 | 
			
		||||
        $res = $this->client->get($url);
 | 
			
		||||
        if ($res->getStatusCode() === 200) {
 | 
			
		||||
            $ogpResolver = new OGPResolver();
 | 
			
		||||
            $metadata = $ogpResolver->parse($res->getBody());
 | 
			
		||||
            $metadata = $this->ogpResolver->parse($res->getBody());
 | 
			
		||||
 | 
			
		||||
            // ページURLからサムネイルURLに変換
 | 
			
		||||
            preg_match('~http://(?:(?:sp\\.)?seiga\\.nicovideo\\.jp/seiga(?:/#!)?|nico\\.ms)/im(\\d+)~', $url, $matches);
 | 
			
		||||
 
 | 
			
		||||
@@ -2,8 +2,18 @@
 | 
			
		||||
 | 
			
		||||
namespace App\MetadataResolver;
 | 
			
		||||
 | 
			
		||||
use GuzzleHttp\Client;
 | 
			
		||||
 | 
			
		||||
class NijieResolver implements Resolver
 | 
			
		||||
{
 | 
			
		||||
    /** @var Client */
 | 
			
		||||
    protected $client;
 | 
			
		||||
 | 
			
		||||
    public function __construct(Client $client)
 | 
			
		||||
    {
 | 
			
		||||
        $this->client = $client;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function resolve(string $url): Metadata
 | 
			
		||||
    {
 | 
			
		||||
        if (mb_strpos($url, '//sp.nijie.info') !== false) {
 | 
			
		||||
@@ -13,7 +23,7 @@ class NijieResolver implements Resolver
 | 
			
		||||
            $url = preg_replace('~view_popup\.php~', 'view.php', $url);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $client = new \GuzzleHttp\Client();
 | 
			
		||||
        $client = $this->client;
 | 
			
		||||
        $res = $client->get($url);
 | 
			
		||||
        if ($res->getStatusCode() === 200) {
 | 
			
		||||
            $ogpResolver = new OGPResolver();
 | 
			
		||||
 
 | 
			
		||||
@@ -2,12 +2,23 @@
 | 
			
		||||
 | 
			
		||||
namespace App\MetadataResolver;
 | 
			
		||||
 | 
			
		||||
use GuzzleHttp\Client;
 | 
			
		||||
 | 
			
		||||
class OGPResolver implements Resolver, Parser
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @var Client
 | 
			
		||||
     */
 | 
			
		||||
    private $client;
 | 
			
		||||
 | 
			
		||||
    public function __construct(Client $client)
 | 
			
		||||
    {
 | 
			
		||||
        $this->client = $client;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function resolve(string $url): Metadata
 | 
			
		||||
    {
 | 
			
		||||
        $client = new \GuzzleHttp\Client();
 | 
			
		||||
        $res = $client->get($url);
 | 
			
		||||
        $res = $this->client->get($url);
 | 
			
		||||
        if ($res->getStatusCode() === 200) {
 | 
			
		||||
            return $this->parse($res->getBody());
 | 
			
		||||
        } else {
 | 
			
		||||
 
 | 
			
		||||
@@ -3,19 +3,33 @@
 | 
			
		||||
namespace App\MetadataResolver;
 | 
			
		||||
 | 
			
		||||
use Carbon\Carbon;
 | 
			
		||||
use GuzzleHttp\Client;
 | 
			
		||||
 | 
			
		||||
class PatreonResolver implements Resolver
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @var Client
 | 
			
		||||
     */
 | 
			
		||||
    private $client;
 | 
			
		||||
    /**
 | 
			
		||||
     * @var OGPResolver
 | 
			
		||||
     */
 | 
			
		||||
    private $ogpResolver;
 | 
			
		||||
 | 
			
		||||
    public function __construct(Client $client, OGPResolver $ogpResolver)
 | 
			
		||||
    {
 | 
			
		||||
        $this->client = $client;
 | 
			
		||||
        $this->ogpResolver = $ogpResolver;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function resolve(string $url): Metadata
 | 
			
		||||
    {
 | 
			
		||||
        $client = new \GuzzleHttp\Client();
 | 
			
		||||
        $res = $client->get($url);
 | 
			
		||||
        $res = $this->client->get($url);
 | 
			
		||||
        if ($res->getStatusCode() === 200) {
 | 
			
		||||
            $ogpResolver = new OGPResolver();
 | 
			
		||||
            $metadata = $ogpResolver->parse($res->getBody());
 | 
			
		||||
            $metadata = $this->ogpResolver->parse($res->getBody());
 | 
			
		||||
 | 
			
		||||
            parse_str(parse_url($metadata->image, PHP_URL_QUERY), $temp);
 | 
			
		||||
            $expires_at_unixtime = $temp["token-time"];
 | 
			
		||||
            $expires_at_unixtime = $temp['token-time'];
 | 
			
		||||
            $expires_at = Carbon::createFromTimestamp($expires_at_unixtime);
 | 
			
		||||
 | 
			
		||||
            $metadata->expires_at = $expires_at;
 | 
			
		||||
 
 | 
			
		||||
@@ -2,8 +2,25 @@
 | 
			
		||||
 | 
			
		||||
namespace App\MetadataResolver;
 | 
			
		||||
 | 
			
		||||
use GuzzleHttp\Client;
 | 
			
		||||
 | 
			
		||||
class PixivResolver implements Resolver
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @var Client
 | 
			
		||||
     */
 | 
			
		||||
    private $client;
 | 
			
		||||
    /**
 | 
			
		||||
     * @var OGPResolver
 | 
			
		||||
     */
 | 
			
		||||
    private $ogpResolver;
 | 
			
		||||
 | 
			
		||||
    public function __construct(Client $client, OGPResolver $ogpResolver)
 | 
			
		||||
    {
 | 
			
		||||
        $this->client = $client;
 | 
			
		||||
        $this->ogpResolver = $ogpResolver;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * サムネイル画像 URL から最大長辺 1200px の画像 URL に変換する
 | 
			
		||||
     *
 | 
			
		||||
@@ -45,11 +62,9 @@ class PixivResolver implements Resolver
 | 
			
		||||
            $url = preg_replace('~mode=manga(_big)?~', 'mode=medium', $url);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $client = new \GuzzleHttp\Client();
 | 
			
		||||
        $res = $client->get($url);
 | 
			
		||||
        $res = $this->client->get($url);
 | 
			
		||||
        if ($res->getStatusCode() === 200) {
 | 
			
		||||
            $ogpResolver = new OGPResolver();
 | 
			
		||||
            $metadata = $ogpResolver->parse($res->getBody());
 | 
			
		||||
            $metadata = $this->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);
 | 
			
		||||
            $illustThumbnailUrl = $match[0];
 | 
			
		||||
 
 | 
			
		||||
@@ -2,20 +2,34 @@
 | 
			
		||||
 | 
			
		||||
namespace App\MetadataResolver;
 | 
			
		||||
 | 
			
		||||
use GuzzleHttp\Client;
 | 
			
		||||
use GuzzleHttp\Cookie\CookieJar;
 | 
			
		||||
 | 
			
		||||
class ToranoanaResolver implements Resolver
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @var Client
 | 
			
		||||
     */
 | 
			
		||||
    private $client;
 | 
			
		||||
    /**
 | 
			
		||||
     * @var OGPResolver
 | 
			
		||||
     */
 | 
			
		||||
    private $ogpResolver;
 | 
			
		||||
 | 
			
		||||
    public function __construct(Client $client, OGPResolver $ogpResolver)
 | 
			
		||||
    {
 | 
			
		||||
        $this->client = $client;
 | 
			
		||||
        $this->ogpResolver = $ogpResolver;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function resolve(string $url): Metadata
 | 
			
		||||
    {
 | 
			
		||||
        $cookieJar = CookieJar::fromArray(['adflg' => '0'], 'ec.toranoana.jp');
 | 
			
		||||
 | 
			
		||||
        $client = new \GuzzleHttp\Client();
 | 
			
		||||
        $res = $client->get($url, ['cookies' => $cookieJar]);
 | 
			
		||||
        $res = $this->client->get($url, ['cookies' => $cookieJar]);
 | 
			
		||||
        if ($res->getStatusCode() === 200) {
 | 
			
		||||
            $ogpResolver = new OGPResolver();
 | 
			
		||||
 | 
			
		||||
            return $ogpResolver->parse($res->getBody());
 | 
			
		||||
            return $this->ogpResolver->parse($res->getBody());
 | 
			
		||||
        } else {
 | 
			
		||||
            throw new \RuntimeException("{$res->getStatusCode()}: $url");
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user