Metadata-Version: 2.1
Name: python-citybikes
Version: 0.2.0
Summary: Client interface for the Citybikes API
Home-page: https://github.com/eskerda/python-citybikes
Author: Lluís Esquerda
Author-email: eskerda@gmail.com
License: UNKNOWN
Keywords: Citybikes api.citybik.es bike sharing
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*
Requires-Dist: requests
Requires-Dist: six

python-citybikes
================
.. image:: https://travis-ci.org/eskerda/python-citybikes.svg?branch=master
    :target: https://travis-ci.org/eskerda/python-citybikes

`python-citybikes` is a python client for the `Citybikes API`_.

About Citybikes
---------------
Citybikes_ is a project about making bike sharing data available to both users
and developers. It has a nice and easy to use API, but this package might be
useful to projects consuming the API.

``python-citybikes`` must not be confused with `pybikes`_:

- `pybikes`_ is a set of tools to access bike sharing data directly from the providers. It's the library powering the project and the API. If a network is not supported or does not correctly work, it's there where the issue or the contribution must be sent.
- `python-citybikes` is a python wrapper around the `Citybikes API`_.

.. _Citybikes: https://citybik.es
.. _Citybikes API: https://api.citybik.es
.. _pybikes: https://github.com/eskerda/pybikes


Installation
------------

.. code-block:: sh

    $ pip install python-citybikes

Usage
-----
First instantiate a client

.. code-block:: python

    >>>> import citybikes
    >>>> client = citybikes.Client()

Get the full list of networks

.. code-block:: python

    >>>> networks = list(client.networks)
    >>>> len(networks)
    458
    >>>> networks[0]
    {'name': 'Opole Bike', 'href': '/v2/networks/opole-bike', 'location': {'lat
    itude': 50.6645, 'city': 'Opole', 'country': 'PL', 'longitude': 17.9276}, '
    id': 'opole-bike', 'company': ['Nextbike GmbH']}

Get stations from a network

.. code-block:: python

    >>>> len(networks[0].stations)
    16
    >>>> list(networks[0].stations)[0]
    {'timestamp': '2016-11-22T16:05:44.318000Z', 'id': 'd8c9f66260759aeb27445b2
    cddf2d6b9', 'name': 'Pętla Autobusowa - Dambonia', 'free_bikes': 7, 'empty_
    slots': 3, 'latitude': 50.661775266224, 'extra': {'bike_uids': ['60128', '6
    0108', '60063', '60062', '60052', '60037', '60190'], 'number': '6011', 'slo
    ts': 10, 'uid': '132115'}, 'longitude': 17.888891100884}

Instantiate a network by id directly

.. code-block:: python

    >>>> bicing = citybikes.Network(client, uid='bicing')
    >>>> bicing['name']
    'Bicing'
    >>>> len(bicing.stations)
    465

Get a network ordered by distance to lat, lng

.. code-block:: python

    >>>> # Lets get the nearest network to NY lat, lng
    >>>> net, dist = next(iter(client.networks.near(40.7128, -74.0059)))
    >>>> net
    {'href': '/v2/networks/citi-bike-nyc', 'id': 'citi-bike-nyc', 'gbfs_href': 
    'https://gbfs.citibikenyc.com/gbfs/gbfs.json', 'location': {'latitude': 40.
    7143528, 'country': 'US', 'longitude': -74.00597309999999, 'city': 'New Yor
    k, NY'}, 'company': ['NYC Bike Share, LLC', 'Motivate International, Inc.',
    'PBSC Urban Solutions'], 'name': 'Citi Bike'}

Get stations from a network ordered by distance to lat, lng

.. code-block:: python

    >>>> # Now, get stations ordered by distance to Manhattan center
    >>>> sts = net.stations.near(40.7831, -73.9712)
    >>>> for s, dist in sts[:5]:
    ...     print(s['name'])
    ...
    W 82 St & Central Park West
    Central Park West & W 85 St
    W 84 St & Columbus Ave
    Central Park West & W 76 St
    W 89 St & Columbus Ave



History
=======
0.2.0 (2021-02-07)
------------------
* Accept headers on client init
* Remove user-agent argument (superseded by headers)

0.1.4 (2019-07-26)
------------------
* Fix python 2 compatibility

0.1.3 (2017-02-13)
------------------
* Add JSON Encoder for resources

0.1.1 (2016-11-22)
------------------
* Improve docs
* near helpers also return relative distance

0.1.0 (2016-11-17)
------------------
* First release
* Can navigate the Citybikes API
* Requests for resources are done only once


