Skip to content

Commit

Permalink
Merge pull request #290 from N0D4N/more-info-on-favorites
Browse files Browse the repository at this point in the history
More info on user's favorites
  • Loading branch information
irfan-dahir authored Sep 6, 2020
2 parents 732dcbf + 536c1cf commit 9d1a282
Show file tree
Hide file tree
Showing 6 changed files with 188 additions and 12 deletions.
14 changes: 14 additions & 0 deletions src/Model/User/FavoriteAnime.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?php


namespace Jikan\Model\User;

/**
* Class FavoriteAnime
*
* @package Jikan\Model\User
*/
class FavoriteAnime extends FavoriteListEntry
{

}
86 changes: 86 additions & 0 deletions src/Model/User/FavoriteCharacter.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
<?php


namespace Jikan\Model\User;

use Jikan\Model\Common\ItemMeta;
use Jikan\Model\Common\MalUrl;

/**
* Class FavoriteCharacter
*
* @package Jikan\Model\User
*/
class FavoriteCharacter extends ItemMeta
{

/**
* @var string
*/
private $titleName;

/**
* @var string
*/
private $titleUrl;

/**
* @var string
*/
private $titleType;

/**
* @var int
*/
private $titleMalId;


/**
* FavoriteCharacter constructor.
*
* @param string $name
* @param string $url
* @param string $imageUrl
* @param MalUrl $malUrl
*/
public function __construct(string $name, string $url, string $imageUrl, MalUrl $malUrl)
{
parent::__construct($name, $url, $imageUrl);
$this->titleName = $malUrl->getTitle();
$this->titleUrl = $malUrl->getUrl();
$this->titleType = $malUrl->getType();
$this->titleMalId = $malUrl->getMalId();
}

/**
* @return string
*/
public function getTitleUrl(): string
{
return $this->titleUrl;
}

/**
* @return string
*/
public function getTitleName(): string
{
return $this->titleName;
}

/**
* @return string
*/
public function getTitleType(): string
{
return $this->titleType;
}

/**
* @return int
*/
public function getTitleMalId(): int
{
return $this->titleMalId;
}
}
54 changes: 54 additions & 0 deletions src/Model/User/FavoriteListEntry.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<?php

namespace Jikan\Model\User;

use Jikan\Model\Common\ItemMeta;

/**
* Class FavoriteListEntry
*
* @package Jikan\Model\User
*/
class FavoriteListEntry extends ItemMeta
{
/**
* @var string
*/
private $type;

/**
* @var int
*/
private $startYear;

/**
* FavoriteListEntry constructor.
* @param string $name
* @param string $url
* @param string $imageUrl
* @param string $typeAndYear
*/
public function __construct(string $name, string $url, string $imageUrl, string $typeAndYear)
{
parent::__construct($name, $url, $imageUrl);
$typeAndYearArr = explode("·", $typeAndYear);
$this->type = trim($typeAndYearArr[0]);
$this->startYear = (int) trim($typeAndYearArr[1]);
}

/**
* @return string
*/
public function getEntityType(): string
{
return $this->type;
}

/**
* @return int
*/
public function getStartYear(): int
{
return $this->startYear;
}
}
14 changes: 14 additions & 0 deletions src/Model/User/FavoriteManga.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?php


namespace Jikan\Model\User;

/**
* Class FavoriteManga
*
* @package Jikan\Model\User
*/
class FavoriteManga extends FavoriteListEntry
{

}
26 changes: 17 additions & 9 deletions src/Parser/User/Profile/FavoritesParser.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@

namespace Jikan\Parser\User\Profile;

use Jikan\Helper\Constants;
use Jikan\Helper\Parser;
use Jikan\Model\Common\AnimeMeta;
use Jikan\Model\Common\CharacterMeta;
use Jikan\Model\Common\MangaMeta;
use Jikan\Model\User\FavoriteAnime;
use Jikan\Model\User\FavoriteCharacter;
use Jikan\Model\User\FavoriteManga;
use Jikan\Model\Common\PersonMeta;
use Jikan\Model\Common\MalUrl;
use Jikan\Model\User\Favorites;
use Symfony\Component\DomCrawler\Crawler;

Expand Down Expand Up @@ -51,11 +53,13 @@ public function getAnime(): array
return $this->crawler->filterXPath('//ul[@class=\'favorites-list anime\']/li')
->each(
function (Crawler $crawler) {
return new AnimeMeta(

return new FavoriteAnime(
$crawler->filterXPath('//div[position() = 2]/a')->text(),
$crawler->filterXPath('//div[position() = 2]/a')->attr('href'),
Parser::parseImageQuality($crawler->filterXPath('//div[position() = 1]/a/img')
->attr('src'))
->attr('src')),
$crawler->filterXPath('//div[position() = 2]/span')->text()
);
}
);
Expand All @@ -70,11 +74,12 @@ public function getManga(): array
return $this->crawler->filterXPath('//ul[@class=\'favorites-list manga\']/li')
->each(
function (Crawler $crawler) {
return new MangaMeta(
return new FavoriteManga(
$crawler->filterXPath('//div[position() = 2]/a')->text(),
$crawler->filterXPath('//div[position() = 2]/a')->attr('href'),
Parser::parseImageQuality($crawler->filterXPath('//div[position() = 1]/a/img')
->attr('src'))
->attr('src')),
$crawler->filterXPath('//div[position() = 2]/span')->text()
);
}
);
Expand All @@ -89,11 +94,14 @@ public function getCharacters(): array
return $this->crawler->filterXPath('//ul[@class=\'favorites-list characters\']/li')
->each(
function (Crawler $crawler) {
return new CharacterMeta(
return new FavoriteCharacter(
$crawler->filterXPath('//div[position() = 2]/a')->text(),
$crawler->filterXPath('//div[position() = 2]/a')->attr('href'),
Parser::parseImageQuality($crawler->filterXPath('//div[position() = 1]/a/img')
->attr('src'))
->attr('src')),
new MalUrl(
trim($crawler->filterXPath('//div[position() = 2]/span/a')->text()),
Constants::BASE_URL . $crawler->filterXPath('//div[position() = 2]/span/a')->attr('href'))
);
}
);
Expand Down
6 changes: 3 additions & 3 deletions test/JikanTest/Parser/UserProfile/UserProfileParserTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -121,10 +121,10 @@ public function it_gets_the_manga_stats()
public function it_gets_the_favorites()
{
self::assertInstanceOf(\Jikan\Model\User\Favorites::class, $this->parser->getFavorites());
self::assertContainsOnlyInstancesOf(\Jikan\Model\Common\AnimeMeta::class, $this->parser->getFavorites()->getAnime());
self::assertContainsOnlyInstancesOf(\Jikan\Model\Common\MangaMeta::class, $this->parser->getFavorites()->getManga());
self::assertContainsOnlyInstancesOf(\Jikan\Model\User\FavoriteAnime::class, $this->parser->getFavorites()->getAnime());
self::assertContainsOnlyInstancesOf(\Jikan\Model\User\FavoriteManga::class, $this->parser->getFavorites()->getManga());
self::assertContainsOnlyInstancesOf(
\Jikan\Model\Common\CharacterMeta::class,
\Jikan\Model\User\FavoriteCharacter::class,
$this->parser->getFavorites()->getCharacters()
);
self::assertContainsOnlyInstancesOf(\Jikan\Model\Common\PersonMeta::class, $this->parser->getFavorites()->getPeople());
Expand Down

0 comments on commit 9d1a282

Please sign in to comment.