Zenly Apiで遊ぶ

自己紹介

2月からアルバイトを始めました、伊藤です。
専門学校の2年生です、プログラミングとソロキャンが趣味です。
言語はC#が少し分かります、Reactに興味があって勉強したいと思っています。
よろしくお願いいたします。

ZenlyApiで遊ぶ

ZenlyはフランスのZenly社が開発した位置情報共有アプリです

  1. リアルタイムな位置情報がわかる
  2. 友達のバッテリーの残量
  3. 寝ているか確認できる

友達の中でも賛否両論で万人受けなアプリではないです。

Zenly lp image

何かに使えそう

プログラムから友達の位置情報を取得できると面白そう

解析する

  1. Windowsでプロキシサーバーを立てる
  2. iOSにオレオレ証明書をインストールする
  3. SSl復号化

ProtcolBufferというフォーマットで通信されていました
ProtocolBuffers as utf8

ProtocolBuffersとは

Googleが開発したバイナリベースの通信フォーマットです

Protocol Buffersではスキーマの定義を強制されます。 JsonのSchemaが任意実装な点と異なります。

データには型の情報は含まれていません サーバーとクライアントにあらかじめ型情報を渡す必要があります

スキーマ定義言語

スキーマは.protoファイルを使用して定義します

 message  Company{
		uint64  id = 1; // 1
		string  name = 2; // MK System
		string  policy = 3; // アジャイル開発で価値のあるソフトウェアを創造する
	}

シリアライズ結果

08 01 12 09 4d 4b 20 53 79 73 74 65 6d 1a 45 e3 82 a2 e3 82 b8 e3 83 a3 e3 82 a4 e3 83 ab e9 96 8b e7 99 ba e3 81 a7 e4 be a1 e5 80 a4 e3 81 ae e3 81 82 e3 82 8b e3 82 bd e3 83 95 e3 83 88 e3 82 a6 e3 82 a7 e3 82 92 e5 89 b5 e9 80 a0 e3 81 99 e3 82 8b

デコード結果

"decode"

通信データには型の情報も変数名もありません .protoファイルからC#,Ruby,golangなどのモデルクラスを自動生成できるので、フロントエンドとサーバーサイドの認識の違いが無くなります。

僕は好きではない

スキーマ定義言語が読みやすい、書きやすいのは良いと思います でも通信データを人間が読めません、デバックしにくいです

API Client

ZenlyのAPIと通信するライブラリのリポジトリです https://github.com/aijkl/zenly-api-client

APIを活用した解析アプリ

通知アプリのリポジトリです https://github.com/aijkl/zenly-analytics

使い道

観察したい場所を定義

"inspection location"

ポーリングして位置情報を取得

観察したい場所にいるか判断

  • 入ったら通知
  • 離れたら通知

"discord notification"

Zenly Apiのラップ

自分のApi(orange-mikan.org/api/)から位置情報を取得できるようにする 自分のApiの認証認可で呼び出せるようになる

"proxy api"

まとめ

ProtocolBuffersという技術を知ることができました
位置情報やバッテリーの残量がわかるので、充電忘れを警告するアプリなど利用の幅は広いと感じました

この記事をシェア

弊社では、一緒に会社を面白くしてくれる仲間を募集しています。
お気軽にお問い合わせください!