The REST API for Jikan
Jikan is a REST API for MyAnimeList.net. It scrapes the website to satisfy the need for an API - which MyAnimeList lacks.
The raison d'être of Jikan is to assist developers easily get the data they need for their apps and projects without having to depend on the lackluster official API, unstable APIs, or sidetracking their projects to develop parsers.
The word Jikan literally translates to Time in Japanese (時間). And that's what this API saves you of. ;)
Notice: Jikan does not support authenticated requests. You can not update your lists.
If you don't want to install it yourself, there are dockerized options available:
This is specifically for Ubuntu, but other distributions should work similarly. 1. Install requirements: - Add PHP related packages:
sudo add-apt-repository -y ppa:ondrej/php- If
add-apt-repositoryis not installed, you can install it by doing
sudo apt install python-software-propertiesor
sudo apt install software-properties-common-
sudo apt update && sudo apt upgrade- Install requirements:
sudo apt install curl git php redis unzip- Verify that PHP 7.1-7.3 is installed:
php -v(PHP 7.4 is not currently supported) - Install the corresponding
php-xmland
php-mbstringpackages for your version, e.g: - PHP 7.1:
sudo apt install php7.1-xml php7.1-mbstring- PHP 7.3:
sudo apt install php7.3-xml php7.3-mbstring- Install composer:
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer2. Start the redis server:
sudo service redis start
brew install php composer redis
brew services start redis
git clone https://github.com/jikan-me/jikan-rest.git
cd jikan-rest
cp .env.dist .env
composer install(Make sure Jikan's directory has write permissions)
You're able to configure Jikan through the
.envfile. A few kernel commands are available from the project directory by running the
artisanfile.
The first thing you need to do is generate an
APP_KEY.
php artisan key:generate
php artisan serve --port=8080or
php -S localhost:8000 -t public
Jikan is now hosted on
http://localhost:8000/v3/
Alternatively, host it on Apache (or Nginx)
Create a virtual host and point it to
/public. Jikan supports Apache out of the box, you just need to create a virtual host and point it to
/public, and enable the rewrite module for .htaccess (
sudo a2enmod rewrite), and configure
/etc/apache/apache2.confby setting
AllowOverride Noneto
AllowOverride Allfor the
/var/wwwdirectory.
:information_source: If you wish to configure it for Nginx or anything else, you'll have to port the rewrite rules located at
public/.htaccess
Jikan caches on file by default in
/storage/framework/cache. So even if you don't change the caching method, Jikan will work out of the box.
However, you can configure Jikan to cache on Redis instead:
php artisan cache:driver redis
Note: If you're currently running Jikan, you're required to stop it before running the above command.
Jikan handles cache in the
legacymanner out of the box. This method was used previously to update cache.
When a cache expires, it gets deleted. So if you make a request that has an expired cache, your request will take longer as Jikan has to fetch and parse the new data from MyAnimeList again.
This is a newly introduced caching method to the API, it's what the public API runs on as well. It requires some further setup.
When a cache expires, it does not get deleted. Instead, if you make a request that has an expired cache, a job will be dispatched to the queue which handles updating the cache in the background. Therefore, the request will keep on providing stale cache until the job is complete and the cache is replaced with fresh data.
This method provides zero delay, and is highly recommended if you have immense traffic coming your way.
:information_source: Note: If you're currently running Jikan, you're required to stop it before running the above command. You're also required to clear any cache you've stored as well as anything on the Redis server.
php artisan cache:method queue
Next, you need to make sure that there's a service looking after the queue. This can be manually done by running a process through
php artisan queue:work --queue=high,low. You can set the command to run on cron, nohup, etc.
But a recommended way is to install Supervisor and have it handle the queue automatically.
:informationsource: Note:
--queue=high,low; Jikan stores two types of queues; high priority and low priority. This depends on the type of request. You can check which request is considered to be high priority in the JikanResponseHandler.php middleware in the `HIGHPRIORITY_QUEUE` array.
:informationsource: Note 2: Not all requests are queuable. Some are handled the
legacyway. You can find out which ones in the JikanResponseHandler.php middleware in the `NONQUEUEABLE` array.
This reason for this is quite simple. User related requests such as anime/manga list can be frequently updated. They're cached by default for 5 minutes (you can change this in
.env). But if they were to get queued for a cache update, it would take longer than 5 minutes because the update job would have to wait in line. So it skips the queue and is automatically updated on the request. This does mean a slight delay in fetching and parsing the fresh data from MyAnimeList.
:information_source: Note 3: Note 1 & Note 2 are default behavior. You can obviously change them as per your needs.
sudo apt install supervisor
brew install supervisor
sudo cp conf/supervisor/jikan-worker.conf /etc/supervisor/conf.d
conf/supervisor/jikan-worker.conf
jikan-worker.conffor
commandand
stdout_logfileto the directory of jikan!
Example: If I install Jikan in
/var/www/jikan-is-installed-here, you will have to adjust the following values in the
jikan-worker.conffile.
... command=php /var/www/jikan-is-installed-here/artisan queue:work --queue=high,low ... stdout_logfile=/var/www/jikan-is-installed-here/storage/logs/worker.log stderr_logfile=/var/www/jikan-is-installed-here/storage/logs/worker.error.log
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start jikan-worker:*
brew install supervisor
supervisord -c /usr/local/etc/supervisord.ini
conf/supervisor/jikan-worker.confto
/usr/local/etc/supervisor.d/
brew services start supervisor
sudo supervisorctl update
sudo supervisorctl start jikan-worker:*
Please read the troubleshooting guide. For any additional help, join our Discord server.
Please read the commands guide. For any additional help, join our Discord server.
If you don't want to host your instance, there's a public API available.
See the list of wrappers here
php vendor/bin/phpunit tests
Note: Tests may fail due to rate limit from MyAnimeList (HTTP 429)
Thank you to all our Sugoi (すごい) backers! 🙏 [Become a sugoi backer] - Jared Allard (jaredallard) - hugonun (hug_onun)
Thank you to all our backers! 🙏 [Become a backer] - PurplePinapples - Barkdoll (Jesse) - Piotr Szymczak (Drutol) - Jason Weatherly (jamesthebard) - Cesar Irad Mendoza (aberuwu)
Thank you to all our sponsors! [Become a sponsor] - Hibiki Matsujo