bocco package

Module contents

BOCCO API python ライブラリ

GitHub:https://github.com/YUKAI/bocco-api-python
Copyright:YUKAI Engineering Inc.
Lisence:MIT, see LICENSE for more details.

Web API の詳細は http://api-docs.bocco.me を参照してください。

Submodules

bocco.api module

exception bocco.api.ApiError(body)[source]

Bases: OSError

API エラー

Web API: http://api-docs.bocco.me/reference.html#section-31

class bocco.api.Client(access_token)[source]

Bases: object

BOCCO API クライアント

download(url, dest)[source]

ファイルをダウンロードする

Web API: http://api-docs.bocco.me/reference.html#get-messagesuniqueidextname

get_messages(room_uuid, newer_than=None, older_than=None, read=True)[source]

メッセージ一覧を取得

Note

このAPIにアクセスするためには、追加の権限が必要です。BOCCOサポートにお問い合わせください。

Web API: http://api-docs.bocco.me/reference.html#get-roomsroomidmessages

get_rooms()[source]

自分が入っている部屋一覧を取得

Web API: http://api-docs.bocco.me/reference.html#get-roomsjoined

post_audio_message(room_uuid, audio)[source]

音声メッセージの送信

Note

未実装

post_image_message(room_uuid, image)[source]

画像メッセージの送信

Note

未実装

post_text_message(room_uuid, text)[source]

テキストメッセージの送信

現在 python ライブラリではテキストメッセージのみサポートしています。

Web API: http://api-docs.bocco.me/reference.html#post-roomsroomidmessages

classmethod signin(api_key, email, password)[source]

新しいセッションでクライアントを作成する

api = bocco.api.Client.signin('API KEY', 'test@example.com', 'pass')
print(api.access_token)

内部的には http://api-docs.bocco.me/get_access_token.html と同じ処理を行っています。

Web API: http://api-docs.bocco.me/reference.html#post-sessions

subscribe(room_uuid, newer_than=None, read=True)[source]

イベントの取得

この API はロングポーリングでの利用を想定しています。 newer_than パラメータより新しい ID のメッセージが来た場合に、レスポンスが返ります。 来なかった場合はタイムアウトとなります。

Note

このAPIにアクセスするためには、追加の権限が必要です。BOCCOサポートにお問い合わせください。

Web API: http://api-docs.bocco.me/reference.html#get-roomsroomidsubscribe

bocco.cli module

bocco.cli.main()[source]

bocco.models module

class bocco.models.ApiErrorBody(data)[source]

Bases: bocco.models._Model

エラーレスポンス

エラーコードの詳細は以下を参照 http://api-docs.bocco.me/reference.html#section-31

>>> e = ApiErrorBody({
...     'code': 401,
...     'message': u'ERROR MESSAGE'
... })
>>> e['code']
401
>>> e['message'] == u'ERROR MESSAGE'
True
schema = Schema({'message': <class 'str'>, 'code': <class 'int'>})
class bocco.models.Message(data)[source]

Bases: bocco.models._Model

部屋へ送信されたメッセージ

>>> m = Message({
...     'id': 123,
...     'dictated': True,
...     'unique_id': u'a8852948-fc6e-40d4-a384-e4c6a63b705e',
...     'media': u'text',
...     'audio': u'',
...     'message_type': u'normal',
...     'text': u'メッセージです',
...     'image': u'',
...     'sender': u'0a0f6b39-ac63-4731-9c94-756ae80dd0b9',
...     'date': u'2016-03-02 11:00:59',
...     'user': {
...         'uuid': u'0a0f6b39-ac63-4731-9c94-756ae80dd0b9',
...         'user_type': u'bocco',
...         'nickname': u'ニックネーム',
...         'seller': u'',
...         'address': u'00:11:22:33:44:55',
...         'icon': u'http://example.com/image.png'
...     }
... })
>>> m['id']
123
>>> m['text'] == u'メッセージです'
True
>>> m['dictated']
True
>>> m['user']['uuid']
UUID('0a0f6b39-ac63-4731-9c94-756ae80dd0b9')
schema = Schema({'id': <class 'int'>, 'message_type': Or(<enum 'MessageType'>, Use(<enum 'MessageType'>), Use(<function Message.<lambda>>)), 'audio': And(<class 'str'>, <function <lambda>>), 'date': Or(<class 'arrow.arrow.Arrow'>, Use(<function get>)), 'image': And(<class 'str'>, <function <lambda>>), 'text': <class 'str'>, 'sender': Or(<class 'uuid.UUID'>, Use(<class 'uuid.UUID'>)), 'media': Or(<enum 'MessageMedia'>, Use(<enum 'MessageMedia'>), Use(<function Message.<lambda>>)), 'user': Or(<class 'bocco.models.User'>, Use(<class 'bocco.models.User'>)), 'unique_id': Or(<class 'uuid.UUID'>, Use(<class 'uuid.UUID'>)), 'dictated': <class 'bool'>})
class bocco.models.MessageMedia[source]

Bases: enum.Enum

メッセージのメディア

audio = 'audio'
image = 'image'
stamp = 'stamp'
text = 'text'
unknown = 'unknown'
class bocco.models.MessageType[source]

Bases: enum.Enum

メッセージの種別

normal = 'normal'
system_human_joined = 'system.human_joined'
system_sensor_joined = 'system.sensor_joined'
unknown = 'unknown'
class bocco.models.Room(data)[source]

Bases: bocco.models._Model

部屋情報

>>> r = Room({
...     'uuid': u'3e6aceea-4db1-44a3-b2a9-4ccfccd843e1',
...     'name': u'テストルーム',
...     'updated_at': u'2011-02-03',
...     'members': [
...         {
...             'read_id': 123,
...             'joined_at': u'2010-01-02',
...             'user': {
...                 'uuid': 'u7b44ddd8-d1b0-4666-a11d-4dac68068ebd',
...                 'user_type': u'human',
...                 'nickname': u'TEST USER',
...                 'seller': u'',
...                 'address': u'00:11:22:33:44:55',
...                 'icon': u'http://example.com/image.png'
...             }
...         }
...     ],
...     'messages': [
...         {
...             'id': 24686,
...             'unique_id': u'1DB34B93-0DFA-4150-AEF5-ffffffffffff',
...             'date': u'2015-07-31T21:47:46+09:00',
...             'media': u'text',
...             'message_type': u'normal',
...             'user': {
...                 'uuid': u'cffbf787-dd20-4157-8279-ffffffffffff',
...                 'user_type': u'human',
...                 'nickname': u'mash',
...                 'icon': u'http://example.com/1/users/cffbf787-dd20-4157-8279-ffffffffffff/d4187679-bd07-49f8-94c9-000000000000.png',
...                 'seller': u''
...             },
...             'dictated': False,
...             'text': u'hoge',
...             'audio': u'http://example.com/1/messages/24686.ogg',
...             'image': u'',
...             'sender': u'cffbf787-dd20-4157-8279-ffffffffffff',
...             'detail': None
...         }
...     ],
...     'sensors': [
...         {
...             'uuid': u'0af1c101-3b7d-40a8-9e63-bf03f2dda6c4',
...             'user_type': u'sensor_door',
...             'nickname': u'DOOR SENSOR',
...             'seller': u'',
...             'address': u'00:11:22:33:44:55',
...             'icon': u'http://example.com/image.png'
...         }
...     ],
... })
>>> r['uuid']
UUID('3e6aceea-4db1-44a3-b2a9-4ccfccd843e1')
>>> r['name'] == u'テストルーム'
True
>>> r['updated_at']
<Arrow [2011-02-03T00:00:00+00:00]>
>>> r['members'][0]['user']['nickname'] == 'TEST USER'
True
>>> r['sensors'][0]['user_type'] == UserType.sensor_door
True
>>> r['messages'][0]['id'] == 24686
True
schema = Schema({'uuid': Or(<class 'uuid.UUID'>, Use(<class 'uuid.UUID'>)), 'updated_at': Or(<class 'arrow.arrow.Arrow'>, Use(<function get>)), 'messages': Or(<function Room.<lambda>>, Use(<function Room.<lambda>>)), 'members': Or(Use(<function Room.<lambda>>), <function Room.<lambda>>, Use(<function Room.<lambda>>)), 'sensors': Or(<function Room.<lambda>>, Use(<function Room.<lambda>>)), 'name': And(<class 'str'>, <function Room.<lambda>>)})
class bocco.models.RoomUser(data)[source]

Bases: bocco.models._Model

部屋と紐付いたユーザ情報

>>> u = RoomUser({
...     'read_id': 123,
...     'joined_at': u'2015-01-02',
...     'user': {
...         'uuid': u'7b44ddd8-d1b0-4666-a11d-4dac68068ebd',
...         'user_type': u'bocco',
...         'nickname': u'TEST USER',
...         'seller': u'',
...         'address': u'00:11:22:33:44:55',
...         'icon': u'http://example.com/image.png'
...     }
... })
>>> u['read_id']
123
>>> u['joined_at']
<Arrow [2015-01-02T00:00:00+00:00]>
>>> u['user']['uuid']
UUID('7b44ddd8-d1b0-4666-a11d-4dac68068ebd')
schema = Schema({'joined_at': Or(<class 'arrow.arrow.Arrow'>, Use(<function get>)), 'read_id': <class 'int'>, 'user': Or(<class 'bocco.models.User'>, Use(<class 'bocco.models.User'>))})
class bocco.models.Session(data)[source]

Bases: bocco.models._Model

API クライアントのセッション情報

>>> s = Session({
...     'access_token': u'Dummy Token',
...     'uuid': u'17023f65-065f-41e4-b648-cdd38076a7c9',
... })
>>> s['access_token'] == u'Dummy Token'
True
>>> s['uuid']
UUID('17023f65-065f-41e4-b648-cdd38076a7c9')
schema = Schema({'uuid': Or(<class 'uuid.UUID'>, Use(<class 'uuid.UUID'>)), 'access_token': <class 'str'>})
class bocco.models.User(data)[source]

Bases: bocco.models._Model

BOCCO ユーザ

BOCCO 本体またはアプリユーザの情報。

>>> u = User({
...     'uuid': u'7b44ddd8-d1b0-4666-a11d-4dac68068ebd',
...     'user_type': u'bocco',
...     'nickname': u'ニックネーム',
...     'seller': u'',
...     'address': u'00:11:22:33:44:55',
...     'icon': u'http://example.com/image.png'
... })
>>> u['uuid']
UUID('7b44ddd8-d1b0-4666-a11d-4dac68068ebd')
>>> u['user_type'] == UserType.bocco
True
>>> u['nickname'] == u'ニックネーム'
True
>>> u['seller'] == u''
True
>>> u['icon'] == u'http://example.com/image.png'
True
schema = Schema({'uuid': Or(<class 'uuid.UUID'>, Use(<class 'uuid.UUID'>)), 'nickname': And(<class 'str'>, <function User.<lambda>>), Optional('address'): <class 'str'>, 'user_type': Or(<enum 'UserType'>, Use(<enum 'UserType'>), Use(<function User.<lambda>>)), Optional('icon'): And(<class 'str'>, <function <lambda>>), 'seller': <class 'str'>})
class bocco.models.UserType[source]

Bases: enum.Enum

ユーザ種別

bocco = 'bocco'
human = 'human'
sensor_door = 'sensor_door'
sensor_lock = 'sensor_lock'
unknown = 'unknown'

bocco.web module

bocco.web.app = <Flask 'bocco.web'>

Flask application

bocco.web.assets(filename)[source]
bocco.web.favicon()[source]
bocco.web.index()[source]
bocco.web.messages(uuid)[source]
bocco.web.room(uuid)[source]
bocco.web.send(uuid)[source]