Skip to content

Commit 9d1a282

Browse files
authored
Merge pull request #290 from N0D4N/more-info-on-favorites
More info on user's favorites
2 parents 732dcbf + 536c1cf commit 9d1a282

File tree

6 files changed

+188
-12
lines changed

6 files changed

+188
-12
lines changed

src/Model/User/FavoriteAnime.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
4+
namespace Jikan\Model\User;
5+
6+
/**
7+
* Class FavoriteAnime
8+
*
9+
* @package Jikan\Model\User
10+
*/
11+
class FavoriteAnime extends FavoriteListEntry
12+
{
13+
14+
}

src/Model/User/FavoriteCharacter.php

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
<?php
2+
3+
4+
namespace Jikan\Model\User;
5+
6+
use Jikan\Model\Common\ItemMeta;
7+
use Jikan\Model\Common\MalUrl;
8+
9+
/**
10+
* Class FavoriteCharacter
11+
*
12+
* @package Jikan\Model\User
13+
*/
14+
class FavoriteCharacter extends ItemMeta
15+
{
16+
17+
/**
18+
* @var string
19+
*/
20+
private $titleName;
21+
22+
/**
23+
* @var string
24+
*/
25+
private $titleUrl;
26+
27+
/**
28+
* @var string
29+
*/
30+
private $titleType;
31+
32+
/**
33+
* @var int
34+
*/
35+
private $titleMalId;
36+
37+
38+
/**
39+
* FavoriteCharacter constructor.
40+
*
41+
* @param string $name
42+
* @param string $url
43+
* @param string $imageUrl
44+
* @param MalUrl $malUrl
45+
*/
46+
public function __construct(string $name, string $url, string $imageUrl, MalUrl $malUrl)
47+
{
48+
parent::__construct($name, $url, $imageUrl);
49+
$this->titleName = $malUrl->getTitle();
50+
$this->titleUrl = $malUrl->getUrl();
51+
$this->titleType = $malUrl->getType();
52+
$this->titleMalId = $malUrl->getMalId();
53+
}
54+
55+
/**
56+
* @return string
57+
*/
58+
public function getTitleUrl(): string
59+
{
60+
return $this->titleUrl;
61+
}
62+
63+
/**
64+
* @return string
65+
*/
66+
public function getTitleName(): string
67+
{
68+
return $this->titleName;
69+
}
70+
71+
/**
72+
* @return string
73+
*/
74+
public function getTitleType(): string
75+
{
76+
return $this->titleType;
77+
}
78+
79+
/**
80+
* @return int
81+
*/
82+
public function getTitleMalId(): int
83+
{
84+
return $this->titleMalId;
85+
}
86+
}

src/Model/User/FavoriteListEntry.php

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<?php
2+
3+
namespace Jikan\Model\User;
4+
5+
use Jikan\Model\Common\ItemMeta;
6+
7+
/**
8+
* Class FavoriteListEntry
9+
*
10+
* @package Jikan\Model\User
11+
*/
12+
class FavoriteListEntry extends ItemMeta
13+
{
14+
/**
15+
* @var string
16+
*/
17+
private $type;
18+
19+
/**
20+
* @var int
21+
*/
22+
private $startYear;
23+
24+
/**
25+
* FavoriteListEntry constructor.
26+
* @param string $name
27+
* @param string $url
28+
* @param string $imageUrl
29+
* @param string $typeAndYear
30+
*/
31+
public function __construct(string $name, string $url, string $imageUrl, string $typeAndYear)
32+
{
33+
parent::__construct($name, $url, $imageUrl);
34+
$typeAndYearArr = explode("·", $typeAndYear);
35+
$this->type = trim($typeAndYearArr[0]);
36+
$this->startYear = (int) trim($typeAndYearArr[1]);
37+
}
38+
39+
/**
40+
* @return string
41+
*/
42+
public function getEntityType(): string
43+
{
44+
return $this->type;
45+
}
46+
47+
/**
48+
* @return int
49+
*/
50+
public function getStartYear(): int
51+
{
52+
return $this->startYear;
53+
}
54+
}

src/Model/User/FavoriteManga.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
4+
namespace Jikan\Model\User;
5+
6+
/**
7+
* Class FavoriteManga
8+
*
9+
* @package Jikan\Model\User
10+
*/
11+
class FavoriteManga extends FavoriteListEntry
12+
{
13+
14+
}

src/Parser/User/Profile/FavoritesParser.php

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22

33
namespace Jikan\Parser\User\Profile;
44

5+
use Jikan\Helper\Constants;
56
use Jikan\Helper\Parser;
6-
use Jikan\Model\Common\AnimeMeta;
7-
use Jikan\Model\Common\CharacterMeta;
8-
use Jikan\Model\Common\MangaMeta;
7+
use Jikan\Model\User\FavoriteAnime;
8+
use Jikan\Model\User\FavoriteCharacter;
9+
use Jikan\Model\User\FavoriteManga;
910
use Jikan\Model\Common\PersonMeta;
11+
use Jikan\Model\Common\MalUrl;
1012
use Jikan\Model\User\Favorites;
1113
use Symfony\Component\DomCrawler\Crawler;
1214

@@ -51,11 +53,13 @@ public function getAnime(): array
5153
return $this->crawler->filterXPath('//ul[@class=\'favorites-list anime\']/li')
5254
->each(
5355
function (Crawler $crawler) {
54-
return new AnimeMeta(
56+
57+
return new FavoriteAnime(
5558
$crawler->filterXPath('//div[position() = 2]/a')->text(),
5659
$crawler->filterXPath('//div[position() = 2]/a')->attr('href'),
5760
Parser::parseImageQuality($crawler->filterXPath('//div[position() = 1]/a/img')
58-
->attr('src'))
61+
->attr('src')),
62+
$crawler->filterXPath('//div[position() = 2]/span')->text()
5963
);
6064
}
6165
);
@@ -70,11 +74,12 @@ public function getManga(): array
7074
return $this->crawler->filterXPath('//ul[@class=\'favorites-list manga\']/li')
7175
->each(
7276
function (Crawler $crawler) {
73-
return new MangaMeta(
77+
return new FavoriteManga(
7478
$crawler->filterXPath('//div[position() = 2]/a')->text(),
7579
$crawler->filterXPath('//div[position() = 2]/a')->attr('href'),
7680
Parser::parseImageQuality($crawler->filterXPath('//div[position() = 1]/a/img')
77-
->attr('src'))
81+
->attr('src')),
82+
$crawler->filterXPath('//div[position() = 2]/span')->text()
7883
);
7984
}
8085
);
@@ -89,11 +94,14 @@ public function getCharacters(): array
8994
return $this->crawler->filterXPath('//ul[@class=\'favorites-list characters\']/li')
9095
->each(
9196
function (Crawler $crawler) {
92-
return new CharacterMeta(
97+
return new FavoriteCharacter(
9398
$crawler->filterXPath('//div[position() = 2]/a')->text(),
9499
$crawler->filterXPath('//div[position() = 2]/a')->attr('href'),
95100
Parser::parseImageQuality($crawler->filterXPath('//div[position() = 1]/a/img')
96-
->attr('src'))
101+
->attr('src')),
102+
new MalUrl(
103+
trim($crawler->filterXPath('//div[position() = 2]/span/a')->text()),
104+
Constants::BASE_URL . $crawler->filterXPath('//div[position() = 2]/span/a')->attr('href'))
97105
);
98106
}
99107
);

test/JikanTest/Parser/UserProfile/UserProfileParserTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,10 @@ public function it_gets_the_manga_stats()
121121
public function it_gets_the_favorites()
122122
{
123123
self::assertInstanceOf(\Jikan\Model\User\Favorites::class, $this->parser->getFavorites());
124-
self::assertContainsOnlyInstancesOf(\Jikan\Model\Common\AnimeMeta::class, $this->parser->getFavorites()->getAnime());
125-
self::assertContainsOnlyInstancesOf(\Jikan\Model\Common\MangaMeta::class, $this->parser->getFavorites()->getManga());
124+
self::assertContainsOnlyInstancesOf(\Jikan\Model\User\FavoriteAnime::class, $this->parser->getFavorites()->getAnime());
125+
self::assertContainsOnlyInstancesOf(\Jikan\Model\User\FavoriteManga::class, $this->parser->getFavorites()->getManga());
126126
self::assertContainsOnlyInstancesOf(
127-
\Jikan\Model\Common\CharacterMeta::class,
127+
\Jikan\Model\User\FavoriteCharacter::class,
128128
$this->parser->getFavorites()->getCharacters()
129129
);
130130
self::assertContainsOnlyInstancesOf(\Jikan\Model\Common\PersonMeta::class, $this->parser->getFavorites()->getPeople());

0 commit comments

Comments
 (0)