{"id":30061007,"url":"https://github.com/abhinavk99/jikanpy","last_synced_at":"2025-08-08T01:54:29.015Z","repository":{"id":39895906,"uuid":"107573086","full_name":"abhinavk99/jikanpy","owner":"abhinavk99","description":"Python wrapper for the Jikan API","archived":false,"fork":false,"pushed_at":"2024-11-18T23:02:04.000Z","size":1611,"stargazers_count":228,"open_issues_count":3,"forks_count":29,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-07-21T04:27:02.000Z","etag":null,"topics":["anime","api","manga","myanimelist","python","rest","wrapper"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/abhinavk99.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-10-19T16:42:36.000Z","updated_at":"2025-06-01T06:18:33.000Z","dependencies_parsed_at":"2023-11-15T23:30:52.601Z","dependency_job_id":"8b3e2f2c-84f0-4481-bab9-1f038b3dbca3","html_url":"https://github.com/abhinavk99/jikanpy","commit_stats":{"total_commits":253,"total_committers":16,"mean_commits":15.8125,"dds":0.4545454545454546,"last_synced_commit":"f45f2d4784efd4524dfe0dade7dad4c751db2121"},"previous_names":[],"tags_count":30,"template":false,"template_full_name":null,"purl":"pkg:github/abhinavk99/jikanpy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abhinavk99%2Fjikanpy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abhinavk99%2Fjikanpy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abhinavk99%2Fjikanpy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abhinavk99%2Fjikanpy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/abhinavk99","download_url":"https://codeload.github.com/abhinavk99/jikanpy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abhinavk99%2Fjikanpy/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269351901,"owners_count":24402677,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-07T02:00:09.698Z","response_time":73,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["anime","api","manga","myanimelist","python","rest","wrapper"],"created_at":"2025-08-08T01:54:23.434Z","updated_at":"2025-08-08T01:54:29.007Z","avatar_url":"https://github.com/abhinavk99.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# JikanPy\n\n[![Travis (.com)](https://img.shields.io/travis/com/abhinavk99/jikanpy?style=flat-square)](https://travis-ci.com/abhinavk99/jikanpy)\n[![Codecov](https://img.shields.io/codecov/c/github/abhinavk99/jikanpy.svg?style=flat-square)](https://codecov.io/gh/abhinavk99/jikanpy/)\n[![pypi Version](https://img.shields.io/pypi/v/jikanpy-v4.svg?style=flat-square)](https://pypi.org/project/jikanpy-v4/)\n[![PyPi downloads](https://img.shields.io/pypi/dm/jikanpy-v4?style=flat-square)](https://pypi.org/project/jikanpy-v4/)\n[![Documentation](https://readthedocs.org/projects/jikanpy/badge/?version=latest\u0026style=flat-square)](https://jikanpy.readthedocs.io/en/latest/)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg?style=flat-square)](https://github.com/ambv/black)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)\n\nJikanPy is a Python wrapper for [Jikan](https://github.com/jikan-me/jikan),\nproviding bindings for all API functionality, and supports Python 3.6+. Because\nit is intended to be pretty much identical, please consult [Jikan's\ndocumentation](https://docs.api.jikan.moe/) for thornier details on how it is\nmeant to be used. Perhaps most importantly, JikanPy does not make any attempts\nto rate limit itself, so use it as responsibly as you would use the API\nprimitively and remember that Jikan API has limitations, check out\n[this section](https://docs.api.jikan.moe/#section/Information/Rate-Limiting)\nof documentation in order to see to what extent the API is limited or throttled.\n\nYou can use either Jikan or AioJikan depending on whether you want a synchronous\nwrapper class or an asynchronous wrapper class respectively. More usage examples\nare below.\n\nIn addition to the typical response from the Jikan API, each response contains\ntwo additional fields:\n\n- `jikan_url`: The URL that was requested; for example: `https://api.jikan.moe/v4/anime/1`.\n- `headers`: The response headers from Jikan, detailed [here](https://docs.api.jikan.moe/#section/Information/Caching).\n\n## Installation\nYou can install the package from PyPI using pip:\n\n```shell\n$ pip install jikanpy-v4\n```\n\nIf you have previously installed the old version of jikanpy, then make sure to uninstall the old version first:\n\n```shell\n$ pip uninstall jikanpy\n$ pip install --no-cache-dir jikanpy-v4\n```\n\nYou can also install this package directly from the source:\n```shell\n$ git clone https://github.com/abhinavk99/jikanpy.git \n$ cd jikanpy\n$ python setup.py install\n```\n\n*Note*: This package is different from `jikanpy` on PyPI, which is the old Jikan v3 compatible version of [jikanpy](https://github.com/abhinavk99/jikanpy/tree/jikanpy_v3).\n\n## Usage Examples\n\nBelow are some basic examples of how to use Jikan and AioJikan. Please read the\n[documentation below](#documentation) to see all the methods and more examples.\n\n### Usage Examples with Jikan\n\n```python\nfrom jikanpy import Jikan\njikan = Jikan()\n\nmushishi = jikan.anime(457)\nmushishi_with_eps = jikan.anime(457, extension='episodes')\n\nsearch_result = jikan.search('anime', 'Mushishi', page=2)\n\nwinter_2018_anime = jikan.seasons(year=2018, season='winter')\n\ncurrent_season = jikan.seasons(extension='now')\n```\n\n### Async Usage Examples with AioJikan\n\n```python\nimport asyncio\nfrom jikanpy import AioJikan\n\nasync def main():\n    async with AioJikan() as aio_jikan:\n        mushishi = await aio_jikan.anime(457)\n        fma = await aio_jikan.manga(25)\n        ginko = await aio_jikan.characters(425)\n        kana_hanazawa = await aio_jikan.person(185)\n        naruto = await aio_jikan.search(search_type='anime', query='naruto')\n\n    # You can also construct AioJikan like below, but make sure to close the object\n    aio_jikan_2 = AioJikan()\n    mushishi = await aio_jikan.anime(457)\n    await aio_jikan_2.close()\n\nasyncio.run(main())\n```\n\n## Documentation\n\nCheck out the documentation [here](https://jikanpy.readthedocs.io).\n\n## Overriding default settings in Jikan and AioJikan with constructor arguments\n\nIf you're running an instance of [jikan-rest](https://github.com/jikan-me/jikan-rest)\non your system, and want to use that instead of [api.jikan.moe](https://jikan.moe/),\nyou can pass that to Jikan:\n\n```python\nfrom jikanpy import Jikan\njikan = Jikan(selected_base='http://localhost:8000/v4')\n```\n\nIf you want to use your own Requests session, you can do that too.\n\n```python\nimport requests\nfrom jikanpy import Jikan\n\nsession = requests.Session()\n# Set custom persistent headers that will be used with all HTTP requests with your session\nsession.headers.update({'x-test': 'true'})\n\njikan = Jikan(session=session)\n```\n\nYou can use any or all of these constructor arguments when creating an instance\nof Jikan.\n\nAioJikan also has `selected_base` and `session` (although AioJikan uses AioHTTP\nsession, not Requests).\n\n```python\nimport aiohttp\nimport asyncio\n\nfrom jikanpy import AioJikan\n\nasync def main():\n    # Construct AioJikan with own base URL and custom AioHTTP session with custom persistent headers\n    session = aiohttp.ClientSession(headers={'x-test': 'true'})\n    aio_jikan = AioJikan(selected_base='http://localhost:8000/v4', session=session)\n    await session.close()\n\nasyncio.run(main())\n```\n\n## Testing\n\n```shell\n# In root of repository\n$ pytest -m pytest tests/\n# Optionally, you can run a single test:\n$ pytest -m pytest tests/test_jikan.py::test_anime_episodes_success\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabhinavk99%2Fjikanpy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fabhinavk99%2Fjikanpy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabhinavk99%2Fjikanpy/lists"}