From 579708389a8dd7c2ab140b2a62ee63d509b015f9 Mon Sep 17 00:00:00 2001 From: Yuu Kobayashi Date: Sun, 29 Sep 2019 11:33:05 +0900 Subject: [PATCH] =?UTF-8?q?Kb10uyShortStoryServerResolver=20=E3=81=A8?= =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Kb10uyShortStoryServerResolver.php | 42 ++++ app/MetadataResolver/MetadataResolver.php | 1 + .../Kb10uyShortStoryServerResolverTest.php | 35 +++ .../Kb10uyShortStoryServer/tomone.html | 205 ++++++++++++++++++ 4 files changed, 283 insertions(+) create mode 100644 app/MetadataResolver/Kb10uyShortStoryServerResolver.php create mode 100644 tests/Unit/MetadataResolver/Kb10uyShortStoryServerResolverTest.php create mode 100644 tests/fixture/Kb10uyShortStoryServer/tomone.html 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「うん、今日はこれ穿いて学校行って」 +朋音「あの……アンタ本気で言ってるの?」 +kb10uy「自分の好きでもない子にそんなおむつ穿いてとか言わないよ」 +朋音「そういうことじゃないのよっ……」 +

+

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

+
    +
  • 今日一日、おむつを穿いていること。
  • +
  • 必ずおむつの中に出すこと(大小問わず)。
  • +
  • 必ず人のいる場所で出すこと。
  • +
+

+単純か? +

+

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

+
+

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

+
+

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

+

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

+

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

+
+

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

+

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

+
+ +
+ + + +