diff --git a/app/MetadataResolver/Kb10uyShortStoryServerResolver.php b/app/MetadataResolver/Kb10uyShortStoryServerResolver.php new file mode 100644 index 0000000..26a7dd8 --- /dev/null +++ b/app/MetadataResolver/Kb10uyShortStoryServerResolver.php @@ -0,0 +1,42 @@ +client = $client; + } + + public function resolve(string $url): Metadata + { + $res = $this->client->get($url); + if ($res->getStatusCode() !== 200) { + throw new \RuntimeException("{$res->getStatusCode()}: $url"); + + return $this->parse($res->getBody()); + } + + $html = (string) $res->getBody(); + $crawler = new Crawler($html); + $infoElement = $crawler->filter('div.post-info'); + + $metadata = new Metadata(); + $metadata->title = $infoElement->filter('h1')->text(); + $metadata->description = trim($infoElement->filter('p.summary')->text()); + $metadata->tags = array_values(array_diff($infoElement->filter('ul.tags > li.tag > a')->extract('_text'), self::EXCLUDED_TAGS)); + + return $metadata; + } +} diff --git a/app/MetadataResolver/MetadataResolver.php b/app/MetadataResolver/MetadataResolver.php index 9e19fe9..8d25294 100644 --- a/app/MetadataResolver/MetadataResolver.php +++ b/app/MetadataResolver/MetadataResolver.php @@ -32,6 +32,7 @@ class MetadataResolver implements Resolver '~(adult\.)?contents\.fc2\.com\/article_search\.php\?id=\d+~' => FC2ContentsResolver::class, '~store\.steampowered\.com/app/\d+~' => SteamResolver::class, '~www\.xtube\.com/video-watch/.*-\d+$~'=> XtubeResolver::class, + '~ss\.kb10uy\.org/posts/\d+$~' => Kb10uyShortStoryServerResolver::class, ]; public $mimeTypes = [ diff --git a/tests/Unit/MetadataResolver/Kb10uyShortStoryServerResolverTest.php b/tests/Unit/MetadataResolver/Kb10uyShortStoryServerResolverTest.php new file mode 100644 index 0000000..7407b9c --- /dev/null +++ b/tests/Unit/MetadataResolver/Kb10uyShortStoryServerResolverTest.php @@ -0,0 +1,35 @@ +shouldUseMock()) { + sleep(1); + } + } + + public function testNormalPost() + { + $responseText = file_get_contents(__DIR__ . '/../../fixture/Kb10uyShortStoryServer/tomone.html'); + + $this->createResolver(Kb10uyShortStoryServerResolver::class, $responseText); + + $metadata = $this->resolver->resolve('https://ss.kb10uy.org/posts/14'); + $this->assertSame('朋音「は、はぁ?おむつ?」', $metadata->title); + $this->assertSame('自炊したおかずってやつです。とりあえずこのSSの中ではkb10uyの彼女は朋音ってことにしといてください。そうじゃないと出す男が決定できないので。', $metadata->description); + $this->assertSame(['妄想', 'kb10uy', '岩永朋音', 'おむつ'], $metadata->tags); + if ($this->shouldUseMock()) { + $this->assertSame('https://ss.kb10uy.org/posts/14', (string) $this->handler->getLastRequest()->getUri()); + } + } +} diff --git a/tests/fixture/Kb10uyShortStoryServer/tomone.html b/tests/fixture/Kb10uyShortStoryServer/tomone.html new file mode 100644 index 0000000..37dca5a --- /dev/null +++ b/tests/fixture/Kb10uyShortStoryServer/tomone.html @@ -0,0 +1,205 @@ + + + + + + + + + + + + 朋音「は、はぁ?おむつ?」 - ShortStoryServer + + +
+ +
+
+
+

朋音「は、はぁ?おむつ?」

+
+ kb10uy +
+ Author:
+ kb10uy @kb10uy +
+
+ メニュー +
+
+

+ 自炊したおかずってやつです。とりあえずこのSSの中ではkb10uyの彼女は朋音ってことにしといてください。そうじゃないと出す男が決定できないので。 +

+ + + + + + + +

+ 作品をシリーズに追加すると、シリーズのページからもこの作品にアクセスできるようになるほか、 + 登録されているシリーズが作品ページにも表示されます。 +

+
+
+ + +
+
+
+
+
+ + +
+

+kb10uy「うん、今日はこれ穿いて学校行って」 +朋音「あの……アンタ本気で言ってるの?」 +kb10uy「自分の好きでもない子にそんなおむつ穿いてとか言わないよ」 +朋音「そういうことじゃないのよっ……」 +

+

+kb10uy の要求はいたって単純である。 +

+ +

+単純か? +

+

+朋音「いまアンタのカノジョになっちゃったことを心底後悔してるわ……」 +kb10uy「でもやってくれるよね?」 +朋音「うぅ……そうよ、やるわよ……正直、そ、その……やり、たい……し」 +kb10uy「朋音ならそう言ってくれると思った!じゃあよろしくね」 +朋音「何が宜しいのよ……まったく」 +

+
+

+朋音「え、ちょっと待って、ワタシこれ大きいほうもこれにするの!?」 +kb10uy「うん、言ったじゃん」 +朋音「はぁ……」 +kb10uy「嫌だったら我慢して帰ってきてからしてもいいから」 +朋音「言われなくてもそうするわよ!w」 +kb10uy「おしっこは我慢できなさそう?」 +朋音「ん、正直自信ない……」 +kb10uy「まあ大丈夫だって、きっとバレないよ」 +朋音「よくもそんなヘラヘラと……」 +

+
+

+はぁ〜……。もうユウウツだわ……。 +夏稀「トモ、大丈夫?なんか妙に落ち込んでるように見えるけど……」 +朋音「うーん……微妙」 +夏稀「何かあった?」 +朋音「あのさ……kb10uyいるじゃん」 +夏稀「あぁ……1つ上の」 +朋音「多分なつには言ってなかったと思うんだけどさ、ワタシちょっと前からあいつと付き合ってるんだわ」 +夏稀「え、ほんとに!!良かったじゃん、おめでとう〜」 +朋音「それがあんまりおめでたくなくてさ……」 +夏稀「というと」 +朋音「kb10uyって精力絶倫ってウワサじゃん」 +夏稀「そうらしいね」 +朋音「絶倫なだけならまだ良くてさ、ワタシもそういうことするんだろうなってのは覚悟してたし」 +夏稀「したんだ?」 +朋音「ん。プロポーズした日に……」 +夏稀「マジで絶倫なんだ……」 +朋音「いやこっからなのよ問題は。kb10uy、性癖もヤバヤバのヤバでさ」 +夏稀「あー、はぁ……」 +朋音「……誰にも言わない?」 +夏稀「……うん。」 +

+

+朋音「ワタシ今おむつ穿かされてるの」 +夏稀「えっっ!! +

+

+朋音「っ………///」 +夏稀「なるほど……」 +夏稀「でもトモも穿いてるってことはやっぱりムッツリだよね」 +朋音「返す言葉もないわ……」 +

+
+

+実際に中に放尿するシーンはみなさんのご想像におまかせします +

+

+僕は廊下で人とぶつかってその衝撃でジョロロロって感じのシチュエーションで抜きました +

+
+ +
+ + + +