Version 5.1 - All the GraphQL #32
@ -33,6 +33,8 @@ class ListItem extends AbstractListItem {
|
|||||||
|
|
||||||
private function getAuthHeader()
|
private function getAuthHeader()
|
||||||
{
|
{
|
||||||
|
$cache = $this->getContainer()->get('cache');
|
||||||
|
$cacheItem = $cache->getItem('kitsu-auth-token');
|
||||||
$sessionSegment = $this->getContainer()
|
$sessionSegment = $this->getContainer()
|
||||||
->get('session')
|
->get('session')
|
||||||
->getSegment(SESSION_SEGMENT);
|
->getSegment(SESSION_SEGMENT);
|
||||||
@ -43,6 +45,12 @@ class ListItem extends AbstractListItem {
|
|||||||
return "bearer {$token}";
|
return "bearer {$token}";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($cacheItem->isHit())
|
||||||
|
{
|
||||||
|
$token = $cacheItem->get();
|
||||||
|
return "bearer {$token}";
|
||||||
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -223,6 +223,33 @@ class Model {
|
|||||||
return $raw;
|
return $raw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find a media item on Kitsu by its associated MAL id
|
||||||
|
*
|
||||||
|
* @param string $malId
|
||||||
|
* @param string $type "anime" or "manga"
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getKitsuIdFromMALId(string $malId, string $type="anime"): string
|
||||||
|
{
|
||||||
|
$options = [
|
||||||
|
'query' => [
|
||||||
|
'filter' => [
|
||||||
|
'external_site' => "myanimelist/{$type}",
|
||||||
|
'external_id' => $malId
|
||||||
|
],
|
||||||
|
'fields' => [
|
||||||
|
'media' => 'id,slug'
|
||||||
|
],
|
||||||
|
'include' => 'media'
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
||||||
|
$raw = $this->getRequest('mappings', $options);
|
||||||
|
|
||||||
|
return $raw['included'][0]['id'];
|
||||||
|
}
|
||||||
|
|
||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
// ! Anime-specific methods
|
// ! Anime-specific methods
|
||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
|
@ -62,13 +62,21 @@ class SyncKitsuWithMal extends BaseCommand {
|
|||||||
$this->echoBox("Number of Kitsu list items: {$kitsuCount}");
|
$this->echoBox("Number of Kitsu list items: {$kitsuCount}");
|
||||||
|
|
||||||
$data = $this->diffAnimeLists();
|
$data = $this->diffAnimeLists();
|
||||||
$this->echoBox("Number of items that need to be added to MAL: " . count($data));
|
$this->echoBox("Number of items that need to be added to MAL: " . count($data['addToMAL']));
|
||||||
|
|
||||||
if ( ! empty($data['addToMAL']))
|
if ( ! empty($data['addToMAL']))
|
||||||
{
|
{
|
||||||
$this->echoBox("Adding missing list items to MAL");
|
$this->echoBox("Adding missing list items to MAL");
|
||||||
$this->createMALAnimeListItems($data['addToMAL']);
|
$this->createMALAnimeListItems($data['addToMAL']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->echoBox('Number of items that need to be added to Kitsu: ' . count($data['addToKitsu']));
|
||||||
|
|
||||||
|
if ( ! empty($data['addToKitsu']))
|
||||||
|
{
|
||||||
|
$this->echoBox("Adding missing list items to Kitsu");
|
||||||
|
$this->createKitusAnimeListItems($data['addToKitsu']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getKitsuAnimeList()
|
public function getKitsuAnimeList()
|
||||||
@ -137,7 +145,7 @@ class SyncKitsuWithMal extends BaseCommand {
|
|||||||
? $item['times_rewatched']
|
? $item['times_rewatched']
|
||||||
: 0,
|
: 0,
|
||||||
// 'notes' => ,
|
// 'notes' => ,
|
||||||
'rating' => $item['my_score'],
|
'rating' => $item['my_score'] / 2,
|
||||||
'updatedAt' => (new \DateTime())
|
'updatedAt' => (new \DateTime())
|
||||||
->setTimestamp((int)$item['my_last_updated'])
|
->setTimestamp((int)$item['my_last_updated'])
|
||||||
->format(\DateTime::W3C),
|
->format(\DateTime::W3C),
|
||||||
@ -201,10 +209,24 @@ class SyncKitsuWithMal extends BaseCommand {
|
|||||||
$malList = $this->formatMALAnimeList();
|
$malList = $this->formatMALAnimeList();
|
||||||
|
|
||||||
$itemsToAddToMAL = [];
|
$itemsToAddToMAL = [];
|
||||||
|
$itemsToAddToKitsu = [];
|
||||||
|
|
||||||
|
$malIds = array_column($malList, 'id');
|
||||||
|
$kitsuMalIds = array_column($kitsuList, 'malId');
|
||||||
|
$missingMalIds = array_diff($malIds, $kitsuMalIds);
|
||||||
|
|
||||||
|
foreach($missingMalIds as $mid)
|
||||||
|
{
|
||||||
|
// print_r($malList[$mid]);
|
||||||
|
$itemsToAddToKitsu[] = array_merge($malList[$mid]['data'], [
|
||||||
|
'id' => $this->kitsuModel->getKitsuIdFromMALId($mid),
|
||||||
|
'type' => 'anime'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
foreach($kitsuList as $kitsuItem)
|
foreach($kitsuList as $kitsuItem)
|
||||||
{
|
{
|
||||||
if (array_key_exists($kitsuItem['malId'], $malList))
|
if (in_array($kitsuItem['malId'], $malIds))
|
||||||
{
|
{
|
||||||
// Eventually, compare the list entries, and determine which
|
// Eventually, compare the list entries, and determine which
|
||||||
// needs to be updated
|
// needs to be updated
|
||||||
@ -230,9 +252,37 @@ class SyncKitsuWithMal extends BaseCommand {
|
|||||||
|
|
||||||
return [
|
return [
|
||||||
'addToMAL' => $itemsToAddToMAL,
|
'addToMAL' => $itemsToAddToMAL,
|
||||||
|
'addToKitsu' => $itemsToAddToKitsu
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function createKitusAnimeListItems($itemsToAdd)
|
||||||
|
{
|
||||||
|
$requests = [];
|
||||||
|
foreach($itemsToAdd as $item)
|
||||||
|
{
|
||||||
|
$requests[] = $this->kitsuModel->createListItem($item);
|
||||||
|
}
|
||||||
|
|
||||||
|
$promiseArray = (new Client())->requestMulti($requests);
|
||||||
|
|
||||||
|
$responses = wait(all($promiseArray));
|
||||||
|
|
||||||
|
foreach($responses as $key => $response)
|
||||||
|
{
|
||||||
|
$id = $itemsToAdd[$key]['id'];
|
||||||
|
if ($response->getStatus() === 201)
|
||||||
|
{
|
||||||
|
$this->echoBox("Successfully create list item with id: {$id}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
echo $response->getBody();
|
||||||
|
$this->echoBox("Failed to create list item with id: {$id}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public function createMALAnimeListItems($itemsToAdd)
|
public function createMALAnimeListItems($itemsToAdd)
|
||||||
{
|
{
|
||||||
$transformer = new ALT();
|
$transformer = new ALT();
|
||||||
|
Loading…
Reference in New Issue
Block a user