mirror of
https://github.com/jikan-me/jikan-rest.git
synced 2025-02-20 11:23:35 +08:00
add manga endpoints
This commit is contained in:
parent
fe0dde56f3
commit
5e2b8cc91f
@ -3,10 +3,6 @@
|
||||
namespace App;
|
||||
|
||||
use Jenssegers\Mongodb\Eloquent\Model;
|
||||
use Jikan\Helper\Media;
|
||||
use Jikan\Helper\Parser;
|
||||
use Jikan\Jikan;
|
||||
use Jikan\Model\Common\YoutubeMeta;
|
||||
|
||||
class Anime extends Model
|
||||
{
|
||||
|
@ -87,12 +87,12 @@ class GenreController extends Controller
|
||||
$items = $data->items() ?? [];
|
||||
foreach ($items as &$item) {
|
||||
|
||||
if (isset($item['aired']['from'])) {
|
||||
$item['airing_start'] = $item['aired']['from'];
|
||||
if (isset($item['aired'])) {
|
||||
$item['airing_start'] = $item['aired']['from'] ?? null;
|
||||
}
|
||||
|
||||
if (isset($item['published']['from'])) {
|
||||
$item['publishing_start'] = $item['aired']['from'];
|
||||
if (isset($item['published'])) {
|
||||
$item['publishing_start'] = $item['aired']['from'] ?? null;
|
||||
}
|
||||
|
||||
if (isset($item['serializations'])) {
|
||||
|
@ -25,7 +25,7 @@ class MagazineController extends Controller
|
||||
->paginate(
|
||||
self::MAX_RESULTS_PER_PAGE,
|
||||
[
|
||||
'mal_id', 'url', 'title', 'image_url', 'synopsis', 'type', 'aired.from', 'volumes', 'members', 'genres', 'authors', 'score', 'serializations'
|
||||
'mal_id', 'url', 'title', 'image_url', 'synopsis', 'type', 'published', 'volumes', 'members', 'genres', 'authors', 'score', 'serializations'
|
||||
],
|
||||
null,
|
||||
$page
|
||||
@ -60,12 +60,12 @@ class MagazineController extends Controller
|
||||
$items = $data->items() ?? [];
|
||||
foreach ($items as &$item) {
|
||||
|
||||
if (isset($item['aired']['from'])) {
|
||||
$item['airing_start'] = $item['aired']['from'];
|
||||
if (isset($item['aired'])) {
|
||||
$item['airing_start'] = $item['aired']['from'] ?? null;
|
||||
}
|
||||
|
||||
if (isset($item['published']['from'])) {
|
||||
$item['publishing_start'] = $item['aired']['from'];
|
||||
if (isset($item['published'])) {
|
||||
$item['publishing_start'] = $item['aired']['from'] ?? null;
|
||||
}
|
||||
|
||||
if (isset($item['serializations'])) {
|
||||
|
@ -25,7 +25,7 @@ class ProducerController extends Controller
|
||||
->paginate(
|
||||
self::MAX_RESULTS_PER_PAGE,
|
||||
[
|
||||
'mal_id', 'url', 'title', 'image_url', 'synopsis', 'type', 'airing_start', 'episodes', 'members', 'genres', 'source', 'producers', 'score', 'licensors', 'rating'
|
||||
'mal_id', 'url', 'title', 'image_url', 'synopsis', 'type', 'aired', 'episodes', 'members', 'genres', 'producers', 'score', 'licensors', 'rating'
|
||||
],
|
||||
null,
|
||||
$page
|
||||
@ -60,12 +60,12 @@ class ProducerController extends Controller
|
||||
$items = $data->items() ?? [];
|
||||
foreach ($items as &$item) {
|
||||
|
||||
if (isset($item['aired']['from'])) {
|
||||
$item['airing_start'] = $item['aired']['from'];
|
||||
if (isset($item['aired'])) {
|
||||
$item['airing_start'] = $item['aired']['from'] ?? null;
|
||||
}
|
||||
|
||||
if (isset($item['published']['from'])) {
|
||||
$item['publishing_start'] = $item['aired']['from'];
|
||||
if (isset($item['published'])) {
|
||||
$item['publishing_start'] = $item['aired']['from'] ?? null;
|
||||
}
|
||||
|
||||
if (isset($item['serializations'])) {
|
||||
|
@ -4,6 +4,7 @@ namespace App\Http\Controllers\V3;
|
||||
|
||||
use App\Anime;
|
||||
use App\Http\HttpHelper;
|
||||
use App\Manga;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Pagination\LengthAwarePaginator;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
@ -155,17 +156,32 @@ class SearchController extends Controller
|
||||
$genres = $request->get('genre');
|
||||
$orderBy = $this->getOrderBy($request->get('order_by'));
|
||||
$sort = $this->getSort($request->get('sort'));
|
||||
$letter = $request->get('letter');
|
||||
$magazine = $request->get('magazine');
|
||||
|
||||
$results = DB::table('manga')
|
||||
->select('mal_id', 'url', 'image_url', 'title', 'publishing', 'synopsis', 'type', 'chapters', 'volumes', 'score', 'published.from', 'published.to', 'members');
|
||||
$results = Manga::query();
|
||||
|
||||
if (!empty($query)) {
|
||||
$results
|
||||
->where('title', 'like', "%$query%")
|
||||
->orWhere('title_english', 'like', "%$query%")
|
||||
->orWhere('title_japanese', 'like', "%$query%");
|
||||
} else {
|
||||
->getQuery()->projections = ['distance_score'=>['$meta'=>'textScore']];
|
||||
|
||||
$results
|
||||
->orderBy('distance_score',['$meta'=>'textScore'])
|
||||
->whereRaw([
|
||||
'$text' => [
|
||||
'$search' => "{$query}",
|
||||
'$language' => 'en'
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
if (!is_null($letter)) {
|
||||
$results = $results
|
||||
->where('title', 'like', "{$letter}%");
|
||||
}
|
||||
|
||||
if (empty($query)) {
|
||||
$results = $results
|
||||
->orderBy('mal_id');
|
||||
}
|
||||
|
||||
@ -185,11 +201,27 @@ class SearchController extends Controller
|
||||
->where('status', $status);
|
||||
}
|
||||
|
||||
if (!is_null($magazine)) {
|
||||
|
||||
$magazine = (int) $magazine;
|
||||
|
||||
$results = $results
|
||||
->where('serializations.mal_id', $magazine);
|
||||
}
|
||||
|
||||
if (!is_null($genres)) {
|
||||
$genres = explode(',', $genres);
|
||||
|
||||
// @todo WIP. Need genre indexing
|
||||
foreach ($genres as $genre) {
|
||||
if (empty($genre)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$genre = (int) $genre;
|
||||
|
||||
$results = $results
|
||||
->where('genres.mal_id', $genre);
|
||||
}
|
||||
}
|
||||
|
||||
if (!is_null($orderBy)) {
|
||||
@ -212,7 +244,7 @@ class SearchController extends Controller
|
||||
$results = $results
|
||||
->paginate(
|
||||
$limit,
|
||||
null,
|
||||
['mal_id', 'url', 'image_url', 'title', 'publishing', 'synopsis', 'type', 'chapters', 'volumes', 'score', 'published.from', 'published.to', 'members'],
|
||||
null,
|
||||
$page
|
||||
);
|
||||
@ -220,13 +252,6 @@ class SearchController extends Controller
|
||||
$items = $this->applyBackwardsCompatibility($results);
|
||||
|
||||
return response()->json($items);
|
||||
|
||||
$search = $this->jikan->getMangaSearch(
|
||||
SearchQueryBuilder::create(
|
||||
(new MangaSearchRequest())->setPage($page)
|
||||
)
|
||||
);
|
||||
return response($this->filter($search));
|
||||
}
|
||||
|
||||
public function people(int $page = 1)
|
||||
@ -283,26 +308,20 @@ class SearchController extends Controller
|
||||
|
||||
$items = $data->items() ?? [];
|
||||
foreach ($items as &$item) {
|
||||
if (isset($item['aired']['from'])) {
|
||||
$item['start_date'] = $item['aired']['from'];
|
||||
if (isset($item['aired'])) {
|
||||
$item['start_date'] = $item['aired']['from'] ?? null;
|
||||
$item['end_date'] = $item['aired']['to'] ?? null;
|
||||
}
|
||||
|
||||
if (isset($item['aired']['to'])) {
|
||||
$item['end_date'] = $item['aired']['to'];
|
||||
}
|
||||
if (isset($item['published']['from'])) {
|
||||
$item['start_date'] = $item['published']['from'];
|
||||
}
|
||||
|
||||
if (isset($item['published']['to'])) {
|
||||
$item['end_date'] = $item['published']['to'];
|
||||
if (isset($item['published'])) {
|
||||
$item['start_date'] = $item['published']['from'] ?? null;
|
||||
$item['end_date'] = $item['published']['to'] ?? null;
|
||||
}
|
||||
|
||||
if (isset($item['rating'])) {
|
||||
$item['rated'] = $item['rating'];
|
||||
}
|
||||
|
||||
unset($item['_id'], $item['oid'], $item['expiresAt'], $item['aired'], $item['published'], $item['rating']);
|
||||
unset($item['_id'], $item['oid'], $item['expiresAt'], $item['aired'], $item['published'], $item['rating'], $item['distance_score']);
|
||||
}
|
||||
$items = ['results' => $items];
|
||||
|
||||
|
@ -110,12 +110,12 @@ class SeasonController extends Controller
|
||||
$items = $data->all() ?? [];
|
||||
foreach ($items as &$item) {
|
||||
|
||||
if (isset($item['aired']['from'])) {
|
||||
$item['airing_start'] = $item['aired']['from'];
|
||||
if (isset($item['aired'])) {
|
||||
$item['airing_start'] = $item['aired']['from'] ?? null;
|
||||
}
|
||||
|
||||
if (isset($item['published']['from'])) {
|
||||
$item['publishing_start'] = $item['aired']['from'];
|
||||
if (isset($item['published'])) {
|
||||
$item['publishing_start'] = $item['aired']['from'] ?? null;
|
||||
}
|
||||
|
||||
if (isset($item['licensors'])) {
|
||||
|
@ -73,7 +73,7 @@ class TopController extends Controller
|
||||
->paginate(
|
||||
self::MAX_RESULTS_PER_PAGE,
|
||||
[
|
||||
'mal_id', 'rank', 'title', 'url', 'image_url', 'type', 'episodes', 'aired.from', 'aired.to', 'members', 'score'
|
||||
'mal_id', 'rank', 'title', 'url', 'image_url', 'type', 'episodes', 'aired', 'members', 'score'
|
||||
],
|
||||
null,
|
||||
$page
|
||||
@ -82,12 +82,6 @@ class TopController extends Controller
|
||||
$items = $this->applyBackwardsCompatibility($results);
|
||||
|
||||
return response()->json($items);
|
||||
//
|
||||
// $anime = $this->jikan->getTopAnime(new TopAnimeRequest($page, $type));
|
||||
//
|
||||
// $top = ['top' => $this->jikan->getTopAnime(new TopAnimeRequest($page, $type))];
|
||||
//
|
||||
// return response($this->serializer->serialize($top, 'json'));
|
||||
}
|
||||
|
||||
public function manga(Request $request, int $page = 1, string $type = null)
|
||||
@ -145,7 +139,7 @@ class TopController extends Controller
|
||||
->paginate(
|
||||
self::MAX_RESULTS_PER_PAGE,
|
||||
[
|
||||
'mal_id', 'rank', 'title', 'url', 'image_url', 'type', 'episodes', 'aired.from', 'aired.to', 'members', 'score'
|
||||
'mal_id', 'rank', 'title', 'url', 'image_url', 'type', 'volumes', 'chapters', 'published', 'members', 'score'
|
||||
],
|
||||
null,
|
||||
$page
|
||||
@ -154,10 +148,6 @@ class TopController extends Controller
|
||||
$items = $this->applyBackwardsCompatibility($results);
|
||||
|
||||
return response()->json($items);
|
||||
|
||||
// $top = ['top' => $this->jikan->getTopManga(new TopMangaRequest($page, $type))];
|
||||
//
|
||||
// return response($this->serializer->serialize($top, 'json'));
|
||||
}
|
||||
|
||||
public function people(int $page = 1)
|
||||
@ -187,19 +177,13 @@ class TopController extends Controller
|
||||
|
||||
$items = $data->items() ?? [];
|
||||
foreach ($items as &$item) {
|
||||
if (isset($item['aired']['from'])) {
|
||||
$item['start_date'] = $item['aired']['from'];
|
||||
if (isset($item['aired'])) {
|
||||
$item['start_date'] = $item['aired']['from'] ?? null;
|
||||
$item['end_date'] = $item['aired']['to'] ?? null;
|
||||
}
|
||||
|
||||
if (isset($item['aired']['to'])) {
|
||||
$item['end_date'] = $item['aired']['to'];
|
||||
}
|
||||
if (isset($item['published']['from'])) {
|
||||
$item['start_date'] = $item['published']['from'];
|
||||
}
|
||||
|
||||
if (isset($item['published']['to'])) {
|
||||
$item['end_date'] = $item['published']['to'];
|
||||
if (isset($item['published'])) {
|
||||
$item['start_date'] = $item['published']['from'] ?? null;
|
||||
$item['end_date'] = $item['published']['to'] ?? null;
|
||||
}
|
||||
|
||||
if (isset($item['rating'])) {
|
||||
|
34
app/Manga.php
Normal file
34
app/Manga.php
Normal file
@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
namespace App;
|
||||
|
||||
use Jenssegers\Mongodb\Eloquent\Model;
|
||||
|
||||
class Manga extends Model
|
||||
{
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $fillable = [
|
||||
'mal_id', 'url', 'title_english', 'title_synonyms', 'title_japanese', 'status', 'image_url', 'type', 'volumes', 'chapters', 'publishing', 'published', 'rank', 'score', 'scored_by', 'popularity', 'members', 'favorites', 'synopsis', 'background', 'related', 'genres', 'authors', 'serializations'
|
||||
];
|
||||
|
||||
/**
|
||||
* The table associated with the model.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $table = 'manga';
|
||||
|
||||
/**
|
||||
* The attributes excluded from the model's JSON form.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $hidden = [
|
||||
'_id', 'expiresAt'
|
||||
];
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user