{ "info": { "author": "Andrew Conant, Abhinav Kasamsetty", "author_email": "", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "Jikanpy\n=======\n\n[![Travis (.org)](https://img.shields.io/travis/AWConant/jikanpy.svg?style=flat-square)](https://travis-ci.org/AWConant/jikanpy)\n[![Codecov](https://img.shields.io/codecov/c/github/AWConant/jikanpy.svg?style=flat-square)](https://codecov.io/gh/AWConant/jikanpy/)\n[![pypi Version](https://img.shields.io/pypi/v/jikanpy.svg?style=flat-square)](https://pypi.org/project/jikanpy/)\n[![PyPi downloads](https://img.shields.io/pypi/dm/jikanpy?style=flat-square)](https://pypi.org/project/jikanpy/)\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 it is intended to be\npretty much identical, please consult [Jikan's\ndocumentation](https://jikan.docs.apiary.io/#) for thornier details on how it is meant to\nbe used. Perhaps most importantly, Jikanpy does not make any attempts to rate\nlimit itself, so use it as responsibly as you would use the API primitively and\nremember that Jikan API has limitations, check out [this section](https://jikan.docs.apiary.io/#introduction/information/rate-limiting)\nof documentation in order to see to what extent the API is limited or throttled.\n\nIn addition to the typical response from the API, each response contains two additional fields:\n\n* `jikan_url`: The URL that was requested; for example: `https://api.jikan.moe/v3/anime/1`.\n* `headers`: The response headers from Jikan, detailed [here](https://jikan.docs.apiary.io/#introduction/information/caching).\n\n## Installation\n```shell\n$ pip install jikanpy\n```\n\n## Usage\n```python\nfrom jikanpy import Jikan\njikan = Jikan()\n\n# json of all anime info specified by Jikan docs\nmushishi = jikan.anime(457)\n\n# same as above, but with extra info\n# see Jikan docs for information about which endpoints have which extensions\nmushishi_with_eps = jikan.anime(457, extension='episodes')\nmushishi_with_eps_2 = jikan.anime(457, extension='episodes', page=2)\nmushishi_with_characters_and_staff = jikan.anime(457, extension='characters_staff')\n\n# you can also query characters\nginko = jikan.character(425)\n\n# and manga\nmushishi_manga = jikan.manga(418)\n\n# search up people too\nkana_hanazawa = jikan.person(185)\n\n# search\nsearch_result = jikan.search('anime', 'Mushishi')\n# add a page number to the search request\nsearch_result = jikan.search('anime', 'Mushishi', page=2)\n# add a filter to the search (see Jikan docs about what filters are legal)\nsearch_result = jikan.search('anime', 'Mushishi', parameters={'type': 'tv'})\nsearch_result = jikan.search('anime', 'Mushishi', parameters={'genre': 37})\n# use multiple query parameters\nsearch_result = jikan.search('anime', 'Mushishi', parameters={'genre': 37, 'type': 'tv'})\n# use it all!\nsearch_result = jikan.search('anime', 'Mushishi', page=3, parameters={'genre': 37, 'type': 'tv'})\n\n# seasonal anime\nwinter_2018 = jikan.season(year=2018, season='winter')\nspring_2016 = jikan.season(year=2016, season='spring')\n\n# all the years and seasons on MAL\narchive = jikan.season_archive()\n\n# anime in upcoming seasons\nlater = jikan.season_later()\n\n# scheduled anime\nscheduled = jikan.schedule()\n# add a day of the week if you only want the day's schedule\nmonday = jikan.schedule(day='monday')\n\n# top anime\ntop_anime = jikan.top(type='anime')\n# add a page and subtype if you want\ntop_anime = jikan.top(type='anime', page=2, subtype='upcoming')\n\n# action anime\n# See Jikan docs for mappings between genres and their IDs\naction = jikan.genre(type='anime', genre_id=1)\n# adventure manga\nadventure = jikan.genre(type='manga', genre_id=2)\n\n# anime made by Studio Deen (sasuga deen)\nstudio_deen_anime = jikan.producer(producer_id=37)\n# add an optional page\nstudio_deen_anime = jikan.producer(producer_id=37, page=2)\n\n# manga from Weekly Shounen Jump\njump = jikan.magazine(magazine_id=83)\n# add an optional page\njump = jikan.magazine(magazine_id=83, page=2)\n\n# user info\nnekomata1037 = jikan.user(username='Nekomata1037')\n# get profile info, same as above\nnekomata1037 = jikan.user(username='Nekomata1037', request='profile')\n# friends info\nnekomata1037 = jikan.user(username='Nekomata1037', request='friends')\n# history of anime/manga\nnekomata1037 = jikan.user(username='Nekomata1037', request='history')\n# anime list\nnekomata1037 = jikan.user(username='Nekomata1037', request='animelist')\nnekomata1037 = jikan.user(username='Nekomata1037', request='animelist', argument='completed', page=2)\n# manga list\nxinil = jikan.user(username='Xinil', request='mangalist')\nxinil = jikan.user(username='Xinil', request='mangalist', argument='all')\n# user info filters (see Jikan docs for valid filters)\nnekomata1037 = jikan.user(username='Nekomata1037', request='animelist', parameters={'year': 2019})\n\n# clubs\nfantasy_anime_league = jikan.club(379)\n\n# meta info about the Jikan REST API\n# meta info about what requests have been done\nrequests = jikan.meta(request='requests', type='anime', period='today')\n# meta info about API's status\nstatus = jikan.meta(request='status', type='anime', period='today')\n```\n\n## Async Usage\n```python\nimport asyncio\nfrom jikanpy import AioJikan\n\nloop = asyncio.get_event_loop()\n\nasync def main(loop):\n aio_jikan = AioJikan(loop=loop)\n\n mushishi = await aio_jikan.anime(457)\n fma = await aio_jikan.manga(25)\n ginko = await aio_jikan.character(425)\n kana_hanazawa = await aio_jikan.person(185)\n naruto = await aio_jikan.search(search_type='anime', query='naruto')\n winter_2018 = await aio_jikan.season(year=2018, season='winter')\n archive = await aio_jikan.season_archive()\n later = await aio_jikan.season_later()\n monday = await aio_jikan.schedule(day='monday')\n top_anime = await aio_jikan.top(type='anime')\n meta = await aio_jikan.meta(request='requests', type='anime', period='today')\n action = await aio_jikan.genre(type='anime', genre_id=1)\n deen = await aio_jikan.producer(producer_id=37)\n jump = await aio_jikan.magazine(magazine_id=83)\n nekomata1037 = await aio_jikan.user(username='Nekomata1037')\n fantasy_anime_league = await aio_jikan.club(379)\n # Close the connection to Jikan API\n await aio_jikan.close()\n\n\nloop.run_until_complete(main(loop))\n```\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) on your system, and want to use that instead of [api.jikan.moe](https://jikan.moe/), you can pass that to Jikan:\n\n```python\nfrom jikanpy import Jikan\njikan = Jikan(selected_base='http://localhost:8000/v3/')\n```\n\nYou can also choose whether or not to use the HTTPS version of the [api.jikan.moe](https://jikan.moe/) URL or not,\nwhich defaults to True.\n\n```python\nfrom jikanpy import Jikan\njikan_1 = Jikan() # HTTPS\njikan_2 = Jikan(use_ssl=True) # HTTPS\njikan_3 = Jikan(use_ssl=False) # HTTP\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 of Jikan.\n\nAioJikan also has `selected_base`, `use_ssl`, and `session` (although AioJikan uses AioHTTP session, not Requests),\nbut also has `loop`, to provide your own asynchronous event loop.\n\n```python\nimport aiohttp\nimport asyncio\n\nfrom jikanpy import AioJikan\n\nloop = asyncio.get_event_loop()\n\nasync def main(loop):\n # Construct AioJikan with own base URL and custom AioHTTP session with custom persistent headers and event loop\n session = aiohttp.ClientSession(loop=loop, headers={'x-test': 'true'})\n aio_jikan_1 = AioJikan(selected_base='http://localhost:8000/v3/', session=session)\n\n # Construct AioJikan with jikan.moe HTTP URL and event loop that will be used in internal AioHTTP session\n aio_jikan_2 = AioJikan(use_ssl=False, loop=loop)\n\n await aio_jikan_1.close()\n await aio_jikan_2.close()\n\nloop.run_until_complete(main(loop))\n```\n\n## Testing\n```shell\n# In root of repository\n$ pytest\n```\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/AWConant/jikanpy", "keywords": "jikan,jikanpy,api,myanimelist", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "jikanpy", "package_url": "https://pypi.org/project/jikanpy/", "platform": "", "project_url": "https://pypi.org/project/jikanpy/", "project_urls": { "Homepage": "https://github.com/AWConant/jikanpy" }, "release_url": "https://pypi.org/project/jikanpy/3.4.1/", "requires_dist": [ "requests", "aiohttp" ], "requires_python": ">=3.6", "summary": "Python wrapper for the Jikan API", "version": "3.4.1" }, "last_serial": 5916463, "releases": { "3.4.0": [ { "comment_text": "", "digests": { "md5": "2323925499084fe14e08d074498d21c5", "sha256": "93c027878ad2790fd4b90f931fc0744747ab97503669d81e76f27ffc73236727" }, "downloads": -1, "filename": "jikanpy-3.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "2323925499084fe14e08d074498d21c5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12580, "upload_time": "2019-09-15T22:44:27", "url": "https://files.pythonhosted.org/packages/2c/7c/7abf2f756be8b4ff2fdd643deb7076c1688afdde886b3aec35d1402076f9/jikanpy-3.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3edc89f57ae328c2dd7547726b3d2f7d", "sha256": "ff579bd7be46d093a1083e67aa105250c72a5674e4445a4714fa843f53226dc7" }, "downloads": -1, "filename": "jikanpy-3.4.0.tar.gz", "has_sig": false, "md5_digest": "3edc89f57ae328c2dd7547726b3d2f7d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13294, "upload_time": "2019-09-15T22:44:29", "url": "https://files.pythonhosted.org/packages/49/e0/c5e93beb5816ffbbc9dddadacff546d67dd32ebe2d7e45ecc3164e158d11/jikanpy-3.4.0.tar.gz" } ], "3.4.1": [ { "comment_text": "", "digests": { "md5": "b579aa88b65f699bb4db4850c04bd291", "sha256": "d9f75c0706c9d994e32bb973bb2a6f0c5dbf7d9c8813290982471d9d74b5050d" }, "downloads": -1, "filename": "jikanpy-3.4.1-py3-none-any.whl", "has_sig": false, "md5_digest": "b579aa88b65f699bb4db4850c04bd291", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 13513, "upload_time": "2019-10-02T07:02:19", "url": "https://files.pythonhosted.org/packages/a8/4d/0151e011ed79dbced66f975a57eb05ad4f521ab15c382f67889d438d547d/jikanpy-3.4.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dc081c90cf751c4082ec8b0dd7a157fd", "sha256": "4c45ac9cfb6edac2d2be852979db467cc197f29c003352e5f3e54e4f38433393" }, "downloads": -1, "filename": "jikanpy-3.4.1.tar.gz", "has_sig": false, "md5_digest": "dc081c90cf751c4082ec8b0dd7a157fd", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 13653, "upload_time": "2019-10-02T07:02:22", "url": "https://files.pythonhosted.org/packages/94/2f/a3ad318b11f9d609d4e2fe4675ab362da06646e639281cb72a2eeb1f720b/jikanpy-3.4.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b579aa88b65f699bb4db4850c04bd291", "sha256": "d9f75c0706c9d994e32bb973bb2a6f0c5dbf7d9c8813290982471d9d74b5050d" }, "downloads": -1, "filename": "jikanpy-3.4.1-py3-none-any.whl", "has_sig": false, "md5_digest": "b579aa88b65f699bb4db4850c04bd291", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 13513, "upload_time": "2019-10-02T07:02:19", "url": "https://files.pythonhosted.org/packages/a8/4d/0151e011ed79dbced66f975a57eb05ad4f521ab15c382f67889d438d547d/jikanpy-3.4.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dc081c90cf751c4082ec8b0dd7a157fd", "sha256": "4c45ac9cfb6edac2d2be852979db467cc197f29c003352e5f3e54e4f38433393" }, "downloads": -1, "filename": "jikanpy-3.4.1.tar.gz", "has_sig": false, "md5_digest": "dc081c90cf751c4082ec8b0dd7a157fd", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 13653, "upload_time": "2019-10-02T07:02:22", "url": "https://files.pythonhosted.org/packages/94/2f/a3ad318b11f9d609d4e2fe4675ab362da06646e639281cb72a2eeb1f720b/jikanpy-3.4.1.tar.gz" } ] }