update & separate genre indexer: indexer:genres

This commit is contained in:
Irfan 2021-11-13 04:53:39 +05:00
parent 97b3a10253
commit 01e29b06d5
4 changed files with 198 additions and 9 deletions

View File

@ -113,22 +113,49 @@ class CommonIndexer extends Command
'json'
),
true
)['genres'];
);
if (HttpHelper::hasError($results)) {
echo "FAILED: {$results->original['error']}\n";
return;
}
$itemCount = count($results);
$itemCount = count($results['genres']);
echo "Parsed {$itemCount} anime genres\n";
foreach ($results as $i => $item) {
foreach ($results['genres'] as $i => $item) {
$result = DB::table('genres_anime')
->where('mal_id', $item['mal_id'])
->updateOrInsert(['request_hash'=>'request:anime_genres:'.sha1($item['mal_id'].$item['name'])]+$item);
echo "Indexing {$i}/{$itemCount} \r";
}
$itemCount = count($results['explicit_genres']);
echo "Parsed {$itemCount} anime explicit_genres\n";
foreach ($results['explicit_genres'] as $i => $item) {
$result = DB::table('explicit_genres_anime')
->where('mal_id', $item['mal_id'])
->updateOrInsert(['request_hash'=>'request:anime_explicit_genres:'.sha1($item['mal_id'].$item['name'])]+$item);
echo "Indexing {$i}/{$itemCount} \r";
}
$itemCount = count($results['themes']);
echo "Parsed {$itemCount} anime themes\n";
foreach ($results['themes'] as $i => $item) {
$result = DB::table('themes_anime')
->where('mal_id', $item['mal_id'])
->updateOrInsert(['request_hash'=>'request:anime_themes:'.sha1($item['mal_id'].$item['name'])]+$item);
echo "Indexing {$i}/{$itemCount} \r";
}
$itemCount = count($results['demographics']);
echo "Parsed {$itemCount} anime demographics\n";
foreach ($results['demographics'] as $i => $item) {
$result = DB::table('demographics_anime')
->where('mal_id', $item['mal_id'])
->updateOrInsert(['request_hash'=>'request:anime_demographics:'.sha1($item['mal_id'].$item['name'])]+$item);
echo "Indexing {$i}/{$itemCount} \r";
}
/**
* Manga Genres
*/

View File

@ -0,0 +1,158 @@
<?php
namespace App\Console\Commands\Indexer;
use App\Http\HttpHelper;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
use Jikan\Request\Genre\AnimeGenresRequest;
use Jikan\Request\Genre\MangaGenresRequest;
class GenreIndexer extends Command
{
/**
* The name and signature of the console command.
*`
* @var string
*/
protected $signature = 'indexer:genres';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Index Anime & Manga Genres';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
echo "Note: If an entry already exists, it will be updated instead.\n\n";
/**
* Anime Genres
*/
echo "Indexing Anime Genres...\n";
$results = \json_decode(
app('SerializerV4')->serialize(
app('JikanParser')
->getAnimeGenres(new AnimeGenresRequest()),
'json'
),
true
);
if (HttpHelper::hasError($results)) {
echo "FAILED: {$results->original['error']}\n";
return;
}
$itemCount = count($results['genres']);
echo "Parsed {$itemCount} anime genres\n";
foreach ($results['genres'] as $i => $item) {
$result = DB::table('genres_anime')
->where('mal_id', $item['mal_id'])
->updateOrInsert(['request_hash'=>'request:anime_genres:'.sha1($item['mal_id'].$item['name'])]+$item);
echo "Indexing {$i}/{$itemCount} \r";
}
$itemCount = count($results['explicit_genres']);
echo "Parsed {$itemCount} anime explicit_genres\n";
foreach ($results['explicit_genres'] as $i => $item) {
$result = DB::table('explicit_genres_anime')
->where('mal_id', $item['mal_id'])
->updateOrInsert(['request_hash'=>'request:anime_explicit_genres:'.sha1($item['mal_id'].$item['name'])]+$item);
echo "Indexing {$i}/{$itemCount} \r";
}
$itemCount = count($results['themes']);
echo "Parsed {$itemCount} anime themes\n";
foreach ($results['themes'] as $i => $item) {
$result = DB::table('themes_anime')
->where('mal_id', $item['mal_id'])
->updateOrInsert(['request_hash'=>'request:anime_themes:'.sha1($item['mal_id'].$item['name'])]+$item);
echo "Indexing {$i}/{$itemCount} \r";
}
$itemCount = count($results['demographics']);
echo "Parsed {$itemCount} anime demographics\n";
foreach ($results['demographics'] as $i => $item) {
$result = DB::table('demographics_anime')
->where('mal_id', $item['mal_id'])
->updateOrInsert(['request_hash'=>'request:anime_demographics:'.sha1($item['mal_id'].$item['name'])]+$item);
echo "Indexing {$i}/{$itemCount} \r";
}
/**
* Manga Genres
*/
echo "Indexing Manga Genres...\n";
$results = \json_decode(
app('SerializerV4')->serialize(
app('JikanParser')
->getMangaGenres(new MangaGenresRequest()),
'json'
),
true
);
if (HttpHelper::hasError($results)) {
echo "FAILED: {$results->original['error']}\n";
return;
}
$itemCount = count($results['genres']);
echo "Parsed {$itemCount} manga genres\n";
foreach ($results['genres'] as $i => $item) {
$result = DB::table('genres_manga')
->where('mal_id', $item['mal_id'])
->updateOrInsert(['request_hash'=>'request:manga_genres:'.sha1($item['mal_id'].$item['name'])]+$item);
echo "Indexing {$i}/{$itemCount} \r";
}
$itemCount = count($results['explicit_genres']);
echo "Parsed {$itemCount} manga explicit_genres\n";
foreach ($results['explicit_genres'] as $i => $item) {
$result = DB::table('explicit_genres_manga')
->where('mal_id', $item['mal_id'])
->updateOrInsert(['request_hash'=>'request:manga_explicit_genres:'.sha1($item['mal_id'].$item['name'])]+$item);
echo "Indexing {$i}/{$itemCount} \r";
}
$itemCount = count($results['themes']);
echo "Parsed {$itemCount} manga themes\n";
foreach ($results['themes'] as $i => $item) {
$result = DB::table('themes_manga')
->where('mal_id', $item['mal_id'])
->updateOrInsert(['request_hash'=>'request:manga_themes:'.sha1($item['mal_id'].$item['name'])]+$item);
echo "Indexing {$i}/{$itemCount} \r";
}
$itemCount = count($results['demographics']);
echo "Parsed {$itemCount} manga demographics\n";
foreach ($results['demographics'] as $i => $item) {
$result = DB::table('demographics_manga')
->where('mal_id', $item['mal_id'])
->updateOrInsert(['request_hash'=>'request:manga_demographics:'.sha1($item['mal_id'].$item['name'])]+$item);
echo "Indexing {$i}/{$itemCount} \r";
}
echo str_pad("Indexing complete", 10).PHP_EOL;
}
}

View File

@ -12,8 +12,8 @@ use App\Console\Commands\Indexer\AnimeIndexer;
use App\Console\Commands\Indexer\AnimeScheduleIndexer;
use App\Console\Commands\Indexer\CommonIndexer;
use App\Console\Commands\Indexer\CurrentSeasonIndexer;
use App\Console\Commands\Indexer\GenreIndexer;
use App\Console\Commands\Indexer\MangaIndexer;
use App\Console\Commands\Indexer\ScheduleIndexer;
use App\Console\Commands\ManageMicrocaching;
use App\Console\Commands\ModifyCacheDriver;
use App\Console\Commands\ModifyCacheMethod;
@ -38,7 +38,8 @@ class Kernel extends ConsoleKernel
CurrentSeasonIndexer::class,
ManageMicrocaching::class,
AnimeIndexer::class,
MangaIndexer::class
MangaIndexer::class,
GenreIndexer::class
];
/**
@ -61,5 +62,8 @@ class Kernel extends ConsoleKernel
// Update common indexes daily
$schedule->command('indexer:common')
->daily();
$schedule->command('indexer:genres')
->daily();
}
}

8
composer.lock generated
View File

@ -2931,12 +2931,12 @@
"source": {
"type": "git",
"url": "https://github.com/jikan-me/jikan.git",
"reference": "77a6ea88472aad8ab3f6a7ae485341fb4c7c6c6e"
"reference": "74209b3b675bdbfc09fc5e6d53cbafdc89a04cf4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/jikan-me/jikan/zipball/77a6ea88472aad8ab3f6a7ae485341fb4c7c6c6e",
"reference": "77a6ea88472aad8ab3f6a7ae485341fb4c7c6c6e",
"url": "https://api.github.com/repos/jikan-me/jikan/zipball/74209b3b675bdbfc09fc5e6d53cbafdc89a04cf4",
"reference": "74209b3b675bdbfc09fc5e6d53cbafdc89a04cf4",
"shasum": ""
},
"require": {
@ -2985,7 +2985,7 @@
"type": "patreon"
}
],
"time": "2021-11-12T22:51:32+00:00"
"time": "2021-11-12T23:18:34+00:00"
},
{
"name": "jms/metadata",