この記事は、Milkcocoa Advent Calendar 2016 の5日目の記事です。

Milkcocoa Advent Calendar 2016
http://qiita.com/advent-calendar/2016/milkcocoa

Milkcocoaを使って何か作ろうと思っていたのですが、
python sdkを使い始めるまでのところでいろいろはまったので。

はまった点について、つらつらと書いていくことにしました。。

Milkcocoa python_sdk
https://github.com/milk-cocoa/python_sdk

Pythonの環境

Pythonは、anaconda3-4.1.1で、3.5.2を使用しました。

$ python --version
Python 3.5.2 :: Continuum Analytics, Inc.

Milkcocoa python_sdkのセットアップ

Pythonの環境が準備できたので、
Milkcocoa python_sdkをセットアップします。

$ git clone https://github.com/milk-cocoa/python_sdk.git
$ cd python_sdk
$ python setup.py install
Traceback (most recent call last):
 File "setup.py", line 29, in <module>
   install_requires=get_packages(),
 File "setup.py", line 22, in get_packages
   requirements = [requirement.req.project_name for requirement in requirements]
 File "setup.py", line 22, in <listcomp>
   requirements = [requirement.req.project_name for requirement in requirements]
AttributeError: 'Requirement' object has no attribute 'project_name'

が、上記のようなエラーがでてしまいます。
この問題は以下にpullreqが上がっているので、これを参考に対処します。

セットアップがうまくいかなかったので修正 | milk-cocoa/python_sdk #3
https://github.com/milk-cocoa/python_sdk/pull/3

setup.pyを以下に従って修正。
https://github.com/milk-cocoa/python_sdk/pull/3/files

再度インストールを試みます。

$ python setup.py install
running install
running bdist_egg
running egg_info
※途中省略※
Finished processing dependencies for milkcocoa-python-sdk==1.0

インストールできたようです。

$ pip freeze | grep milkcocoa
milkcocoa-python-sdk==1.0

サンプルを動かす

次に、README.mdに記載されているサンプルを抜粋して動かしてみます。
{your-app-id}の部分は、作成したMilkcocoaアプリのIDに置き換えます。

sample.py

import sys
import time

import milkcocoa.milkcocoa as milkcocoa

milkcocoaClient = milkcocoa.Milkcocoa.connect("{your-app-id}");

datastore = milkcocoaClient.datastore("python")

datastore.push({"content":"Hello"})

time.sleep(3)

実行してみます。

$ python sample.py
Traceback (most recent call last):
 File "sample.py", line 6, in <module>
※途中省略※
   self._sslobj.do_handshake()
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)

が、上記のようなエラーが出てしまいます。
ca.certファイルあたりが怪しい気がするのですが、
ひとまず、SSLでの通信をあきらめることにします。

sample2.py

import sys
import time

import milkcocoa.milkcocoa as milkcocoa

milkcocoaClient = milkcocoa.Milkcocoa.connect("{your-app-id}", useSSL=False);

datastore = milkcocoaClient.datastore("python")

datastore.push({"content":"Hello"})

time.sleep(3)

以下のように実行した後に、
Milkcocoaのdashboardから確認するとpushしたValueが登録されていることが確認出来ます。

$ python sample2.py

SSLの件は、気持ち悪いのでわかったら更新しておきますが。
これでPythonからもMilkcocoaのデータストアにアクセスすることが出来ます。

これで、IoTデバイスから収集したデータを、
Jupyterで可視化してみたり、機械学習に使ってみたりと。
Pythonが得意な分野での、活用が広がるのではないかと思います。