Version 5.1 - All the GraphQL #32
21
src/API/AbstractListItem.php
Normal file
21
src/API/AbstractListItem.php
Normal file
@ -0,0 +1,21 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* Anime List Client
|
||||
*
|
||||
* An API client for Kitsu and MyAnimeList to manage anime and manga watch lists
|
||||
*
|
||||
* PHP version 7
|
||||
*
|
||||
* @package AnimeListClient
|
||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
||||
* @copyright 2015 - 2016 Timothy J. Warren
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @version 4.0
|
||||
* @link https://github.com/timw4mail/HummingBirdAnimeClient
|
||||
*/
|
||||
|
||||
namespace Aviat\AnimeClient\API;
|
||||
|
||||
abstract class AbstractListItem implements ListItemInterface {
|
||||
|
||||
}
|
108
src/API/Kitsu/Auth.php
Normal file
108
src/API/Kitsu/Auth.php
Normal file
@ -0,0 +1,108 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* Anime List Client
|
||||
*
|
||||
* An API client for Kitsu and MyAnimeList to manage anime and manga watch lists
|
||||
*
|
||||
* PHP version 7
|
||||
*
|
||||
* @package AnimeListClient
|
||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
||||
* @copyright 2015 - 2016 Timothy J. Warren
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @version 4.0
|
||||
* @link https://github.com/timw4mail/HummingBirdAnimeClient
|
||||
*/
|
||||
|
||||
namespace Aviat\AnimeClient\API\Kitsu;
|
||||
|
||||
use Aviat\AnimeClient\AnimeClient;
|
||||
use Aviat\Ion\Di\{ContainerAware, ContainerInterface};
|
||||
|
||||
/**
|
||||
* Kitsu API Authentication
|
||||
*/
|
||||
class Auth {
|
||||
|
||||
use ContainerAware;
|
||||
|
||||
/**
|
||||
* Anime API Model
|
||||
*
|
||||
* @var \Aviat\AnimeClient\API\Kitsu\Model
|
||||
*/
|
||||
protected $model;
|
||||
|
||||
/**
|
||||
* Session object
|
||||
*
|
||||
* @var Aura\Session\Segment
|
||||
*/
|
||||
protected $segment;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param ContainerInterface $container
|
||||
*/
|
||||
public function __construct(ContainerInterface $container)
|
||||
{
|
||||
$this->setContainer($container);
|
||||
$this->segment = $container->get('session')
|
||||
->getSegment(AnimeClient::SESSION_SEGMENT);
|
||||
$this->model = $container->get('kitsu-model');
|
||||
}
|
||||
|
||||
/**
|
||||
* Make the appropriate authentication call,
|
||||
* and save the resulting auth token if successful
|
||||
*
|
||||
* @param string $password
|
||||
* @return boolean
|
||||
*/
|
||||
public function authenticate($password)
|
||||
{
|
||||
$username = $this->container->get('config')
|
||||
->get('kitsu_username');
|
||||
$auth_token = $this->model->authenticate($username, $password);
|
||||
|
||||
if (FALSE !== $auth_token)
|
||||
{
|
||||
$this->segment->set('auth_token', $auth_token);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the current user is authenticated
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function is_authenticated()
|
||||
{
|
||||
return ($this->get_auth_token() !== FALSE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear authentication values
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function logout()
|
||||
{
|
||||
$this->segment->clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the authentication token from the session
|
||||
*
|
||||
* @return string|false
|
||||
*/
|
||||
public function get_auth_token()
|
||||
{
|
||||
return $this->segment->get('auth_token', FALSE);
|
||||
}
|
||||
}
|
||||
// End of KitsuAuth.php
|
29
src/API/Kitsu/Enum/AnimeAiringStatus.php
Normal file
29
src/API/Kitsu/Enum/AnimeAiringStatus.php
Normal file
@ -0,0 +1,29 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* Anime List Client
|
||||
*
|
||||
* An API client for Kitsu and MyAnimeList to manage anime and manga watch lists
|
||||
*
|
||||
* PHP version 7
|
||||
*
|
||||
* @package AnimeListClient
|
||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
||||
* @copyright 2015 - 2016 Timothy J. Warren
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @version 4.0
|
||||
* @link https://github.com/timw4mail/HummingBirdAnimeClient
|
||||
*/
|
||||
|
||||
namespace Aviat\AnimeClient\API\Kitsu\Enum;
|
||||
|
||||
use Aviat\Ion\Enum as BaseEnum;
|
||||
|
||||
/**
|
||||
* Status of when anime is being/was/will be aired
|
||||
*/
|
||||
class AnimeAiringStatus extends BaseEnum {
|
||||
const NOT_YET_AIRED = 'Not Yet Aired';
|
||||
const AIRING = 'Currently Airing';
|
||||
const FINISHED_AIRING = 'Finished Airing';
|
||||
}
|
||||
// End of AnimeAiringStatus.php
|
32
src/API/Kitsu/Enum/AnimeShowType.php
Normal file
32
src/API/Kitsu/Enum/AnimeShowType.php
Normal file
@ -0,0 +1,32 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* Anime List Client
|
||||
*
|
||||
* An API client for Kitsu and MyAnimeList to manage anime and manga watch lists
|
||||
*
|
||||
* PHP version 7
|
||||
*
|
||||
* @package AnimeListClient
|
||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
||||
* @copyright 2015 - 2016 Timothy J. Warren
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @version 4.0
|
||||
* @link https://github.com/timw4mail/HummingBirdAnimeClient
|
||||
*/
|
||||
|
||||
namespace Aviat\AnimeClient\API\Kitsu\Enum;
|
||||
|
||||
use Aviat\Ion\Enum as BaseEnum;
|
||||
|
||||
/**
|
||||
* Type of Anime
|
||||
*/
|
||||
class AnimeShowType extends BaseEnum {
|
||||
const TV = 'TV';
|
||||
const MOVIE = 'Movie';
|
||||
const OVA = 'OVA';
|
||||
const ONA = 'ONA';
|
||||
const SPECIAL = 'Special';
|
||||
const MUSIC = 'Music';
|
||||
}
|
||||
// End of AnimeShowType.php
|
31
src/API/Kitsu/Enum/AnimeWatchingStatus.php
Normal file
31
src/API/Kitsu/Enum/AnimeWatchingStatus.php
Normal file
@ -0,0 +1,31 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* Anime List Client
|
||||
*
|
||||
* An API client for Kitsu and MyAnimeList to manage anime and manga watch lists
|
||||
*
|
||||
* PHP version 7
|
||||
*
|
||||
* @package AnimeListClient
|
||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
||||
* @copyright 2015 - 2016 Timothy J. Warren
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @version 4.0
|
||||
* @link https://github.com/timw4mail/HummingBirdAnimeClient
|
||||
*/
|
||||
|
||||
namespace Aviat\AnimeClient\API\Kitsu\Enum;
|
||||
|
||||
use Aviat\Ion\Enum as BaseEnum;
|
||||
|
||||
/**
|
||||
* Possible values for watching status for the current anime
|
||||
*/
|
||||
class AnimeWatchingStatus extends BaseEnum {
|
||||
const WATCHING = 'current';
|
||||
const PLAN_TO_WATCH = 'planned';
|
||||
const COMPLETED = 'completed';
|
||||
const ON_HOLD = 'on_hold';
|
||||
const DROPPED = 'dropped';
|
||||
}
|
||||
// End of AnimeWatchingStatus.php
|
31
src/API/Kitsu/Enum/MangaReadingStatus.php
Normal file
31
src/API/Kitsu/Enum/MangaReadingStatus.php
Normal file
@ -0,0 +1,31 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* Anime List Client
|
||||
*
|
||||
* An API client for Kitsu and MyAnimeList to manage anime and manga watch lists
|
||||
*
|
||||
* PHP version 7
|
||||
*
|
||||
* @package AnimeListClient
|
||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
||||
* @copyright 2015 - 2016 Timothy J. Warren
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @version 4.0
|
||||
* @link https://github.com/timw4mail/HummingBirdAnimeClient
|
||||
*/
|
||||
|
||||
namespace Aviat\AnimeClient\API\Kitsu\Enum;
|
||||
|
||||
use Aviat\Ion\Enum as BaseEnum;
|
||||
|
||||
/**
|
||||
* Possible values for current reading status of manga
|
||||
*/
|
||||
class MangaReadingStatus extends BaseEnum {
|
||||
const READING = 'Currently Reading';
|
||||
const PLAN_TO_READ = 'Plan to Read';
|
||||
const DROPPED = 'Dropped';
|
||||
const ON_HOLD = 'On Hold';
|
||||
const COMPLETED = 'Completed';
|
||||
}
|
||||
// End of MangaReadingStatus.php
|
68
src/API/Kitsu/Model.php
Normal file
68
src/API/Kitsu/Model.php
Normal file
@ -0,0 +1,68 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* Anime List Client
|
||||
*
|
||||
* An API client for Kitsu and MyAnimeList to manage anime and manga watch lists
|
||||
*
|
||||
* PHP version 7
|
||||
*
|
||||
* @package AnimeListClient
|
||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
||||
* @copyright 2015 - 2016 Timothy J. Warren
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @version 4.0
|
||||
* @link https://github.com/timw4mail/HummingBirdAnimeClient
|
||||
*/
|
||||
|
||||
namespace Aviat\AnimeClient\API\Kitsu;
|
||||
|
||||
use Aviat\AnimeClient\Model\API;
|
||||
|
||||
/**
|
||||
* Kitsu API Model
|
||||
*/
|
||||
class Model extends API {
|
||||
|
||||
const CLIENT_ID = 'dd031b32d2f56c990b1425efe6c42ad847e7fe3ab46bf1299f05ecd856bdb7dd';
|
||||
const CLIENT_SECRET = '54d7307928f63414defd96399fc31ba847961ceaecef3a5fd93144e960c0e151';
|
||||
|
||||
/**
|
||||
* Base url for Kitsu API
|
||||
*/
|
||||
protected $baseUrl = 'https://kitsu.io/api/edge/';
|
||||
|
||||
/**
|
||||
* Default settings for Guzzle
|
||||
* @var array
|
||||
*/
|
||||
protected $connectionDefaults = [];
|
||||
|
||||
/**
|
||||
* Get the access token from the Kitsu API
|
||||
*
|
||||
* @param string $username
|
||||
* @param string $password
|
||||
* @return bool|string
|
||||
*/
|
||||
public function authenticate(string $username, string $password)
|
||||
{
|
||||
$response = $this->post('https://kitsu.io/api/oauth/token', [
|
||||
'body' => http_build_query([
|
||||
'grant_type' => 'password',
|
||||
'username' => $username,
|
||||
'password' => $password,
|
||||
'client_id' => self::CLIENT_ID,
|
||||
'client_secret' => self::CLIENT_SECRET
|
||||
])
|
||||
]);
|
||||
|
||||
$info = $response->getBody();
|
||||
|
||||
if (array_key_exists('access_token', $info)) {
|
||||
// @TODO save token
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
149
src/API/Kitsu/Transformer/AnimeListTransformer.php
Normal file
149
src/API/Kitsu/Transformer/AnimeListTransformer.php
Normal file
@ -0,0 +1,149 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* Anime List Client
|
||||
*
|
||||
* An API client for Kitsu and MyAnimeList to manage anime and manga watch lists
|
||||
*
|
||||
* PHP version 7
|
||||
*
|
||||
* @package AnimeListClient
|
||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
||||
* @copyright 2015 - 2016 Timothy J. Warren
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @version 4.0
|
||||
* @link https://github.com/timw4mail/HummingBirdAnimeClient
|
||||
*/
|
||||
|
||||
namespace Aviat\AnimeClient\API\Kitsu\Transformer;
|
||||
|
||||
use Aviat\Ion\Transformer\AbstractTransformer;
|
||||
|
||||
/**
|
||||
* Transformer for anime list
|
||||
*/
|
||||
class AnimeListTransformer extends AbstractTransformer {
|
||||
|
||||
/**
|
||||
* Convert raw api response to a more
|
||||
* logical and workable structure
|
||||
*
|
||||
* @param array $item API library item
|
||||
* @return array
|
||||
*/
|
||||
public function transform($item)
|
||||
{
|
||||
print_r($item);
|
||||
die();
|
||||
$anime =& $item['anime'];
|
||||
$genres = $this->linearizeGenres($item['anime']['genres']);
|
||||
|
||||
$rating = NULL;
|
||||
if ($item['rating']['type'] === 'advanced')
|
||||
{
|
||||
$rating = is_numeric($item['rating']['value'])
|
||||
? (int) 2 * $item['rating']['value']
|
||||
: '-';
|
||||
}
|
||||
|
||||
$total_episodes = is_numeric($anime['episode_count'])
|
||||
? $anime['episode_count']
|
||||
: '-';
|
||||
|
||||
$alternate_title = NULL;
|
||||
if (array_key_exists('alternate_title', $anime))
|
||||
{
|
||||
// If the alternate title is very similar, or
|
||||
// a subset of the main title, don't list the
|
||||
// alternate title
|
||||
$not_subset = stripos($anime['title'], $anime['alternate_title']) === FALSE;
|
||||
$diff = levenshtein($anime['title'], $anime['alternate_title'] ?? '');
|
||||
if ($not_subset && $diff >= 5)
|
||||
{
|
||||
$alternate_title = $anime['alternate_title'];
|
||||
}
|
||||
}
|
||||
|
||||
return [
|
||||
'id' => $item['id'],
|
||||
'episodes' => [
|
||||
'watched' => $item['episodes_watched'],
|
||||
'total' => $total_episodes,
|
||||
'length' => $anime['episode_length'],
|
||||
],
|
||||
'airing' => [
|
||||
'status' => $anime['status'],
|
||||
'started' => $anime['started_airing'],
|
||||
'ended' => $anime['finished_airing']
|
||||
],
|
||||
'anime' => [
|
||||
'age_rating' => $anime['age_rating'],
|
||||
'title' => $anime['title'],
|
||||
'alternate_title' => $alternate_title,
|
||||
'slug' => $anime['slug'],
|
||||
'url' => $anime['url'],
|
||||
'type' => $anime['show_type'],
|
||||
'image' => $anime['cover_image'],
|
||||
'genres' => $genres,
|
||||
],
|
||||
'watching_status' => $item['status'],
|
||||
'notes' => $item['notes'],
|
||||
'rewatching' => (bool) $item['rewatching'],
|
||||
'rewatched' => $item['rewatched_times'],
|
||||
'user_rating' => $rating,
|
||||
'private' => (bool) $item['private'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert transformed data to
|
||||
* api response format
|
||||
*
|
||||
* @param array $item Transformed library item
|
||||
* @return array API library item
|
||||
*/
|
||||
public function untransform($item)
|
||||
{
|
||||
// Messy mapping of boolean values to their API string equivalents
|
||||
$privacy = 'public';
|
||||
if (array_key_exists('private', $item) && $item['private'])
|
||||
{
|
||||
$privacy = 'private';
|
||||
}
|
||||
|
||||
$rewatching = 'false';
|
||||
if (array_key_exists('rewatching', $item) && $item['rewatching'])
|
||||
{
|
||||
$rewatching = 'true';
|
||||
}
|
||||
|
||||
return [
|
||||
'id' => $item['id'],
|
||||
'status' => $item['watching_status'],
|
||||
'sane_rating_update' => $item['user_rating'] / 2,
|
||||
'rewatching' => $rewatching,
|
||||
'rewatched_times' => $item['rewatched'],
|
||||
'notes' => $item['notes'],
|
||||
'episodes_watched' => $item['episodes_watched'],
|
||||
'privacy' => $privacy
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Simplify structure of genre list
|
||||
*
|
||||
* @param array $rawGenres
|
||||
* @return array
|
||||
*/
|
||||
protected function linearizeGenres(array $rawGenres): array
|
||||
{
|
||||
$genres = [];
|
||||
|
||||
foreach ($rawGenres as $genre)
|
||||
{
|
||||
$genres[] = $genre['name'];
|
||||
}
|
||||
|
||||
return $genres;
|
||||
}
|
||||
}
|
||||
// End of AnimeListTransformer.php
|
121
src/API/Kitsu/Transformer/MangaListTransformer.php
Normal file
121
src/API/Kitsu/Transformer/MangaListTransformer.php
Normal file
@ -0,0 +1,121 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* Anime List Client
|
||||
*
|
||||
* An API client for Kitsu and MyAnimeList to manage anime and manga watch lists
|
||||
*
|
||||
* PHP version 7
|
||||
*
|
||||
* @package AnimeListClient
|
||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
||||
* @copyright 2015 - 2016 Timothy J. Warren
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @version 4.0
|
||||
* @link https://github.com/timw4mail/HummingBirdAnimeClient
|
||||
*/
|
||||
|
||||
namespace Aviat\AnimeClient\API\Kitsu\Transformer;
|
||||
|
||||
use Aviat\Ion\Transformer\AbstractTransformer;
|
||||
|
||||
/**
|
||||
* Data transformation class for zippered Hummingbird manga
|
||||
*/
|
||||
class MangaListTransformer extends AbstractTransformer {
|
||||
|
||||
use \Aviat\Ion\StringWrapper;
|
||||
|
||||
/**
|
||||
* Remap zipped anime data to a more logical form
|
||||
*
|
||||
* @param array $item manga entry item
|
||||
* @return array
|
||||
*/
|
||||
public function transform($item)
|
||||
{
|
||||
$manga =& $item['manga'];
|
||||
|
||||
$rating = (is_numeric($item['rating']))
|
||||
? intval(2 * $item['rating'])
|
||||
: '-';
|
||||
|
||||
$total_chapters = ($manga['chapter_count'] > 0)
|
||||
? $manga['chapter_count']
|
||||
: '-';
|
||||
|
||||
$total_volumes = ($manga['volume_count'] > 0)
|
||||
? $manga['volume_count']
|
||||
: '-';
|
||||
|
||||
$map = [
|
||||
'id' => $item['id'],
|
||||
'chapters' => [
|
||||
'read' => $item['chapters_read'],
|
||||
'total' => $total_chapters
|
||||
],
|
||||
'volumes' => [
|
||||
'read' => $item['volumes_read'],
|
||||
'total' => $total_volumes
|
||||
],
|
||||
'manga' => [
|
||||
'title' => $manga['romaji_title'],
|
||||
'alternate_title' => NULL,
|
||||
'slug' => $manga['id'],
|
||||
'url' => 'https://hummingbird.me/manga/' . $manga['id'],
|
||||
'type' => $manga['manga_type'],
|
||||
'image' => $manga['poster_image_thumb'],
|
||||
'genres' => $manga['genres'],
|
||||
],
|
||||
'reading_status' => $item['status'],
|
||||
'notes' => $item['notes'],
|
||||
'rereading' => (bool)$item['rereading'],
|
||||
'reread' => $item['reread_count'],
|
||||
'user_rating' => $rating,
|
||||
];
|
||||
|
||||
if (array_key_exists('english_title', $manga))
|
||||
{
|
||||
$diff = levenshtein($manga['romaji_title'], $manga['english_title']);
|
||||
|
||||
// If the titles are REALLY similar, don't bother showing both
|
||||
if ($diff >= 5)
|
||||
{
|
||||
$map['manga']['alternate_title'] = $manga['english_title'];
|
||||
}
|
||||
}
|
||||
|
||||
return $map;
|
||||
}
|
||||
|
||||
/**
|
||||
* Untransform data to update the api
|
||||
*
|
||||
* @param array $item
|
||||
* @return array
|
||||
*/
|
||||
public function untransform($item)
|
||||
{
|
||||
$rereading = (array_key_exists('rereading', $item)) && (bool)$item['rereading'];
|
||||
|
||||
$map = [
|
||||
'id' => $item['id'],
|
||||
'manga_id' => $item['manga_id'],
|
||||
'status' => $item['status'],
|
||||
'chapters_read' => (int)$item['chapters_read'],
|
||||
'volumes_read' => (int)$item['volumes_read'],
|
||||
'rereading' => $rereading,
|
||||
'reread_count' => (int)$item['reread_count'],
|
||||
'notes' => $item['notes'],
|
||||
];
|
||||
|
||||
if ($item['new_rating'] !== $item['old_rating'] && $item['new_rating'] !== "")
|
||||
{
|
||||
$map['rating'] = ($item['new_rating'] > 0)
|
||||
? $item['new_rating'] / 2
|
||||
: $item['old_rating'] / 2;
|
||||
}
|
||||
|
||||
return $map;
|
||||
}
|
||||
}
|
||||
// End of MangaListTransformer.php
|
56
src/API/ListItemInterface.php
Normal file
56
src/API/ListItemInterface.php
Normal file
@ -0,0 +1,56 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* Anime List Client
|
||||
*
|
||||
* An API client for Kitsu and MyAnimeList to manage anime and manga watch lists
|
||||
*
|
||||
* PHP version 7
|
||||
*
|
||||
* @package AnimeListClient
|
||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
||||
* @copyright 2015 - 2016 Timothy J. Warren
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @version 4.0
|
||||
* @link https://github.com/timw4mail/HummingBirdAnimeClient
|
||||
*/
|
||||
|
||||
namespace Aviat\AnimeClient\API;
|
||||
|
||||
/**
|
||||
* Common interface for anime and manga list item CRUD
|
||||
*/
|
||||
interface ListItemInterface {
|
||||
|
||||
/**
|
||||
* Create a list item
|
||||
*
|
||||
* @param array $data -
|
||||
* @return bool
|
||||
*/
|
||||
public function create(array $data): bool;
|
||||
|
||||
/**
|
||||
* Retrieve a list item
|
||||
*
|
||||
* @param string $id - The id of the list item
|
||||
* @return array
|
||||
*/
|
||||
public function get(string $id): array;
|
||||
|
||||
/**
|
||||
* Update a list item
|
||||
*
|
||||
* @param string $id - The id of the list tiem to update
|
||||
* @param array $data - The data with which to update the list itme
|
||||
* @return bool
|
||||
*/
|
||||
public function update(string $id, array $data): bool;
|
||||
|
||||
/**
|
||||
* Delete a list item
|
||||
*
|
||||
* @param string $id - The id of the list item to delete
|
||||
* @return bool
|
||||
*/
|
||||
public function delete(string $id): bool;
|
||||
}
|
108
src/API/MAL/Auth.php
Normal file
108
src/API/MAL/Auth.php
Normal file
@ -0,0 +1,108 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* Anime List Client
|
||||
*
|
||||
* An API client for Kitsu and MyAnimeList to manage anime and manga watch lists
|
||||
*
|
||||
* PHP version 7
|
||||
*
|
||||
* @package AnimeListClient
|
||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
||||
* @copyright 2015 - 2016 Timothy J. Warren
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @version 4.0
|
||||
* @link https://github.com/timw4mail/HummingBirdAnimeClient
|
||||
*/
|
||||
|
||||
namespace Aviat\AnimeClient\API\MAL;
|
||||
|
||||
use Aviat\AnimeClient\AnimeClient;
|
||||
use Aviat\Ion\Di\{ContainerAware, ContainerInterface};
|
||||
|
||||
/**
|
||||
* MAL API Authentication
|
||||
*/
|
||||
class Auth {
|
||||
|
||||
use \Aviat\Ion\Di\ContainerAware;
|
||||
|
||||
/**
|
||||
* Anime API Model
|
||||
*
|
||||
* @var \Aviat\AnimeClient\Model\API
|
||||
*/
|
||||
protected $model;
|
||||
|
||||
/**
|
||||
* Session object
|
||||
*
|
||||
* @var Aura\Session\Segment
|
||||
*/
|
||||
protected $segment;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param ContainerInterface $container
|
||||
*/
|
||||
public function __construct(ContainerInterface $container)
|
||||
{
|
||||
$this->setContainer($container);
|
||||
$this->segment = $container->get('session')
|
||||
->getSegment(AnimeClient::SESSION_SEGMENT);
|
||||
$this->model = $container->get('api-model');
|
||||
}
|
||||
|
||||
/**
|
||||
* Make the appropriate authentication call,
|
||||
* and save the resulting auth token if successful
|
||||
*
|
||||
* @param string $password
|
||||
* @return boolean
|
||||
*/
|
||||
public function authenticate($password)
|
||||
{
|
||||
$username = $this->container->get('config')
|
||||
->get('hummingbird_username');
|
||||
$auth_token = $this->model->authenticate($username, $password);
|
||||
|
||||
if (FALSE !== $auth_token)
|
||||
{
|
||||
$this->segment->set('auth_token', $auth_token);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the current user is authenticated
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function is_authenticated()
|
||||
{
|
||||
return ($this->get_auth_token() !== FALSE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear authentication values
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function logout()
|
||||
{
|
||||
$this->segment->clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the authentication token from the session
|
||||
*
|
||||
* @return string|false
|
||||
*/
|
||||
public function get_auth_token()
|
||||
{
|
||||
return $this->segment->get('auth_token', FALSE);
|
||||
}
|
||||
}
|
||||
// End of KitsuAuth.php
|
63
src/API/MAL/Model.php
Normal file
63
src/API/MAL/Model.php
Normal file
@ -0,0 +1,63 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* Anime List Client
|
||||
*
|
||||
* An API client for Kitsu and MyAnimeList to manage anime and manga watch lists
|
||||
*
|
||||
* PHP version 7
|
||||
*
|
||||
* @package AnimeListClient
|
||||
* @author Timothy J. Warren <tim@timshomepage.net>
|
||||
* @copyright 2015 - 2016 Timothy J. Warren
|
||||
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||
* @version 4.0
|
||||
* @link https://github.com/timw4mail/HummingBirdAnimeClient
|
||||
*/
|
||||
|
||||
namespace Aviat\AnimeClient\API\Kitsu;
|
||||
|
||||
use Aviat\AnimeClient\Model\API;
|
||||
|
||||
/**
|
||||
* MyAnimeList API Model
|
||||
*/
|
||||
class Model extends API {
|
||||
|
||||
/**
|
||||
* Base url for Kitsu API
|
||||
*/
|
||||
protected $baseUrl = 'https://myanimelist.net/api/';
|
||||
|
||||
/**
|
||||
* Default settings for Guzzle
|
||||
* @var array
|
||||
*/
|
||||
protected $connectionDefaults = [];
|
||||
|
||||
/**
|
||||
* Get the access token from the Kitsu API
|
||||
*
|
||||
* @param string $username
|
||||
* @param string $password
|
||||
* @return bool|string
|
||||
*/
|
||||
public function authenticate(string $username, string $password)
|
||||
{
|
||||
$response = $this->post('account/', [
|
||||
'body' => http_build_query([
|
||||
'grant_type' => 'password',
|
||||
'username' => $username,
|
||||
'password' => $password
|
||||
])
|
||||
]);
|
||||
|
||||
$info = $response->getBody();
|
||||
|
||||
if (array_key_exists('access_token', $info)) {
|
||||
// @TODO save token
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user