{ "info": { "author": "Jake Hadar", "author_email": "jake1025@gmail.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python" ], "description": "bikeshare-client-python\n-----------------------\n[![Build Status](https://travis-ci.org/jakehadar/bikeshare-client-python.svg?branch=master)](https://travis-ci.org/jakehadar/bikeshare-client-python)\n[![Coverage Status](https://coveralls.io/repos/github/jakehadar/bikeshare-client/badge.svg?branch=coverage)](https://coveralls.io/github/jakehadar/bikeshare-client?branch=coverage)\n\nA Python client for discovering and capturing live bikeshare data feeds made publically available by [hundreds of global bikeshare providers](https://raw.githubusercontent.com/NABSA/gbfs/master/systems.csv) in accordance with the [General Bikeshare Feed Specification (GBFS)](https://github.com/NABSA/gbfs/blob/master/gbfs.md) standard.\n\nThis module is built with the intention of laying some of the groundwork for supporting more complex applications built around the consumption of live bikeshare data.\n\n\nSystem coverage\n---------------\n\nAs of writing, this Python client supports 256 bikeshare systems across 218 cities in 36 countries.\n\nThe list of bikeshare systems supported by this client is [actively maintained by the GBFS community](https://github.com/NABSA/gbfs/blob/master/README.md#systems-implementing-gbfs) and can be found here:\n* [systems.csv](https://raw.githubusercontent.com/NABSA/gbfs/master/systems.csv)\n\nThe code example below demonstrates how to discover and filter these systems programatically.\n\n\nInstallation\n------------\n\nInstall from PyPi using\n[pip](http://www.pip-installer.org/en/latest/), a package manager for\nPython.\n\n``` {.sourceCode .bash}\n pip install gbfs-client\n```\n\nExamples\n--------\n\nA sample implementation (Flask JSON endpoint) can be found here:\n\n* [bikeshare-json-api](https://github.com/jakehadar/bikeshare-json-api)\n\n\nInteractive walk-through\n------------------------\n\nSearching for bikeshare systems in WI and NY using the system discovery service:\n\n``` {.sourceCode .python}\n>>> from gbfs.services import SystemDiscoveryService\n>>> ds = SystemDiscoveryService()\n>>> len(ds.system_ids)\n221\n>>> [x.get('System ID') for x in ds.systems if 'WI' in x.get('Location')]\n['bcycle_bublr', 'bcycle_madison']\n>>> ds.get_system_by_id('bcycle_madison')\n{'Country Code': 'US', 'Name': 'Madison B-cycle', 'Location': 'Madison, WI', 'System ID': 'bcycle_madison', 'URL': 'https://madison.bcycle.com', 'Auto-Discovery URL': 'https://gbfs.bcycle.com/bcycle_madison/gbfs.json'}\n>>> [x.get('System ID') for x in ds.systems if 'citi bike' in x.get('Name').lower()]\n['NYC', 'jump_nyc', 'lime_new_york', 'reddy_bikeshare', 'sobi_long_beach']\n>>> ds.get_system_by_id('NYC')\n{'Country Code': 'US', 'Name': 'Citi Bike', 'Location': 'NYC, NY', 'System ID': 'NYC', 'URL': 'https://www.citibikenyc.com', 'Auto-Discovery URL': 'https://gbfs.citibikenyc.com/gbfs/gbfs.json'}\n```\n\nInstantiating a GBFS client for Citi Bike (NYC) and exploring its available feeds:\n\n```\n>>> client = ds.instantiate_client('NYC')\n>>> client.feed_names\n['system_alerts', 'system_information', 'station_information', 'station_status', 'system_regions']\n>>> client.request_feed('system_alerts')\n{'last_updated': datetime.datetime(2018, 12, 3, 1, 49, 55), 'ttl': 10, 'data': {'alerts': []}}\n```\n\nInstantiating a GBFS client directly (without the discovery service) using the auto-discovery URL for Citi Bike (found earlier):\n\n```{.sourceCode .python}\n>>> from gbfs.client import GBFSClient\n>>> client = GBFSClient('https://gbfs.citibikenyc.com/gbfs/gbfs.json', 'en')\n```\n\nSearching Citi Bike's station_information feed for two specific stations, one near 49th/8th ave and the other near Barclay/Church:\n\n```\n>>> stations = client.request_feed('station_information').get('data').get('stations')\n>>> [(x.get('name'), x.get('station_id')) for x in stations if '49' in x.get('name')]\n[('Broadway & W 49 St', '173'), ('W 49 St & 8 Ave', '450'), ('49 Ave & 21 St', '3606')]\n>>> home = next(filter(lambda x: x.get('station_id') == '450', stations))\n>>> home\n{'station_id': '450', 'name': 'W 49 St & 8 Ave', 'lat': 40.76227205, 'lon': -73.98788205, 'capacity': 59}\n>>> [(x.get('name'), x.get('station_id')) for x in stations if 'Barclay' in x.get('name')]\n[('Barclay St & Church St', '417')]\n>>> work = next(filter(lambda x: x.get('station_id') == '417', stations))\n>>> work\n{'station_id': '417', 'name': 'Barclay St & Church St', 'lat': 40.71291224, 'lon': -74.01020234, 'capacity': 23}\n```\n\nBuilding a small app to poll a station's live status and print a nice message:\n\n```{.sourceCode .python}\n>>> def live_status_for(station):\n... all_statuses = client.request_feed('station_status').get('data').get('stations')\n... return next(filter(lambda x: x.get('station_id') == station.get('station_id'), all_statuses))\n...\n\n>>> def print_status_message(station):\n... bikes_available = live_status_for(station).get('num_bikes_available')\n... print('{} is currently at {}% capacity with {} bikes available to rent.'.format(\n... station.get('name'), int(100*bikes_available/station.get('capacity')), bikes_available))\n\n>>> print_status_message(home)\nW 49 St & 8 Ave is currently at 16% capacity with 10 bikes available to rent.\n>>> print_status_message(work)\nBarclay St & Church St is currently at 91% capacity with 21 bikes available to rent.\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/jakehadar/gbfs-client", "keywords": "gbfs bikeshare client", "license": "", "maintainer": "", "maintainer_email": "", "name": "gbfs-client", "package_url": "https://pypi.org/project/gbfs-client/", "platform": "", "project_url": "https://pypi.org/project/gbfs-client/", "project_urls": { "Homepage": "https://github.com/jakehadar/gbfs-client" }, "release_url": "https://pypi.org/project/gbfs-client/0.1.5/", "requires_dist": [ "requests", "csv23", "six", "tox; extra == 'dev'", "coverage; extra == 'dev'", "versioneer; extra == 'dev'", "twine; extra == 'dev'", "bumpversion; extra == 'dev'", "pytest; extra == 'test'", "coverage; extra == 'test'" ], "requires_python": ">=2.7", "summary": "Python client for discovering and capturing GBFS bikeshare feeds.", "version": "0.1.5" }, "last_serial": 5933343, "releases": { "0.0.0.dev1": [ { "comment_text": "", "digests": { "md5": "ebada1b001bff0b2eb8e270ffd72803f", "sha256": "baa0aa7dc1a2cbe8f85840bf6d899c2e0f2efd36c8b1e535ea025cd602fdb7cb" }, "downloads": -1, "filename": "gbfs_client-0.0.0.dev1-py3.6.egg", "has_sig": false, "md5_digest": "ebada1b001bff0b2eb8e270ffd72803f", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 30630, "upload_time": "2019-09-14T23:53:27", "url": "https://files.pythonhosted.org/packages/96/90/173d1b6e75491a2ac01c52710097a873fa96b5f488f89aaffab8b59e23dd/gbfs_client-0.0.0.dev1-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "8563901a152fe3e799cfa4250280fcbb", "sha256": "2b8fe4e28f3479f1dbd26574edef51a035b6fcf7b2fd1ea188f9bd2644ebe2fe" }, "downloads": -1, "filename": "gbfs_client-0.0.0.dev1-py3-none-any.whl", "has_sig": false, "md5_digest": "8563901a152fe3e799cfa4250280fcbb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9843, "upload_time": "2018-12-03T01:13:14", "url": "https://files.pythonhosted.org/packages/78/fc/6ee2cdef43d8b07b4bd6fcf8c97d3936757b7c8135b4dfb642307100ffb4/gbfs_client-0.0.0.dev1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e304a3dc4cb785b87574c0d418746123", "sha256": "e672003d0da229b4cdac6eba76de93a3627709551f2152d13d09156358aee1dc" }, "downloads": -1, "filename": "gbfs-client-0.0.0.dev1.tar.gz", "has_sig": false, "md5_digest": "e304a3dc4cb785b87574c0d418746123", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5292, "upload_time": "2018-12-03T01:13:19", "url": "https://files.pythonhosted.org/packages/ce/53/cf3265fa8f61629493d772812f6995e36aaddfc7b7562a05ae292d26d91b/gbfs-client-0.0.0.dev1.tar.gz" } ], "0.0.0.dev2": [ { "comment_text": "", "digests": { "md5": "27876b5c4e6203f29ed31d6d5c33e848", "sha256": "bf2d2b1ad3adac0456e8d552898a2d17e34a46b69a4dded58ab0b1c705945572" }, "downloads": -1, "filename": "gbfs_client-0.0.0.dev2-py3-none-any.whl", "has_sig": false, "md5_digest": "27876b5c4e6203f29ed31d6d5c33e848", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18644, "upload_time": "2019-09-14T23:53:23", "url": "https://files.pythonhosted.org/packages/fb/7f/a54a9c97ce9861eb4a29e4dfadd445a6f1357892db8e9c0a458d7ad9f030/gbfs_client-0.0.0.dev2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "89db9a33b121e7b8723020e6cea9a589", "sha256": "0bc243520414b73c1d0334ac15a7934df55b8bac3078b5a22216d218bec70fbe" }, "downloads": -1, "filename": "gbfs-client-0.0.0.dev2.tar.gz", "has_sig": false, "md5_digest": "89db9a33b121e7b8723020e6cea9a589", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16230, "upload_time": "2019-09-14T23:53:26", "url": "https://files.pythonhosted.org/packages/15/91/0ab17e306eaa3dfe01f00e89949214aa491c85fd5866e161e8c999a09cab/gbfs-client-0.0.0.dev2.tar.gz" } ], "0.0.0.dev3": [ { "comment_text": "", "digests": { "md5": "b4ba870af6af73e1c63ae1410fe5fc14", "sha256": "7bd3cb01f5fd53f649a58b2fecc16f440598f89e3b249d2ea24cf8b37007b292" }, "downloads": -1, "filename": "gbfs_client-0.0.0.dev3-py3-none-any.whl", "has_sig": false, "md5_digest": "b4ba870af6af73e1c63ae1410fe5fc14", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18604, "upload_time": "2019-09-15T00:13:53", "url": "https://files.pythonhosted.org/packages/4b/3d/be116c86e0604debc04b9cc04a5ef3327b7dbb2bc5393af94eede4ac3c43/gbfs_client-0.0.0.dev3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fe719bfd1673b4e01e86987216c6378b", "sha256": "ea854a1bdf2cc1b9465ec08f69059bd9a27d7947a1c3df8ae64c393bc825cdd5" }, "downloads": -1, "filename": "gbfs-client-0.0.0.dev3.tar.gz", "has_sig": false, "md5_digest": "fe719bfd1673b4e01e86987216c6378b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16208, "upload_time": "2019-09-15T00:13:57", "url": "https://files.pythonhosted.org/packages/8b/4b/cf41e9eb797e08f2fc54fccf1348b4e5e8eb60754dc6f8b163126e209069/gbfs-client-0.0.0.dev3.tar.gz" } ], "0.0.1": [ { "comment_text": "", "digests": { "md5": "46645a03912c20f17989567ffb58de59", "sha256": "c3e93ea20c21dcfdecb7f67f83b20af69930da4012fc4ce8e612ebe6d6df46a8" }, "downloads": -1, "filename": "gbfs_client-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "46645a03912c20f17989567ffb58de59", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17404, "upload_time": "2019-09-15T00:21:34", "url": "https://files.pythonhosted.org/packages/0c/2c/f8020ef0551de7f0313a9bfdce0ffb919a80f23e501abc1ceff87a36233b/gbfs_client-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "130b3d9c8fc3bf0b91e8676eb5f8f811", "sha256": "d7be1376e69e3cfa9cced2ced5948adbe96ae07ba8832f511ed8c14ad30bc031" }, "downloads": -1, "filename": "gbfs-client-0.0.1.tar.gz", "has_sig": false, "md5_digest": "130b3d9c8fc3bf0b91e8676eb5f8f811", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16195, "upload_time": "2019-09-15T00:21:36", "url": "https://files.pythonhosted.org/packages/83/b0/0f97af8b924fb6d6c127ce53cf1d97b7237e9367f1ed6f1ef1b253c0f7cf/gbfs-client-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "655217cf6a8aa67b2913d05a5ad5f470", "sha256": "34908bf740f05ae14fbd87129059c71298fe4c1e1888035cd0ec6fa06c17baa6" }, "downloads": -1, "filename": "gbfs_client-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "655217cf6a8aa67b2913d05a5ad5f470", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17385, "upload_time": "2019-09-15T00:35:49", "url": "https://files.pythonhosted.org/packages/27/86/14d4a08a55d860f561c3465c514fba9da01c58fdc04cc84a3509d291981f/gbfs_client-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7251624b2865133521724d318024cb43", "sha256": "7cca5e7d79762758ecb8835cd98216d60b07fb1a88958d7e0735f3e6c5cf37e8" }, "downloads": -1, "filename": "gbfs-client-0.0.2.tar.gz", "has_sig": false, "md5_digest": "7251624b2865133521724d318024cb43", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16145, "upload_time": "2019-09-15T00:35:51", "url": "https://files.pythonhosted.org/packages/25/8c/5764f71d5da1046107335ad2afc5bd815966a8aadc1cc4e04ec4b943e341/gbfs-client-0.0.2.tar.gz" } ], "0.1": [ { "comment_text": "", "digests": { "md5": "da2f8fb77d94ac722c4d1428008eb4dc", "sha256": "32b3c0d79418e3df7e85ff97fba1a96a237b07b86d3d5413c58f4774c10c1e8d" }, "downloads": -1, "filename": "gbfs_client-0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "da2f8fb77d94ac722c4d1428008eb4dc", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 17544, "upload_time": "2019-10-05T20:54:58", "url": "https://files.pythonhosted.org/packages/0b/ab/b37d499e5d4d02d9cdf38b596fb173bd87bb289f82edad60643208f1b2b1/gbfs_client-0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4b6164691c5cc4ffe745d0e6ce2ae2d8", "sha256": "f6e5c558b813534365db3d54b28947f85117f2fbe441f68a73b24f6931edbdaf" }, "downloads": -1, "filename": "gbfs-client-0.1.tar.gz", "has_sig": false, "md5_digest": "4b6164691c5cc4ffe745d0e6ce2ae2d8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 34116, "upload_time": "2019-10-05T20:54:59", "url": "https://files.pythonhosted.org/packages/ee/84/30c79592d26499422793f82c2970984698ae362fa64626e36606feb330fc/gbfs-client-0.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "35bb532c00b3c795abf0d304929c8c11", "sha256": "77248e7d6671c5ee66340c5e43eb9ea093538b26c73c00153cc237657ee4c1d4" }, "downloads": -1, "filename": "gbfs_client-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "35bb532c00b3c795abf0d304929c8c11", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 17566, "upload_time": "2019-10-05T21:40:32", "url": "https://files.pythonhosted.org/packages/60/0f/08e09b2210b1f007c4b194459889836ca24b0d4d754cecc8033ed33b8dfc/gbfs_client-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0a0898490eb5097f2d377c81d62d7e85", "sha256": "315e84f450e45a3002e41e462731f9c966ecfd9c609aeb4f0c504d744c1c212b" }, "downloads": -1, "filename": "gbfs-client-0.1.2.tar.gz", "has_sig": false, "md5_digest": "0a0898490eb5097f2d377c81d62d7e85", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 34126, "upload_time": "2019-10-05T21:40:33", "url": "https://files.pythonhosted.org/packages/77/2a/8dd6f84e8f04b5c674e19a62f5a14c9a94075dc19dbfa005b7a03bd3ca90/gbfs-client-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "519f48b98ba8999dfe2b82674ff2dccb", "sha256": "1927452f168020e0588c228c632b33224a0933b9ae1738f6ced71b0756ef5480" }, "downloads": -1, "filename": "gbfs_client-0.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "519f48b98ba8999dfe2b82674ff2dccb", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 17566, "upload_time": "2019-10-05T21:45:34", "url": "https://files.pythonhosted.org/packages/d9/ea/c870d0c6790a8bd0e22c2ce42f76b58544c17bb2af43a0979e3b9749a1ce/gbfs_client-0.1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3ca37f8df0e74a31311c4614e8703032", "sha256": "07c40ee67ee837deb911135a70e7ba266156083bd01e352a801ad6a34686d0b3" }, "downloads": -1, "filename": "gbfs-client-0.1.3.tar.gz", "has_sig": false, "md5_digest": "3ca37f8df0e74a31311c4614e8703032", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 34034, "upload_time": "2019-10-05T21:45:36", "url": "https://files.pythonhosted.org/packages/cc/fe/d4b4fbb8b3e512ef2d41cb25b2df0d0b47f57f4e5d46b7666469c805f036/gbfs-client-0.1.3.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "92049b6202977ef804731d52a8be5888", "sha256": "a152268da02d349a91efa91360199d73c6277320f67abd683b91b67928f8c63a" }, "downloads": -1, "filename": "gbfs_client-0.1.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "92049b6202977ef804731d52a8be5888", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 17575, "upload_time": "2019-10-06T00:23:55", "url": "https://files.pythonhosted.org/packages/8d/2f/b091b0c5c9e9f9d4952dcfb018ae147541c3fbfc217b0ce28a3a55dda3ca/gbfs_client-0.1.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7157c6564babe01c1de22c48e8088531", "sha256": "d55df650db149ce2cb42ac0d4b423b33a9112c84a4e207b21933208a7d1ca08a" }, "downloads": -1, "filename": "gbfs-client-0.1.5.tar.gz", "has_sig": false, "md5_digest": "7157c6564babe01c1de22c48e8088531", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 34440, "upload_time": "2019-10-06T00:23:57", "url": "https://files.pythonhosted.org/packages/ee/5c/5297a77365e043d76ee99071bf56ec775b504ff4d7b6484e49987d4d31c0/gbfs-client-0.1.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "92049b6202977ef804731d52a8be5888", "sha256": "a152268da02d349a91efa91360199d73c6277320f67abd683b91b67928f8c63a" }, "downloads": -1, "filename": "gbfs_client-0.1.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "92049b6202977ef804731d52a8be5888", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 17575, "upload_time": "2019-10-06T00:23:55", "url": "https://files.pythonhosted.org/packages/8d/2f/b091b0c5c9e9f9d4952dcfb018ae147541c3fbfc217b0ce28a3a55dda3ca/gbfs_client-0.1.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7157c6564babe01c1de22c48e8088531", "sha256": "d55df650db149ce2cb42ac0d4b423b33a9112c84a4e207b21933208a7d1ca08a" }, "downloads": -1, "filename": "gbfs-client-0.1.5.tar.gz", "has_sig": false, "md5_digest": "7157c6564babe01c1de22c48e8088531", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 34440, "upload_time": "2019-10-06T00:23:57", "url": "https://files.pythonhosted.org/packages/ee/5c/5297a77365e043d76ee99071bf56ec775b504ff4d7b6484e49987d4d31c0/gbfs-client-0.1.5.tar.gz" } ] }