Do you want get weather forecast, BitCoin vs EUR valuation and know your power consumption? A lot of data is available on free APIs. Your program can just make a regular HTTP GET request – it’s just like loading a web page with Firefox.
In this example, we use Python 3 to read weather from one API and write it to another API for an IoT device.
Following this tutorial requires some familiarity with Linux command line interface and Python.
BotBook.com API for IoT is currently in invite only beta. Join BotBook.com mailing list to get an invitation on the next round of invitations. For Open Weather Map API, sample API keys are used. For real data, a registration is needed. Techniques used here are easy to apply to many other APIs, too.
Install and Start iPython
Popular Linuxes already have Python. To have a very nice interactive console, we’ll install iPython (aka Jupyter).
$ sudo apt-get update $ sudo apt-get -y install ipython3
Then run it. You can type a calculation (or any Python commands) to see immediate results.
$ ipython3 In [1]: 2+2 Out[1]: 4
Let’s use “requests” library to make HTTP GET requests (i.e. loading web pages).
In [2]: from requests import get
We load a sample JSON file form Open Weather Map. Yes, you can just click a link to view it in your browser.
In [3]: r=get("http://samples.openweathermap.org/data/2.5/forecast?q=Helsinki,fi&appid=b1b15e88fa797225412429c1c50c122a1")
Convert the text to Python dictionary, a native Python type. This will make it easy to extract the temperature.
In [4]: d=r.json()
We can play with d. Just add once component at the time, and we’ll extract temperature in no time.
In [5]: d.keys() Out[5]: dict_keys(['message', 'cod', 'cnt', 'city', 'list'])
It seems to be Kelvin, got to minus 273 to get Celcius.
In [6]: t=d["list"][0]["main"]["temp"]-273.15
Now t contains temperature in Celcius, and t is conveniently a floating point.
In [7]: t Out[7]: 13.520000000000039 In [8]: t=round(t,1) In [9]: t Out[9]: 13.5
To upload the data to BotBook.com API for our IoT devices, we just load a web page with “?x=13.5” in the end.
In [10]: r=get("http://one.api.botbook.com/add/APIKEYREDACTED/?x=%f" % t) In [11]: r.text Out[11]: 'OK Added value to server database.\n'
The last text “OK Added…” was printed by the server.
Well done, you’ve now walked trough a simple example of using web APIs with Python3.
What Next?
Write your program into a file and run it with ‘python3 teroapi.py’.
Put your program into cron (‘crontab -e’) to run it automatically every hour.
Subscribe BotBook.com mailing list for IoT, Linux and robot related tips and offers.
References
BotBook.com API one
Python Requests homepage
Winter photo by Jaxon Stevens.
Open Weather Map 5 day forecast API documentation
IoT.Botbook.Com – Support Material for BotBook.com Method for IoT prototyping
Tested with Xubuntu 14.04 LTS amd64. Updates: Fixed typos, added photo, improved copy, keywords.