{ "info": { "author": "Joseph Gilgen", "author_email": "gilgenlabs@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "# khan_api_wrapper (Python 3 Wrapper for [Khan Academy API](https://github.com/Khan/khan-api))\n------------------------------------------------\n\n## About\nThis is a simple implementation of using the Khan Academy API with python. It uses the alternative method of logging in with your own account, and should be sufficient if you are only looking to retrieve data from your students.\n\n#### Requires\n* requests\n* rauth\n\n#### Set up:\n\nInstall:\n\n```\n$ pip install khan_api_wrapper\n```\n[Register your app with Khan Academy](https://www.khanacademy.org/api-apps/register), to get the necessary tokens. That is it, you should now be able to use the wrapper in your python script.\n\n#### General use:\ntest in an interactive shell:\n\n```python\n$ python\n> from khan_api_wrapper.khan import KhanAcademySignIn, KhanAPI\n>\n> consumer_key = \"Key from registering app\"\n> consumer_token = \"Token from registering app\"\n> khan_identifier = \"username_of_account_used_to_register_app\"\n> khan_password = \"password_of_account_used_to_register_app\"\n> kauth = KhanAcademySignIn(consumer_key, consumer_token, khan_identifier, khan_password)\n> token, secret = kauth.authorize_self()\n>\n> kapi = KhanAPI(consumer_key, consumer_token, token, secret)\n> kapi.user() # should print your user data to console.\n>\n> # Use your own endpoint\n> kapi.get(\"/api/internal/user/missions\") # should show your missions\n```\n\nExamine `khan.py` for all the available methods or `example.py` for ideas on how to use in your application.\n\n#### Token freshness:\n\nThrough trial I have discovered that the access token and secret are valid for 2 weeks. So you may consider storing them in a separate file or database, and write a function to only fetch tokens if they are expired.\n\n```python\ndef get_tokens():\n\n # fetch token data from saved json file\n with open(\"tokens.json\", \"r\") as f:\n tokens = json.loads(f.read())\n\n # check if tokens are expired\n now = time.time()\n if now - tokens[\"timestamp\"] > 3600 * 24 * 14:\n kauth = KhanAcademySignIn(consumer_key, consumer_secret, token, uname, pwd)\n token, secret = kauth.authorize_self()\n\n # update file with new tokens and timestamp\n with open(\"tokens.json\", \"w\") as t:\n t.write(\n json.dumps({\"token\": token, \"secret\": secret, \"timestamp\": now})\n )\n\n # return fresh tokens\n return token, secret\n\n # tokens are still valid, so return them\n return tokens[\"token\"], tokens[\"secret\"]\n\n# Then use the function to ensure we only use fresh tokens when necessary\ntoken, secret = get_tokens()\nkapi = KhanAPI(consumer_key, consumer_secret, token, secret)\n...\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/jb-1980/khan_api_wrapper", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "khan-api-wrapper", "package_url": "https://pypi.org/project/khan-api-wrapper/", "platform": "", "project_url": "https://pypi.org/project/khan-api-wrapper/", "project_urls": { "Homepage": "https://github.com/jb-1980/khan_api_wrapper" }, "release_url": "https://pypi.org/project/khan-api-wrapper/0.0.13/", "requires_dist": [ "requests", "rauth (>=0.7.3)" ], "requires_python": "", "summary": "Simple, direct Python 3 wrapper for the Khan Academy API", "version": "0.0.13" }, "last_serial": 5973449, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "048b6fc097fb07e0e3f3706f14e6d8d8", "sha256": "1fa453b26175421e931666a703f66086d3c37b5835520c609d28fae3a2c51c33" }, "downloads": -1, "filename": "khan_api_wrapper-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "048b6fc097fb07e0e3f3706f14e6d8d8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7841, "upload_time": "2018-09-18T15:20:29", "url": "https://files.pythonhosted.org/packages/1f/4f/d2618b0e13b3212c59864b2444ee81c3c8bd860a637e943682712fe75cb5/khan_api_wrapper-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "48fa5a1d03a9e1cf7abff867974a48d5", "sha256": "81e2fd8f7ec8eb23b3655315c6b6f5e7814a83762bf0da085e79cc6b49adb50e" }, "downloads": -1, "filename": "khan_api_wrapper-0.0.1.tar.gz", "has_sig": false, "md5_digest": "48fa5a1d03a9e1cf7abff867974a48d5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7248, "upload_time": "2018-09-18T15:20:31", "url": "https://files.pythonhosted.org/packages/1d/ae/49c1142e750b7f3d119ef01677ae098079c0ddbc60874fb37e48c9570325/khan_api_wrapper-0.0.1.tar.gz" } ], "0.0.10": [ { "comment_text": "", "digests": { "md5": "c2806434eca559dc44e7b1c7c7b22cdf", "sha256": "bb12b29bf69d472ec00dfa75b776773cfa5f66fd6130762c56ae613a35432475" }, "downloads": -1, "filename": "khan_api_wrapper-0.0.10-py3-none-any.whl", "has_sig": false, "md5_digest": "c2806434eca559dc44e7b1c7c7b22cdf", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10690, "upload_time": "2019-08-02T01:56:57", "url": "https://files.pythonhosted.org/packages/b3/67/ecc107fadff710038d05fb410505328ef10fbdba739beaea1a07efcedfbc/khan_api_wrapper-0.0.10-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "da79382096ec28d1e34b22857609aa82", "sha256": "b855a18fd0165fbbff7c4d6ae445de07f47fca04cf77815e7ab2838b73d95384" }, "downloads": -1, "filename": "khan_api_wrapper-0.0.10.tar.gz", "has_sig": false, "md5_digest": "da79382096ec28d1e34b22857609aa82", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10211, "upload_time": "2019-08-02T01:56:58", "url": "https://files.pythonhosted.org/packages/51/7a/bdfac6d7f9694aaefbca57ccf783b1decbdc6dee62ec9a2521a0fa5f3b92/khan_api_wrapper-0.0.10.tar.gz" } ], "0.0.11": [ { "comment_text": "", "digests": { "md5": "cafd64edd302aedd9b988878603fe2d3", "sha256": "6072a62c48958ed541d2d8b81b4972a27db19f08dbe347a7f35fd8962b6cc907" }, "downloads": -1, "filename": "khan_api_wrapper-0.0.11-py3-none-any.whl", "has_sig": false, "md5_digest": "cafd64edd302aedd9b988878603fe2d3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10859, "upload_time": "2019-08-14T16:04:45", "url": "https://files.pythonhosted.org/packages/9f/5a/b78a65b1430486cff5a6a5f5ccd29cb9e79d401ae7df66d07e1d7eb31ce2/khan_api_wrapper-0.0.11-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ab6aa01f746eb68cf172b9dbf4fbefe5", "sha256": "80166f1b1d6af19d8bb4206cf0c729abf8b5a9cc27512290de4db044cd4c1c15" }, "downloads": -1, "filename": "khan_api_wrapper-0.0.11.tar.gz", "has_sig": false, "md5_digest": "ab6aa01f746eb68cf172b9dbf4fbefe5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10368, "upload_time": "2019-08-14T16:04:46", "url": "https://files.pythonhosted.org/packages/e5/23/7c451089d1c7cdb9d513b8757fe79671709e4e00ec1cd8d296e8587abf05/khan_api_wrapper-0.0.11.tar.gz" } ], "0.0.12": [ { "comment_text": "", "digests": { "md5": "20ea67d1d6670dcb73052d5c7290ca94", "sha256": "184f48225db1339e47997d3dc9929ff151df011c94a50c8ac46a611232fd1f42" }, "downloads": -1, "filename": "khan_api_wrapper-0.0.12-py3-none-any.whl", "has_sig": false, "md5_digest": "20ea67d1d6670dcb73052d5c7290ca94", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11251, "upload_time": "2019-08-28T12:58:56", "url": "https://files.pythonhosted.org/packages/b1/cf/3d792828b692f46a20c284d2b607d0af472cf9c01a94c45cfef2c4f7373c/khan_api_wrapper-0.0.12-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "920f3c3bd8d0e62f00275e111c29d24a", "sha256": "dde5b93fbdf1805e8f6d4f9a4bba20bda73c34f356fa4997326f6a0838981361" }, "downloads": -1, "filename": "khan_api_wrapper-0.0.12.tar.gz", "has_sig": false, "md5_digest": "920f3c3bd8d0e62f00275e111c29d24a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10732, "upload_time": "2019-08-28T12:58:57", "url": "https://files.pythonhosted.org/packages/bf/6c/f78de3ad269df4f1e6c05c961e66ada02cf1264f6b2ea15d38335a659b1d/khan_api_wrapper-0.0.12.tar.gz" } ], "0.0.13": [ { "comment_text": "", "digests": { "md5": "0e33c1f8af19ffc8ae69942dbd5767de", "sha256": "33350c97e719d35238343ccb68862122c07fd100252bff292d6f767527df0cd9" }, "downloads": -1, "filename": "khan_api_wrapper-0.0.13-py3-none-any.whl", "has_sig": false, "md5_digest": "0e33c1f8af19ffc8ae69942dbd5767de", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11263, "upload_time": "2019-10-14T21:13:17", "url": "https://files.pythonhosted.org/packages/b0/b0/314d761c351dacaaf2a6ecafa005152281bf66bf39f15cf397877787ed95/khan_api_wrapper-0.0.13-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9c926495183fd756ea3dfd000d288b17", "sha256": "55462ec67ece6b785e12e1980347b511a69cb72a1e47bb53c8e0cc4a66f48820" }, "downloads": -1, "filename": "khan_api_wrapper-0.0.13.tar.gz", "has_sig": false, "md5_digest": "9c926495183fd756ea3dfd000d288b17", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10740, "upload_time": "2019-10-14T21:13:19", "url": "https://files.pythonhosted.org/packages/31/9d/6469921bd7fcd51dbb3b8f0160db886f8550aee528e8787abedcb586696b/khan_api_wrapper-0.0.13.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "a3c2752020cbb5068dd737ee9255a18c", "sha256": "b3a08f86c7327acee42091d7fc58ab4a7d6d4af6155990302ebf0304bca5fef5" }, "downloads": -1, "filename": "khan_api_wrapper-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "a3c2752020cbb5068dd737ee9255a18c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7914, "upload_time": "2018-09-19T14:05:35", "url": "https://files.pythonhosted.org/packages/93/06/03d09383a3a766a2343dbf401101beb944d1358655be50bbf0f80078f4bd/khan_api_wrapper-0.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7f9ea2946553a17c9a3ee5ad6aaa54ba", "sha256": "03408b91147804f3fe42184fa82d407acf2b09d45d5b19b6c12f1647634de329" }, "downloads": -1, "filename": "khan_api_wrapper-0.0.3.tar.gz", "has_sig": false, "md5_digest": "7f9ea2946553a17c9a3ee5ad6aaa54ba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7274, "upload_time": "2018-09-19T14:05:36", "url": "https://files.pythonhosted.org/packages/0d/96/1e69f14334f43c548658837b2bf82b0855eaf1c7008b223f22e7346285ab/khan_api_wrapper-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "d96f672cc7719cfd096ae8625ca34d52", "sha256": "f86f4100500546d98e68e8a0fb8fc69e27f19244ea43ca271972a829e434d620" }, "downloads": -1, "filename": "khan_api_wrapper-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "d96f672cc7719cfd096ae8625ca34d52", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9000, "upload_time": "2018-11-15T20:25:17", "url": "https://files.pythonhosted.org/packages/65/31/0479d749144b3f8c7371f497cc87b9904d2c3476135a365919c279a29857/khan_api_wrapper-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d6d5bcd6f3e4dac45f339539532f4781", "sha256": "8d5f3276959eddf6349efe2db71d3540d3e18b9e1d72e22a99e06965a4bc08c1" }, "downloads": -1, "filename": "khan_api_wrapper-0.0.4.tar.gz", "has_sig": false, "md5_digest": "d6d5bcd6f3e4dac45f339539532f4781", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7564, "upload_time": "2018-11-15T20:25:19", "url": "https://files.pythonhosted.org/packages/15/76/5936116431a4756027618db6b8e47d935b6b81882361e2ba288dddb30a03/khan_api_wrapper-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "339aec21e22cacb2cd90f81319ffd36e", "sha256": "4c53ad52ba10c93f0cc3d26225fc4b8ff86dbadbbe20f59b5a3fbe893bec4cc6" }, "downloads": -1, "filename": "khan_api_wrapper-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "339aec21e22cacb2cd90f81319ffd36e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9007, "upload_time": "2018-11-16T23:22:21", "url": "https://files.pythonhosted.org/packages/6b/3d/48522ee6ab4afddc4a710248270dc32beae9e70f99af47c30e5bfb53cdf9/khan_api_wrapper-0.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c5b72c7ac1102d8a2994117cba82122f", "sha256": "3e5e8c997f8f965964179ed6b2760c70862726d0bb56e03700dd1fdd3a0147ec" }, "downloads": -1, "filename": "khan_api_wrapper-0.0.5.tar.gz", "has_sig": false, "md5_digest": "c5b72c7ac1102d8a2994117cba82122f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7576, "upload_time": "2018-11-16T23:22:22", "url": "https://files.pythonhosted.org/packages/4f/5c/bca665a9bf08f6359a80d3ec10f636494d6c1ff17ffac5ad61053a1100b6/khan_api_wrapper-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "335b9dcc9f9b70c2d2caa23fd6857b94", "sha256": "28d8c2bb78d8a1ee6f3a97d53edbe511ac92f85ec2a1e26e5f1c13d9fe0517cc" }, "downloads": -1, "filename": "khan_api_wrapper-0.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "335b9dcc9f9b70c2d2caa23fd6857b94", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9474, "upload_time": "2018-12-24T17:24:55", "url": "https://files.pythonhosted.org/packages/8e/98/309f410344b7253b9fb50a7f8d678e619685e6cae1462f1d750cef85daba/khan_api_wrapper-0.0.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "52447079cd55e8bd4b496109bf3ceb60", "sha256": "fca4aeb3e4089ceff6be3925644b3a9eda4dc1f3c8ddfc1b3da7dc05c63eee9f" }, "downloads": -1, "filename": "khan_api_wrapper-0.0.6.tar.gz", "has_sig": false, "md5_digest": "52447079cd55e8bd4b496109bf3ceb60", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8039, "upload_time": "2018-12-24T17:24:56", "url": "https://files.pythonhosted.org/packages/54/d3/01cf701e25e5ac20b7926689a51334568c84b3694d13d8277bdd2141597b/khan_api_wrapper-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "bfc7ac12a330d430e28582806c0989cd", "sha256": "9a4498e6aa8a156ef9ed7758798c766098ebcd476bc2d5a460a2534e2505e229" }, "downloads": -1, "filename": "khan_api_wrapper-0.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "bfc7ac12a330d430e28582806c0989cd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10278, "upload_time": "2019-03-25T18:06:35", "url": "https://files.pythonhosted.org/packages/7f/cf/4ef70299071d25b1b92ff3ba0e61eebeed6f85f53b72cb451f8ed8e5ee8e/khan_api_wrapper-0.0.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2ae4fb33d062ed6205bf05794774a075", "sha256": "5350e5edff719c84b42cd17dcdbf59de8cd9ed55e13540b5486bdf8a7cf88769" }, "downloads": -1, "filename": "khan_api_wrapper-0.0.7.tar.gz", "has_sig": false, "md5_digest": "2ae4fb33d062ed6205bf05794774a075", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8879, "upload_time": "2019-03-25T18:06:36", "url": "https://files.pythonhosted.org/packages/77/7b/e8749c7665f40736157556b44af91f02982445792c6fe270ec258ce0f252/khan_api_wrapper-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "2c01aacf3041d4d32b338ded7fd92728", "sha256": "504082bb619ac6526d5a51961b96f59e901012b9b341cf5ae72fa4b2af8d44e8" }, "downloads": -1, "filename": "khan_api_wrapper-0.0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "2c01aacf3041d4d32b338ded7fd92728", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10279, "upload_time": "2019-07-19T15:37:15", "url": "https://files.pythonhosted.org/packages/b4/fc/177a5ba3807989233a3e0d8b4b1b8d450d3c3d8e0c36f81384edf20b4326/khan_api_wrapper-0.0.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "69a40d532c8ebc8838fccbdf83110b6c", "sha256": "6467bfdd528ff310566f0b995a946bb2f6db2604da2249e3aab07b1ac580f898" }, "downloads": -1, "filename": "khan_api_wrapper-0.0.8.tar.gz", "has_sig": false, "md5_digest": "69a40d532c8ebc8838fccbdf83110b6c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9816, "upload_time": "2019-07-19T15:37:17", "url": "https://files.pythonhosted.org/packages/6e/c2/c2dd506aeacc38b8af890e92bc89e1040b3a24e05e6291f1a6940dde67f3/khan_api_wrapper-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "2df502e16311fc8f3bd97954a2b7adba", "sha256": "0b705a0e2bccf9fb6bca6e0bf506ac77b4acdcb9faab3c2066e1fe203a899c37" }, "downloads": -1, "filename": "khan_api_wrapper-0.0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "2df502e16311fc8f3bd97954a2b7adba", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10638, "upload_time": "2019-07-20T19:42:52", "url": "https://files.pythonhosted.org/packages/3b/5d/e6aeec78399a5c8cd1ee8218af28710b028df2cf90dd765bad2481168711/khan_api_wrapper-0.0.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "50aa99df2f4899b480e31e5448bfd9df", "sha256": "0324e650870f08eac317ffcaa73ee80406b7bf7a812a494aa5a649067b58d2ce" }, "downloads": -1, "filename": "khan_api_wrapper-0.0.9.tar.gz", "has_sig": false, "md5_digest": "50aa99df2f4899b480e31e5448bfd9df", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10175, "upload_time": "2019-07-20T19:42:53", "url": "https://files.pythonhosted.org/packages/ff/7b/6259d9ae1b0e91235f9ca48cfd0f1659ece5105055aa76163ce16eef2436/khan_api_wrapper-0.0.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "0e33c1f8af19ffc8ae69942dbd5767de", "sha256": "33350c97e719d35238343ccb68862122c07fd100252bff292d6f767527df0cd9" }, "downloads": -1, "filename": "khan_api_wrapper-0.0.13-py3-none-any.whl", "has_sig": false, "md5_digest": "0e33c1f8af19ffc8ae69942dbd5767de", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11263, "upload_time": "2019-10-14T21:13:17", "url": "https://files.pythonhosted.org/packages/b0/b0/314d761c351dacaaf2a6ecafa005152281bf66bf39f15cf397877787ed95/khan_api_wrapper-0.0.13-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9c926495183fd756ea3dfd000d288b17", "sha256": "55462ec67ece6b785e12e1980347b511a69cb72a1e47bb53c8e0cc4a66f48820" }, "downloads": -1, "filename": "khan_api_wrapper-0.0.13.tar.gz", "has_sig": false, "md5_digest": "9c926495183fd756ea3dfd000d288b17", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10740, "upload_time": "2019-10-14T21:13:19", "url": "https://files.pythonhosted.org/packages/31/9d/6469921bd7fcd51dbb3b8f0160db886f8550aee528e8787abedcb586696b/khan_api_wrapper-0.0.13.tar.gz" } ] }