Help us understand the problem. What is going on with this article?

PythonでWebAPIにアクセスして、IoTデータを登録・取得する(dweet.io, Requests, HTTPie)

More than 3 years have passed since last update.

WebAPIを使って、dweet.ioという、IoTデータのメッセージングサービスを利用してみます。下の画像は Raspberry Piとdweet.ioのサービスを利用して作ってみた植物状態監視ダッシュボードです。(詳細は別記事にてご紹介予定です)

スクリーンショット 2017-05-08 12.44.21.png

方法1. Terminalコマンドで WebAPIにアクセスする

最後はpythonにやらせるとしても、動作確認がterminalでサクッとできると便利です。

HTTPieのインストール

mac
$ brew install httpie

Github Starsが30000もついている鉄板ライブラリです!ハイライトでResponseヘッダーがすごく見やすい。

httpie.png

インストールすると httpコマンドで HTTPメソッドが使えるようになります。(デフォルトはGETメソッドです)

データの登録

dweet.ioは https://dweet.io/dweet/for/<id>のURLに、?key=valueのqueryを投げることで、簡単にデータを登録できます。(POSTメソッドを使うと、JSONデータを登録することもできます(後述))

# -v オプションで request_headerも出力できます
$ http https://dweet.io/dweet/for/my-thing-name?hello=world
httpieによるresponse_header出力
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Connection: keep-alive
Content-Encoding: gzip
Content-Type: application/json
Date: Mon, 08 May 2017 03:13:38 GMT
Transfer-Encoding: chunked

{
    "by": "dweeting",
    "the": "dweet",
    "this": "succeeded",
    "with": {
        "content": {
            "hello": "world"
        },
        "created": "2017-05-08T03:13:38.230Z",
        "thing": "my-thing-name",
        "transaction": "54f19ae4-3428-4ea3-8275-1a77d49a11a0"
    }
}

データの取得

dweet.ioは https://dweet.io/get/latest/dweet/for/<id>のURLにGETメソッドでアクセスすることで、JSON形式でデータを取得できます。

$ http https://dweet.io/get/latest/dweet/for/my-thing-name
httpieによるresponse_header出力2
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Connection: keep-alive
Content-Encoding: gzip
Content-Type: application/json
Date: Mon, 08 May 2017 03:13:55 GMT
Transfer-Encoding: chunked

{
    "by": "getting",
    "the": "dweets",
    "this": "succeeded",
    "with": [
        {
            "content": {
                "hello": "world"
            },
            "created": "2017-05-08T03:13:38.230Z",
            "thing": "my-thing-name"
        }
    ]
}

方法2. Pythonから WebAPIにアクセスする

Requestsのインストール

$ pip install requests

Requestsは非常に直感的なAPIを持ち、人間にとって使いやすいPython用のHTTPライブラリです。こちらもGitHub Starsが25000と鉄板のライブラリです。

Requestsライブラリの使い方は以下の通りです。公式の quickstartが非常にまとまった documentになっていてオススメです。

import requests

#get
r = requests.get('url')
#get: query付き
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get('url', params=payload)

#post
r = requests.post('url', data = {'key':'value'})

#cookies
r = requests.get('url')
cookie = r.cookies['cookie_name']
r = requests.get('url', cookies=cookie)

#response
print(r.url) 
print(r.status_code)
print(r.headers)
print(r.text)
print(r.content)
print(r.json())

urlが間違っていた場合の動作:
* siteが存在しない: 例外を吐いて終了する
* pageが存在しない: 何かしらのobjectが返ってくる (status_code=404など)

データの登録・取得

Requestsを使った、dweet.ioへのデータ登録・取得は以下のようにしてできます

import requests
import pprint
import time

# データの登録: post
for i in range(10):
  r = requests.post('https://dweet.io/dweet/for/iot-data', data = {'temp':'23', 'humid':'40'})
  time.sleep(1)

# データの取得: get
r = requests.get("https://dweet.io/get/latest/dweet/for/iot-data")
pprint.pprint(r.json())
terminal出力結果
{u'by': u'getting',
 u'the': u'dweets',
 u'this': u'succeeded',
 u'with': [{u'content': {u'humid': 40, u'temp': 23},
            u'created': u'2017-05-08T04:04:18.887Z',
            u'thing': u'iot-data'}]}

参考: http://qiita.com/ogawatachi/items/d178bce8a9e60b5d459b

msrks
Computer Scienceと物理が好きです
http://msrks.github.io
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away