リモートURLをリクエストするテストをトグれるモックに差し替える
This commit is contained in:
		
							
								
								
									
										53
									
								
								tests/Unit/MetadataResolver/CreateMockedResolver.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								tests/Unit/MetadataResolver/CreateMockedResolver.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | |||||||
|  | <?php | ||||||
|  |  | ||||||
|  | namespace Tests\Unit\MetadataResolver; | ||||||
|  |  | ||||||
|  | use App\MetadataResolver\Resolver; | ||||||
|  | use GuzzleHttp\Client; | ||||||
|  | use GuzzleHttp\Handler\MockHandler; | ||||||
|  | use GuzzleHttp\Psr7\Response; | ||||||
|  | use Monolog\Handler\AbstractHandler; | ||||||
|  |  | ||||||
|  | trait CreateMockedResolver | ||||||
|  | { | ||||||
|  |     /** | ||||||
|  |      * @var Resolver | ||||||
|  |      */ | ||||||
|  |     protected $resolver; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @var AbstractHandler | ||||||
|  |      */ | ||||||
|  |     protected $handler; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @param string $resolverClass | ||||||
|  |      * @param string $responseText | ||||||
|  |      * @param array $headers | ||||||
|  |      * @param int $status | ||||||
|  |      * @return Resolver | ||||||
|  |      */ | ||||||
|  |     protected function createResolver(string $resolverClass, string $responseText, array $headers = [], int $status = 200) | ||||||
|  |     { | ||||||
|  |         if (!$this->shouldUseMock()) { | ||||||
|  |             $this->resolver = app()->make($resolverClass); | ||||||
|  |  | ||||||
|  |             return $this->resolver; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         $headers += [ | ||||||
|  |             'content-type' => 'text/html', | ||||||
|  |         ]; | ||||||
|  |  | ||||||
|  |         $mockResponse = new Response($status, $headers, $responseText); | ||||||
|  |         $this->handler = new MockHandler([$mockResponse]); | ||||||
|  |         $client = new Client(['handler' => $this->handler]); | ||||||
|  |         $this->resolver = app()->make($resolverClass, ['client' => $client]); | ||||||
|  |         return $this->resolver; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     protected function shouldUseMock(): bool | ||||||
|  |     { | ||||||
|  |         return (bool)env('TEST_USE_HTTP_MOCK', true); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -7,95 +7,135 @@ use Tests\TestCase; | |||||||
|  |  | ||||||
| class NijieResolverTest extends TestCase | class NijieResolverTest extends TestCase | ||||||
| { | { | ||||||
|  |     use CreateMockedResolver; | ||||||
|  |  | ||||||
|  |     public function setUp() | ||||||
|  |     { | ||||||
|  |         parent::setUp(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     public function testStandardPicture() |     public function testStandardPicture() | ||||||
|     { |     { | ||||||
|         sleep(1); |         $responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testStandardPictureResponse.html'); | ||||||
|         $resolver = new NijieResolver(); |  | ||||||
|  |  | ||||||
|         $metadata = $resolver->resolve('https://nijie.info/view.php?id=66384'); |         $this->createResolver(NijieResolver::class, $responseText); | ||||||
|  |  | ||||||
|  |         $metadata = $this->resolver->resolve('https://nijie.info/view.php?id=66384'); | ||||||
|         $this->assertEquals('チンポップくんの日常ep.1「チンポップくんと釣り」 | ニジエ運営', $metadata->title); |         $this->assertEquals('チンポップくんの日常ep.1「チンポップくんと釣り」 | ニジエ運営', $metadata->title); | ||||||
|         $this->assertEquals("メールマガジン漫画のバックナンバー第一話です!\r\n最新話はメールマガジンより配信中です。", $metadata->description); |         $this->assertEquals("メールマガジン漫画のバックナンバー第一話です!\r\n最新話はメールマガジンより配信中です。", $metadata->description); | ||||||
|         $this->assertRegExp('/pic\d+\.nijie\.info/', $metadata->image); |         $this->assertRegExp('/pic\d+\.nijie\.info/', $metadata->image); | ||||||
|         $this->assertNotRegExp('~/diff/main/~', $metadata->image); |         $this->assertNotRegExp('~/diff/main/~', $metadata->image); | ||||||
|  |         if ($this->shouldUseMock()) { | ||||||
|  |             $this->assertSame('https://nijie.info/view.php?id=66384', (string)$this->handler->getLastRequest()->getUri()); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public function testMultiplePicture() |     public function testMultiplePicture() | ||||||
|     { |     { | ||||||
|         sleep(1); |         $responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testMultiplePictureResponse.html'); | ||||||
|         $resolver = new NijieResolver(); |  | ||||||
|  |  | ||||||
|         $metadata = $resolver->resolve('https://nijie.info/view.php?id=202707'); |         $this->createResolver(NijieResolver::class, $responseText); | ||||||
|  |  | ||||||
|  |         $metadata = $this->resolver->resolve('https://nijie.info/view.php?id=202707'); | ||||||
|         $this->assertEquals('ニジエ壁紙 | ニジエ運営', $metadata->title); |         $this->assertEquals('ニジエ壁紙 | ニジエ運営', $metadata->title); | ||||||
|         $this->assertEquals("ニジエのPCとiphone用(4.7inch推奨)の壁紙です。\r\n保存してご自由にお使いくださいませ。", $metadata->description); |         $this->assertEquals("ニジエのPCとiphone用(4.7inch推奨)の壁紙です。\r\n保存してご自由にお使いくださいませ。", $metadata->description); | ||||||
|         $this->assertRegExp('/pic\d+\.nijie\.info/', $metadata->image); |         $this->assertRegExp('/pic\d+\.nijie\.info/', $metadata->image); | ||||||
|         $this->assertNotRegExp('~/diff/main/~', $metadata->image); |         $this->assertNotRegExp('~/diff/main/~', $metadata->image); | ||||||
|  |         if ($this->shouldUseMock()) { | ||||||
|  |             $this->assertSame('https://nijie.info/view.php?id=202707', (string)$this->handler->getLastRequest()->getUri()); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public function testAnimationGif() |     public function testAnimationGif() | ||||||
|     { |     { | ||||||
|         sleep(1); |         $responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testAnimationGifResponse.html'); | ||||||
|         $resolver = new NijieResolver(); |  | ||||||
|  |  | ||||||
|         $metadata = $resolver->resolve('https://nijie.info/view.php?id=9537'); |         $this->createResolver(NijieResolver::class, $responseText); | ||||||
|  |  | ||||||
|  |         $metadata = $this->resolver->resolve('https://nijie.info/view.php?id=9537'); | ||||||
|         $this->assertEquals('ニジエがgifに対応したんだってね 奥さん | 黒末アプコ', $metadata->title); |         $this->assertEquals('ニジエがgifに対応したんだってね 奥さん | 黒末アプコ', $metadata->title); | ||||||
|         $this->assertEquals('アニメgifとか専門外なのでよくわかりませんでした', $metadata->description); |         $this->assertEquals('アニメgifとか専門外なのでよくわかりませんでした', $metadata->description); | ||||||
|         $this->assertRegExp('~/nijie\.info/pic/logo~', $metadata->image); |         $this->assertRegExp('~/nijie\.info/pic/logo~', $metadata->image); | ||||||
|  |         if ($this->shouldUseMock()) { | ||||||
|  |             $this->assertSame('https://nijie.info/view.php?id=9537', (string)$this->handler->getLastRequest()->getUri()); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public function testMp4Movie() |     public function testMp4Movie() | ||||||
|     { |     { | ||||||
|         sleep(1); |         $responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testMp4MovieResponse.html'); | ||||||
|         $resolver = new NijieResolver(); |  | ||||||
|  |  | ||||||
|         $metadata = $resolver->resolve('https://nijie.info/view.php?id=256283'); |         $this->createResolver(NijieResolver::class, $responseText); | ||||||
|  |  | ||||||
|  |         $metadata = $this->resolver->resolve('https://nijie.info/view.php?id=256283'); | ||||||
|         $this->assertEquals('てすと | ニジエ運営', $metadata->title); |         $this->assertEquals('てすと | ニジエ運営', $metadata->title); | ||||||
|         $this->assertEquals("H264動画てすと あとで消します\r\n\r\n今の所、H264コーデックのみ、出力時に音声なしにしないと投稿できません\r\n動画は勝手にループします", $metadata->description); |         $this->assertEquals("H264動画てすと あとで消します\r\n\r\n今の所、H264コーデックのみ、出力時に音声なしにしないと投稿できません\r\n動画は勝手にループします", $metadata->description); | ||||||
|         $this->assertRegExp('~/nijie\.info/pic/logo~', $metadata->image); |         $this->assertRegExp('~/nijie\.info/pic/logo~', $metadata->image); | ||||||
|  |         if ($this->shouldUseMock()) { | ||||||
|  |             $this->assertSame('https://nijie.info/view.php?id=256283', (string)$this->handler->getLastRequest()->getUri()); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public function testStandardPictureSp() |     public function testStandardPictureSp() | ||||||
|     { |     { | ||||||
|         sleep(1); |         $responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testStandardPictureResponse.html'); | ||||||
|         $resolver = new NijieResolver(); |  | ||||||
|  |  | ||||||
|         $metadata = $resolver->resolve('https://sp.nijie.info/view.php?id=66384'); |         $this->createResolver(NijieResolver::class, $responseText); | ||||||
|  |  | ||||||
|  |         $metadata = $this->resolver->resolve('https://sp.nijie.info/view.php?id=66384'); | ||||||
|         $this->assertEquals('チンポップくんの日常ep.1「チンポップくんと釣り」 | ニジエ運営', $metadata->title); |         $this->assertEquals('チンポップくんの日常ep.1「チンポップくんと釣り」 | ニジエ運営', $metadata->title); | ||||||
|         $this->assertEquals("メールマガジン漫画のバックナンバー第一話です!\r\n最新話はメールマガジンより配信中です。", $metadata->description); |         $this->assertEquals("メールマガジン漫画のバックナンバー第一話です!\r\n最新話はメールマガジンより配信中です。", $metadata->description); | ||||||
|         $this->assertRegExp('/pic\d+\.nijie\.info/', $metadata->image); |         $this->assertRegExp('/pic\d+\.nijie\.info/', $metadata->image); | ||||||
|         $this->assertNotRegExp('~/diff/main/~', $metadata->image); |         $this->assertNotRegExp('~/diff/main/~', $metadata->image); | ||||||
|  |         if ($this->shouldUseMock()) { | ||||||
|  |             $this->assertSame('https://nijie.info/view.php?id=66384', (string)$this->handler->getLastRequest()->getUri()); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public function testMultiplePictureSp() |     public function testMultiplePictureSp() | ||||||
|     { |     { | ||||||
|         sleep(1); |         $responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testMultiplePictureResponse.html'); | ||||||
|         $resolver = new NijieResolver(); |  | ||||||
|  |  | ||||||
|         $metadata = $resolver->resolve('https://sp.nijie.info/view.php?id=202707'); |         $this->createResolver(NijieResolver::class, $responseText); | ||||||
|  |  | ||||||
|  |         $metadata = $this->resolver->resolve('https://sp.nijie.info/view.php?id=202707'); | ||||||
|         $this->assertEquals('ニジエ壁紙 | ニジエ運営', $metadata->title); |         $this->assertEquals('ニジエ壁紙 | ニジエ運営', $metadata->title); | ||||||
|         $this->assertEquals("ニジエのPCとiphone用(4.7inch推奨)の壁紙です。\r\n保存してご自由にお使いくださいませ。", $metadata->description); |         $this->assertEquals("ニジエのPCとiphone用(4.7inch推奨)の壁紙です。\r\n保存してご自由にお使いくださいませ。", $metadata->description); | ||||||
|         $this->assertRegExp('/pic\d+\.nijie\.info/', $metadata->image); |         $this->assertRegExp('/pic\d+\.nijie\.info/', $metadata->image); | ||||||
|         $this->assertNotRegExp('~/diff/main/~', $metadata->image); |         $this->assertNotRegExp('~/diff/main/~', $metadata->image); | ||||||
|  |         if ($this->shouldUseMock()) { | ||||||
|  |             $this->assertSame('https://nijie.info/view.php?id=202707', (string)$this->handler->getLastRequest()->getUri()); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public function testAnimationGifSp() |     public function testAnimationGifSp() | ||||||
|     { |     { | ||||||
|         sleep(1); |         $responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testAnimationGifResponse.html'); | ||||||
|         $resolver = new NijieResolver(); |  | ||||||
|  |  | ||||||
|         $metadata = $resolver->resolve('https://nijie.info/view.php?id=9537'); |         $this->createResolver(NijieResolver::class, $responseText); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |         $metadata = $this->resolver->resolve('https://nijie.info/view.php?id=9537'); | ||||||
|         $this->assertEquals('ニジエがgifに対応したんだってね 奥さん | 黒末アプコ', $metadata->title); |         $this->assertEquals('ニジエがgifに対応したんだってね 奥さん | 黒末アプコ', $metadata->title); | ||||||
|         $this->assertEquals('アニメgifとか専門外なのでよくわかりませんでした', $metadata->description); |         $this->assertEquals('アニメgifとか専門外なのでよくわかりませんでした', $metadata->description); | ||||||
|         $this->assertRegExp('~/nijie\.info/pic/logo~', $metadata->image); |         $this->assertRegExp('~/nijie\.info/pic/logo~', $metadata->image); | ||||||
|  |         if ($this->shouldUseMock()) { | ||||||
|  |             $this->assertSame('https://nijie.info/view.php?id=9537', (string)$this->handler->getLastRequest()->getUri()); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public function testMp4MovieSp() |     public function testMp4MovieSp() | ||||||
|     { |     { | ||||||
|         sleep(1); |         $responseText = file_get_contents(__DIR__ . '/../../fixture/Nijie/testMp4MovieResponse.html'); | ||||||
|         $resolver = new NijieResolver(); |  | ||||||
|  |  | ||||||
|         $metadata = $resolver->resolve('https://sp.nijie.info/view.php?id=256283'); |         $this->createResolver(NijieResolver::class, $responseText); | ||||||
|  |  | ||||||
|  |         $metadata = $this->resolver->resolve('https://sp.nijie.info/view.php?id=256283'); | ||||||
|         $this->assertEquals('てすと | ニジエ運営', $metadata->title); |         $this->assertEquals('てすと | ニジエ運営', $metadata->title); | ||||||
|         $this->assertEquals("H264動画てすと あとで消します\r\n\r\n今の所、H264コーデックのみ、出力時に音声なしにしないと投稿できません\r\n動画は勝手にループします", $metadata->description); |         $this->assertEquals("H264動画てすと あとで消します\r\n\r\n今の所、H264コーデックのみ、出力時に音声なしにしないと投稿できません\r\n動画は勝手にループします", $metadata->description); | ||||||
|         $this->assertRegExp('~/nijie\.info/pic/logo~', $metadata->image); |         $this->assertRegExp('~/nijie\.info/pic/logo~', $metadata->image); | ||||||
|  |         if ($this->shouldUseMock()) { | ||||||
|  |             $this->assertSame('https://nijie.info/view.php?id=256283', (string)$this->handler->getLastRequest()->getUri()); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -8,18 +8,45 @@ use Tests\TestCase; | |||||||
|  |  | ||||||
| class OGPResolverTest extends TestCase | class OGPResolverTest extends TestCase | ||||||
| { | { | ||||||
|  |     use CreateMockedResolver; | ||||||
|  |  | ||||||
|     public function testMissingUrl() |     public function testMissingUrl() | ||||||
|     { |     { | ||||||
|         $resolver = new OGPResolver(); |         $this->createResolver(OGPResolver::class, '', [], 404); | ||||||
|  |  | ||||||
|         $this->expectException(ClientException::class); |         $this->expectException(\RuntimeException::class); | ||||||
|         $resolver->resolve('http://example.com/404'); |         $this->resolver->resolve('http://example.com/404'); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public function testResolve() |     public function testResolve() | ||||||
|     { |     { | ||||||
|         $resolver = new OGPResolver(); |         $response = <<< 'HTML' | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <html> | ||||||
|  |   <head prefix="og: http://ogp.me/ns#"> | ||||||
|  |     <meta charset="utf-8"> | ||||||
|  |     <title>The Open Graph protocol</title> | ||||||
|  |     <meta name="description" content="The Open Graph protocol enables any web page to become a rich object in a social graph."> | ||||||
|  |     <link rel="stylesheet" href="base.css" type="text/css"> | ||||||
|  |     <meta property="og:title" content="Open Graph protocol"> | ||||||
|  |     <meta property="og:type" content="website"> | ||||||
|  |     <meta property="og:url" content="http://ogp.me/"> | ||||||
|  |     <meta property="og:image" content="http://ogp.me/logo.png"> | ||||||
|  |     <meta property="og:image:type" content="image/png"> | ||||||
|  |     <meta property="og:image:width" content="300"> | ||||||
|  |     <meta property="og:image:height" content="300"> | ||||||
|  |     <meta property="og:image:alt" content="The Open Graph logo"> | ||||||
|  |     <meta property="og:description" content="The Open Graph protocol enables any web page to become a rich object in a social graph."> | ||||||
|  |     <meta prefix="fb: http://ogp.me/ns/fb#" property="fb:app_id" content="115190258555800"> | ||||||
|  |     <link rel="alternate" type="application/rdf+xml" href="http://ogp.me/ns/ogp.me.rdf"> | ||||||
|  |     <link rel="alternate" type="text/turtle" href="http://ogp.me/ns/ogp.me.ttl"> | ||||||
|  |   </head> | ||||||
|  |   <body></body> | ||||||
|  | </html> | ||||||
|  | HTML; | ||||||
|  |         $this->createResolver(OGPResolver::class, $response); | ||||||
|  |  | ||||||
|  |         $resolver = $this->createResolver(OGPResolver::class, $response); | ||||||
|         $metadata = $resolver->resolve('http://ogp.me'); |         $metadata = $resolver->resolve('http://ogp.me'); | ||||||
|         $this->assertEquals('Open Graph protocol', $metadata->title); |         $this->assertEquals('Open Graph protocol', $metadata->title); | ||||||
|         $this->assertEquals('The Open Graph protocol enables any web page to become a rich object in a social graph.', $metadata->description); |         $this->assertEquals('The Open Graph protocol enables any web page to become a rich object in a social graph.', $metadata->description); | ||||||
| @@ -28,9 +55,22 @@ class OGPResolverTest extends TestCase | |||||||
|  |  | ||||||
|     public function testResolveTitleOnly() |     public function testResolveTitleOnly() | ||||||
|     { |     { | ||||||
|         $resolver = new OGPResolver(); |         $response = <<< 'HTML' | ||||||
|  | <!doctype html> | ||||||
|  | <html> | ||||||
|  | <head> | ||||||
|  |     <title>Example Domain</title> | ||||||
|  |  | ||||||
|         $metadata = $resolver->resolve('http://example.com'); |     <meta charset="utf-8" /> | ||||||
|  |     <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> | ||||||
|  |     <meta name="viewport" content="width=device-width, initial-scale=1" /> | ||||||
|  | </head> | ||||||
|  | <body></body> | ||||||
|  | </html> | ||||||
|  | HTML; | ||||||
|  |         $this->createResolver(OGPResolver::class, $response); | ||||||
|  |  | ||||||
|  |         $metadata = $this->resolver->resolve('http://example.com'); | ||||||
|         $this->assertEquals('Example Domain', $metadata->title); |         $this->assertEquals('Example Domain', $metadata->title); | ||||||
|         $this->assertEmpty($metadata->description); |         $this->assertEmpty($metadata->description); | ||||||
|         $this->assertEmpty($metadata->image); |         $this->assertEmpty($metadata->image); | ||||||
| @@ -38,7 +78,7 @@ class OGPResolverTest extends TestCase | |||||||
|  |  | ||||||
|     public function testResolveTitleAndDescription() |     public function testResolveTitleAndDescription() | ||||||
|     { |     { | ||||||
|         $resolver = new OGPResolver(); |         $resolver = $this->app->make(OGPResolver::class); | ||||||
|  |  | ||||||
|         $html = <<<EOF |         $html = <<<EOF | ||||||
| <title>Welcome to my homepage</title> | <title>Welcome to my homepage</title> | ||||||
|   | |||||||
							
								
								
									
										11
									
								
								tests/fixture/Nijie/testAnimationGifResponse.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								tests/fixture/Nijie/testAnimationGifResponse.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><link rel="alternate" media="handheld" href="http://mb.nijie.info/view.php?id=9537" /><link rel="alternate" media="only screen and (max-width: 640px)" href="https://sp.nijie.info/view.php?id=9537" /><link rel="canonical"  href="https://nijie.info/view.php?id=9537" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=970" /><meta name="format-detection" content="telephone=no" /><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta http-equiv="Content-Style-Type" content="text/css; charset=utf-8" /><meta http-equiv="Content-Script-Type" content="text/javascript" /><meta http-equiv="Content-Language" content="ja" /><meta name="description" content="ニジエに投稿された、黒末アプコのイラスト「ニジエがgifに対応したんだってね 奥さん」です。この画像はニジエがgifに対応したんだってね 奥さん,黒末アプコ,おっぱい,陥没乳首,眼鏡,GIFアニメ,ぶるんぶるん,アニメgif,に関連があります。「アニメgifとか専門外なのでよくわかりませんでした」" /><meta name="keywords" content="ニジエがgifに対応したんだってね 奥さん,黒末アプコ,おっぱい,陥没乳首,眼鏡,GIFアニメ,ぶるんぶるん,アニメgif," /><meta property="og:title" content="ニジエがgifに対応したんだってね 奥さん | 黒末アプコ" /><meta property="og:type" content="article" /><meta property="og:description" content="アニメgifとか専門外なのでよくわかりませんでした" /><meta property="og:url" content="https://nijie.info/view.php?id=9537" /><meta property="og:image" content="https://nijie.info/pic/logo/nijie_logo_og.png?201902161557" /><meta property="og:site_name" content="ニジエがgifに対応したんだってね 奥さん | 黒末アプコ | ニジエ" /><meta property="og:email" content="info@nijie.co.jp" /><link rel="alternate" href="https://nijie.info/view.php?id=9537" hreflang="x-default" /><link rel="shortcut icon" href="https://nijie.info/icon/favicon.ico?201902161557" /><link rel="shortcut icon" type="image/vnd.microsoft.icon" href="https://nijie.info/pic/icon/nijie.png?201902161557" /><title>ニジエがgifに対応したんだってね 奥さん | 黒末アプコ | ニジエ</title></head> | ||||||
|  | <body> | ||||||
|  | <!-- pickup some json --> | ||||||
|  | <script type="application/ld+json">{"@context": "http://schema.org","@type": "ImageObject","name": "ニジエがgifに対応したんだってね 奥さん","description": "アニメgifとか専門外なのでよくわかりませんでした","text": "アニメgifとか専門外なのでよくわかりませんでした","interactionCount": "10862 UserPlays, 6 UserComments","datePublished": "Sun Apr  8 06:59:48 2012","uploadDate": "Sun Apr  8 06:59:48 2012","dateModified": "Mon Apr  9 17:09:30 2012","copyrightYear": "2012","genre":"Image","contentLocation":"Japan","width":160,"height":90,"thumbnailUrl": "https://pic01.nijie.info/__rs_l160x160/nijie_picture/201204080659341943.gif","author": {"@type": "Person","name": "黒末アプコ","description": "判子エロ絵師とはわたしのことです","sameAs": "https://nijie.info/members.php?id=1943","image": "https://pic04.nijie.info/members_picture/thumbnail/1943_1542569693.gif"},"creator": {"@type": "Person","name": "黒末アプコ","description": "判子エロ絵師とはわたしのことです","sameAs": "https://nijie.info/members.php?id=1943","image": "https://pic04.nijie.info/members_picture/thumbnail/1943_1542569693.gif"},"editor": {"@type": "Person","name": "黒末アプコ","description": "判子エロ絵師とはわたしのことです","sameAs": "https://nijie.info/members.php?id=1943","image": "https://pic04.nijie.info/members_picture/thumbnail/1943_1542569693.gif"},"copyrightHolder": {"@type": "Person","name": "黒末アプコ","description": "判子エロ絵師とはわたしのことです","sameAs": "https://nijie.info/members.php?id=1943","image": "https://pic04.nijie.info/members_picture/thumbnail/1943_1542569693.gif"}}</script> | ||||||
|  | <script type="application/ld+json">{"@context": "http://schema.org","@type": "Review","reviewBody": "ティッシュ","author": {"@type": "Person","name": "黒末アプコ","description": "判子エロ絵師とはわたしのことです","sameAs": "https://nijie.info/members.php?id=1943","image": "http://pic04.nijie.info/members_picture/thumbnail/1943_1542569693.gif"},"datePublished": "Wed Nov 19 12:57:57 2014","contentLocation": "Japan","itemReviewed": {"@type" : "ImageObject","name" : "ニジエがgifに対応したんだってね 奥さん","sameAs": "https://nijie.info/view.php?id=9537"}}</script> | ||||||
|  | <script type="application/ld+json">{"@context": "http://schema.org","@type": "Review","reviewBody": "ひっ さくや様! ガタガタガタ  ","author": {"@type": "Person","name": "黒末アプコ","description": "判子エロ絵師とはわたしのことです","sameAs": "https://nijie.info/members.php?id=1943","image": "http://pic04.nijie.info/members_picture/thumbnail/1943_1542569693.gif"},"datePublished": "Thu Apr 19 20:48:02 2012","contentLocation": "Japan","itemReviewed": {"@type" : "ImageObject","name" : "ニジエがgifに対応したんだってね 奥さん","sameAs": "https://nijie.info/view.php?id=9537"}}</script> | ||||||
|  | <script type="application/ld+json">{"@context": "http://schema.org","@type": "Review","reviewBody": "さっ、最高です!!","author": {"@type": "Person","name": "黒末アプコ","description": "判子エロ絵師とはわたしのことです","sameAs": "https://nijie.info/members.php?id=1943","image": "http://pic04.nijie.info/members_picture/thumbnail/1943_1542569693.gif"},"datePublished": "Thu Apr 19 20:35:19 2012","contentLocation": "Japan","itemReviewed": {"@type" : "ImageObject","name" : "ニジエがgifに対応したんだってね 奥さん","sameAs": "https://nijie.info/view.php?id=9537"}}</script> | ||||||
|  | <script type="application/ld+json">{"@context": "http://schema.org","@type": "Review","reviewBody": "ぎょっ 新着コメントがtopに表示されないバグ  しこっていただけてさいわいです","author": {"@type": "Person","name": "黒末アプコ","description": "判子エロ絵師とはわたしのことです","sameAs": "https://nijie.info/members.php?id=1943","image": "http://pic04.nijie.info/members_picture/thumbnail/1943_1542569693.gif"},"datePublished": "Sun Apr  8 14:04:52 2012","contentLocation": "Japan","itemReviewed": {"@type" : "ImageObject","name" : "ニジエがgifに対応したんだってね 奥さん","sameAs": "https://nijie.info/view.php?id=9537"}}</script> | ||||||
|  | <script type="application/ld+json">{"@context": "http://schema.org","@type": "BreadcrumbList","itemListElement":[{"@type": "ListItem","position": 1,"item":{"@id": "https://nijie.info/members.php?id=1943","name": "黒末アプコ"}},{"@type": "ListItem","position": 2,"item":{"@id": "https://nijie.info/members_illust.php?id=1943","name": "黒末アプコさんのイラスト一覧"}},{"@type": "ListItem","position": 3,"item":{"@id": "https://nijie.info/view.php?id=9537","name": "ニジエがgifに対応したんだってね 奥さん"}}]}</script> | ||||||
|  | </body></html> | ||||||
|  |  | ||||||
							
								
								
									
										30
									
								
								tests/fixture/Nijie/testMp4MovieResponse.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								tests/fixture/Nijie/testMp4MovieResponse.html
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										12
									
								
								tests/fixture/Nijie/testMultiplePictureResponse.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								tests/fixture/Nijie/testMultiplePictureResponse.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><link rel="alternate" media="handheld" href="http://mb.nijie.info/view.php?id=202707" /><link rel="alternate" media="only screen and (max-width: 640px)" href="https://sp.nijie.info/view.php?id=202707" /><link rel="canonical"  href="https://nijie.info/view.php?id=202707" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=970" /><meta name="format-detection" content="telephone=no" /><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta http-equiv="Content-Style-Type" content="text/css; charset=utf-8" /><meta http-equiv="Content-Script-Type" content="text/javascript" /><meta http-equiv="Content-Language" content="ja" /><meta name="description" content="ニジエに投稿された、ニジエ運営のイラスト「ニジエ壁紙」です。この画像はニジエ壁紙,ニジエ運営,ニジエたん,壁紙,に関連があります。「ニジエのPCとiphone用(4.7inch推奨)の壁紙です。 | ||||||
|  | 保存してご自由にお使いくださいませ。」" /><meta name="keywords" content="ニジエ壁紙,ニジエ運営,ニジエたん,壁紙," /> | ||||||
|  |     <meta property="og:title" content="ニジエ壁紙 | ニジエ運営" /><meta property="og:type" content="article" /><meta property="og:description" content="ニジエのPCとiphone用(4.7inch推奨)の壁紙です。 | ||||||
|  | 保存してご自由にお使いくださいませ。" /><meta property="og:url" content="https://nijie.info/view.php?id=202707" /><meta property="og:image" content="https://nijie.info/pic/logo/nijie_logo_og.png?201902161557" /><meta property="og:site_name" content="ニジエ壁紙 | ニジエ運営 | ニジエ" /><meta property="og:email" content="info@nijie.co.jp" /><link rel="alternate" href="https://nijie.info/view.php?id=202707" hreflang="x-default" /><link rel="shortcut icon" href="https://nijie.info/icon/favicon.ico?201902161557" /><link rel="shortcut icon" type="image/vnd.microsoft.icon" href="https://nijie.info/pic/icon/nijie.png?201902161557" /><title>ニジエ壁紙 | ニジエ運営 | ニジエ</title></head> | ||||||
|  | <body> | ||||||
|  | <!-- pickup some JSON-LD --> | ||||||
|  | <script type="application/ld+json">{"@context": "http://schema.org","@type": "ImageObject","name": "ニジエ壁紙","description": "ニジエのPCとiphone用(4.7inch推奨)の壁紙です。 | ||||||
|  | 保存してご自由にお使いくださいませ。","text": "ニジエのPCとiphone用(4.7inch推奨)の壁紙です。 | ||||||
|  | 保存してご自由にお使いくださいませ。","interactionCount": "2301 UserPlays, 4 UserComments","datePublished": "Thu Feb  9 18:58:03 2017","uploadDate": "Thu Feb  9 18:58:03 2017","dateModified": "Thu Feb  9 18:58:03 2017","copyrightYear": "2017","genre":"Image","contentLocation":"Japan","width":160,"height":90,"thumbnailUrl": "https://pic03.nijie.info/__rs_l160x160/nijie_picture/38_20170209185801_0.png","author": {"@type": "Person","name": "ニジエ運営","description": "ニジエンジョイ!","sameAs": "https://nijie.info/members.php?id=38","image": "https://pic04.nijie.info/members_picture/thumbnail/38_1511696698.png"},"creator": {"@type": "Person","name": "ニジエ運営","description": "ニジエンジョイ!","sameAs": "https://nijie.info/members.php?id=38","image": "https://pic04.nijie.info/members_picture/thumbnail/38_1511696698.png"},"editor": {"@type": "Person","name": "ニジエ運営","description": "ニジエンジョイ!","sameAs": "https://nijie.info/members.php?id=38","image": "https://pic04.nijie.info/members_picture/thumbnail/38_1511696698.png"},"copyrightHolder": {"@type": "Person","name": "ニジエ運営","description": "ニジエンジョイ!","sameAs": "https://nijie.info/members.php?id=38","image": "https://pic04.nijie.info/members_picture/thumbnail/38_1511696698.png"}}</script> | ||||||
|  | <script type="application/ld+json">{"@context": "http://schema.org","@type": "Review","reviewBody": "やったぜ!","author": {"@type": "Person","name": "ニジエ運営","description": "ニジエンジョイ!","sameAs": "https://nijie.info/members.php?id=38","image": "http://pic04.nijie.info/members_picture/thumbnail/38_1511696698.png"},"datePublished": "Fri Feb 17 01:31:00 2017","contentLocation": "Japan","itemReviewed": {"@type" : "ImageObject","name" : "ニジエ壁紙","sameAs": "https://nijie.info/view.php?id=202707"}}</script> | ||||||
|  | <script type="application/ld+json">{"@context": "http://schema.org","@type": "Review","reviewBody": "ぺろぺろしたいです","author": {"@type": "Person","name": "ニジエ運営","description": "ニジエンジョイ!","sameAs": "https://nijie.info/members.php?id=38","image": "http://pic04.nijie.info/members_picture/thumbnail/38_1511696698.png"},"datePublished": "Fri Feb 17 01:30:54 2017","contentLocation": "Japan","itemReviewed": {"@type" : "ImageObject","name" : "ニジエ壁紙","sameAs": "https://nijie.info/view.php?id=202707"}}</script> | ||||||
|  | </body></html> | ||||||
							
								
								
									
										16
									
								
								tests/fixture/Nijie/testStandardPictureResponse.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								tests/fixture/Nijie/testStandardPictureResponse.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | |||||||
|  | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><link rel="alternate" media="handheld" href="http://mb.nijie.info/view.php?id=66384" /><link rel="alternate" media="only screen and (max-width: 640px)" href="https://sp.nijie.info/view.php?id=66384" /><link rel="canonical"  href="https://nijie.info/view.php?id=66384" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=970" /><meta name="format-detection" content="telephone=no" /><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta http-equiv="Content-Style-Type" content="text/css; charset=utf-8" /><meta http-equiv="Content-Script-Type" content="text/javascript" /><meta http-equiv="Content-Language" content="ja" /><meta name="description" content="ニジエに投稿された、ニジエ運営のイラスト「チンポップくんの日常ep.1「チンポップくんと釣り」」です。この画像はチンポップくんの日常ep.1「チンポップくんと釣り」,ニジエ運営,ニジエたん,釣り,チンポップ君の日常,公式漫画,に関連があります。「メールマガジン漫画のバックナンバー第一話です! | ||||||
|  | 最新話はメールマガジンより配信中です。」" /><meta name="keywords" content="チンポップくんの日常ep.1「チンポップくんと釣り」,ニジエ運営,ニジエたん,釣り,チンポップ君の日常,公式漫画," /><meta property="og:title" content="チンポップくんの日常ep.1「チンポップくんと釣り」 | ニジエ運営" /><meta property="og:type" content="article" /><meta property="og:description" content="メールマガジン漫画のバックナンバー第一話です! | ||||||
|  | 最新話はメールマガジンより配信中です。" /><meta property="og:url" content="https://nijie.info/view.php?id=66384" /><meta property="og:image" content="https://nijie.info/pic/logo/nijie_logo_og.png?201902161557" /><meta property="og:site_name" content="チンポップくんの日常ep.1「チンポップくんと釣り」 | ニジエ運営 | ニジエ" /><meta property="og:email" content="info@nijie.co.jp" /><link rel="alternate" href="https://nijie.info/view.php?id=66384" hreflang="x-default" /><link rel="shortcut icon" href="https://nijie.info/icon/favicon.ico?201902161557" /><link rel="shortcut icon" type="image/vnd.microsoft.icon" href="https://nijie.info/pic/icon/nijie.png?201902161557" /><title>チンポップくんの日常ep.1「チンポップくんと釣り」 | ニジエ運営 | ニジエ</title></head> | ||||||
|  |     <body> | ||||||
|  |         <!-- pickup only json --> | ||||||
|  |         <script type="application/ld+json">{"@context": "http://schema.org","@type": "ImageObject","name": "チンポップくんの日常ep.1「チンポップくんと釣り」","description": "メールマガジン漫画のバックナンバー第一話です! | ||||||
|  | 最新話はメールマガジンより配信中です。","text": "メールマガジン漫画のバックナンバー第一話です! | ||||||
|  | 最新話はメールマガジンより配信中です。","interactionCount": "13634 UserPlays, 24 UserComments","datePublished": "Sat Nov 30 15:56:26 2013","uploadDate": "Sat Nov 30 15:56:26 2013","dateModified": "Sat Nov 30 15:56:26 2013","copyrightYear": "2013","genre":"Image","contentLocation":"Japan","width":160,"height":90,"thumbnailUrl": "https://pic04.nijie.info/__rs_l160x160/nijie_picture/38_20131130155623.png","author": {"@type": "Person","name": "ニジエ運営","description": "ニジエンジョイ!","sameAs": "https://nijie.info/members.php?id=38","image": "https://pic04.nijie.info/members_picture/thumbnail/38_1511696698.png"},"creator": {"@type": "Person","name": "ニジエ運営","description": "ニジエンジョイ!","sameAs": "https://nijie.info/members.php?id=38","image": "https://pic04.nijie.info/members_picture/thumbnail/38_1511696698.png"},"editor": {"@type": "Person","name": "ニジエ運営","description": "ニジエンジョイ!","sameAs": "https://nijie.info/members.php?id=38","image": "https://pic04.nijie.info/members_picture/thumbnail/38_1511696698.png"},"copyrightHolder": {"@type": "Person","name": "ニジエ運営","description": "ニジエンジョイ!","sameAs": "https://nijie.info/members.php?id=38","image": "https://pic04.nijie.info/members_picture/thumbnail/38_1511696698.png"}}</script> | ||||||
|  |         <script type="application/ld+json">{"@context": "http://schema.org","@type": "Review","reviewBody": "ミルコ字幕","author": {"@type": "Person","name": "ニジエ運営","description": "ニジエンジョイ!","sameAs": "https://nijie.info/members.php?id=38","image": "http://pic04.nijie.info/members_picture/thumbnail/38_1511696698.png"},"datePublished": "Tue Jan 27 08:58:02 2015","contentLocation": "Japan","itemReviewed": {"@type" : "ImageObject","name" : "チンポップくんの日常ep.1「チンポップくんと釣り」","sameAs": "https://nijie.info/view.php?id=66384"}}</script> | ||||||
|  |         <script type="application/ld+json">{"@context": "http://schema.org","@type": "Review","reviewBody": "ティッシュ","author": {"@type": "Person","name": "ニジエ運営","description": "ニジエンジョイ!","sameAs": "https://nijie.info/members.php?id=38","image": "http://pic04.nijie.info/members_picture/thumbnail/38_1511696698.png"},"datePublished": "Tue Aug 26 17:56:41 2014","contentLocation": "Japan","itemReviewed": {"@type" : "ImageObject","name" : "チンポップくんの日常ep.1「チンポップくんと釣り」","sameAs": "https://nijie.info/view.php?id=66384"}}</script> | ||||||
|  |         <script type="application/ld+json">{"@context": "http://schema.org","@type": "Review","reviewBody": "ヨダレもの","author": {"@type": "Person","name": "ニジエ運営","description": "ニジエンジョイ!","sameAs": "https://nijie.info/members.php?id=38","image": "http://pic04.nijie.info/members_picture/thumbnail/38_1511696698.png"},"datePublished": "Mon Jun 23 10:17:29 2014","contentLocation": "Japan","itemReviewed": {"@type" : "ImageObject","name" : "チンポップくんの日常ep.1「チンポップくんと釣り」","sameAs": "https://nijie.info/view.php?id=66384"}}</script> | ||||||
|  |         <script type="application/ld+json">{"@context": "http://schema.org","@type": "Review","reviewBody": "おまわりさんこっちです","author": {"@type": "Person","name": "ニジエ運営","description": "ニジエンジョイ!","sameAs": "https://nijie.info/members.php?id=38","image": "http://pic04.nijie.info/members_picture/thumbnail/38_1511696698.png"},"datePublished": "Thu Mar 27 10:49:56 2014","contentLocation": "Japan","itemReviewed": {"@type" : "ImageObject","name" : "チンポップくんの日常ep.1「チンポップくんと釣り」","sameAs": "https://nijie.info/view.php?id=66384"}}</script> | ||||||
|  |         <script type="application/ld+json">{"@context": "http://schema.org","@type": "Review","reviewBody": "めちゃシコ","author": {"@type": "Person","name": "ニジエ運営","description": "ニジエンジョイ!","sameAs": "https://nijie.info/members.php?id=38","image": "http://pic04.nijie.info/members_picture/thumbnail/38_1511696698.png"},"datePublished": "Sat Feb 15 18:47:22 2014","contentLocation": "Japan","itemReviewed": {"@type" : "ImageObject","name" : "チンポップくんの日常ep.1「チンポップくんと釣り」","sameAs": "https://nijie.info/view.php?id=66384"}}</script> | ||||||
|  |     </body> | ||||||
|  | </html> | ||||||
|  |  | ||||||
		Reference in New Issue
	
	Block a user
	 hina
					hina