Skip to content

Commit 956d260

Browse files
authored
Merge pull request #1361 from shikorism/develop
Release 2024.12.0
2 parents c6379d0 + 452bba5 commit 956d260

File tree

8 files changed

+3139
-168
lines changed

8 files changed

+3139
-168
lines changed

app/MetadataResolver/DLsiteResolver.php

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,11 @@ public function extractTags(string $html): array
3333
@$dom->loadHTML(Formatter::htmlEntities($html, 'UTF-8'));
3434
$xpath = new \DOMXPath($dom);
3535

36-
$genreNode = $xpath->query("//div[@class='main_genre'][1]");
37-
if ($genreNode->length === 0) {
38-
return [];
39-
}
40-
41-
$tagsNode = $genreNode->item(0)->getElementsByTagName('a');
36+
$tagsNode = $xpath->query("//div[@class='main_genre']/a");
4237
$tags = [];
4338

44-
for ($i = 0; $i <= $tagsNode->length - 1; $i++) {
45-
$tags[] = $tagsNode->item($i)->textContent;
39+
foreach ($tagsNode as $node) {
40+
$tags[] = $node->textContent;
4641
}
4742

4843
// 重複削除

app/MetadataResolver/NarouResolver.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ public function resolve(string $url): Metadata
5151
// タグ
5252
$keywordNodeList = $xpath->query('//th[contains(text(), "キーワード")]/following-sibling::td[1]');
5353
if ($keywordNodeList->length !== 0) {
54-
$keyword = trim($keywordNodeList->item(0)->textContent);
55-
$metadata->tags = explode(' ', $keyword);
54+
$keyword = trim($keywordNodeList->item(0)->textContent);
55+
$metadata->tags = preg_split('/\s+/u', $keyword);
5656
}
5757

5858
// 作者名

composer.lock

Lines changed: 153 additions & 152 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

phpunit.xml

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,18 @@
1212
<testsuite name="Unit">
1313
<directory suffix="Test.php">./tests/Unit</directory>
1414
</testsuite>
15-
1615
<testsuite name="Feature">
1716
<directory suffix="Test.php">./tests/Feature</directory>
1817
</testsuite>
19-
2018
<testsuite name="MetadataResolver">
2119
<directory suffix="Test.php">./tests/Unit/MetadataResolver</directory>
2220
</testsuite>
2321
</testsuites>
24-
<filter>
25-
<whitelist processUncoveredFilesFromWhitelist="true">
22+
<coverage processUncoveredFiles="true">
23+
<include>
2624
<directory suffix=".php">./app</directory>
27-
</whitelist>
28-
</filter>
25+
</include>
26+
</coverage>
2927
<php>
3028
<env name="APP_ENV" value="testing" force="true"/>
3129
<env name="BCRYPT_ROUNDS" value="4" force="true"/>

tests/Unit/MetadataResolver/DLsiteResolverTest.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,22 @@ public function testGirlsDrama()
162162
}
163163
}
164164

165+
public function testGirlsCoupling()
166+
{
167+
$responseText = $this->fetchSnapshot(__DIR__ . '/../../fixture/DLsite/testGirlsCoupling.html');
168+
169+
$this->createResolver(DLsiteResolver::class, $responseText);
170+
171+
$metadata = $this->resolver->resolve('https://www.dlsite.com/girls/work/=/product_id/RJ01008713.html');
172+
$this->assertEquals('♂が受け。ネコちゃん×ネコくん', $metadata->title);
173+
$this->assertEquals('サークル名: pink carrot' . PHP_EOL . '同級生のネコ♂くんをえっちに攻めるネコ♀ちゃんのすけべ漫画。', $metadata->description);
174+
$this->assertEquals('https://img.dlsite.jp/modpub/images2/work/doujin/RJ01009000/RJ01008713_img_main.jpg', $metadata->image);
175+
$this->assertEquals(['フェラチオ', '乳首/乳輪', '制服', '同級生/同僚', '女×男', '焦らし', '獣耳', '男性受け', '逆転無し'], $metadata->tags);
176+
if ($this->shouldUseMock()) {
177+
$this->assertSame('https://www.dlsite.com/girls/work/=/product_id/RJ01008713.html', (string) $this->handler->getLastRequest()->getUri());
178+
}
179+
}
180+
165181
public function testBL()
166182
{
167183
$responseText = $this->fetchSnapshot(__DIR__ . '/../../fixture/DLsite/testBL.html');

tests/Unit/MetadataResolver/NarouResolverTest.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,19 @@ public function testLongDescriptionNovel()
6262
$this->assertSame('https://novel18.syosetu.com/novelview/infotop/ncode/n0477gn/', (string) $this->handler->getLastRequest()->getUri());
6363
}
6464
}
65+
66+
public function testFeaturesInKeyword()
67+
{
68+
$responseText = $this->fetchSnapshot(__DIR__ . '/../../fixture/Narou/testFeaturesInKeyword.html');
69+
70+
$this->createResolver(NarouResolver::class, $responseText);
71+
72+
$metadata = $this->resolver->resolve('https://novel18.syosetu.com/n6404hk/');
73+
$this->assertEquals('王子繁殖促進計画「王子の性欲を刺激せよ」 ~よってたかって性欲を刺激される小国王子の異世界奮闘記~', $metadata->title);
74+
$this->assertEquals("作者: ひもの\n小国だが王子に転生した俺。 \n意外に甘くない現実に戸惑いつつも、いつかはエロエロハーレムが作れたらいいな、と思っていたが…… \n\n幼馴染が、いとこのお姉ちゃんが、周りの美少女達が、恥じらいながらも一生懸命、俺の性欲を刺激してくる。 \n\nえ? 俺の性欲を刺激するために、国家プロジェクトが立ち上がった?……", $metadata->description);
75+
$this->assertEquals(['残酷な描写あり', '異世界転生', '男主人公', 'ハーレム', '魔法', 'オリジナル戦記', '戦記', '淫語', '羞恥', '美少女', 'イチャラブ', '♡喘ぎ', '孕ませ', '巨乳'], $metadata->tags);
76+
if ($this->shouldUseMock()) {
77+
$this->assertSame('https://novel18.syosetu.com/novelview/infotop/ncode/n6404hk/', (string) $this->handler->getLastRequest()->getUri());
78+
}
79+
}
6580
}

0 commit comments

Comments
 (0)