ちょっと話題の記事

SORACOM APIを使って各種情報を取得する

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

SORACOMリリース

SORACOMリリースおめでとうございます!ガッツリ使いこなしてエコシステムを形成する所存です。ということで、SORACOM APIもリリースされていますので使ってみたいと思います!

API KeyとAPI Tokenの取得

まずはAPIに接続するためのキー情報を取得したいと思います!ドキュメントによるとCurlコマンドで取得できるようです。早速やってみます。まずはログイン時のEメールとパスワードを使います。あと、jqで見た目をキレイにします。

$ curl  -X POST \
      -d '{ "email": "EMAIL", "password": "PASSWORD" }' \
      https://api.soracom.io/v1/auth \
      | jq .
{
  "code": "COM0003",
  "message": "Internal server error. message:Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported"
}

おっと、エラーが出ますね。ちゃんとヘッダ付けて送ってみます。

$ curl -H "Accept: application/json" -H "Content-type: application/json" -X POST  \
      -d '{ "email": "EMAIL", "password": "PASSWORD" }' \
	https://api.soracom.io/v1/auth \
      | jq .
{
  "apiKey": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "operatorId": "YYYYYYYYYYYY",
  "token": "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
}

よし、第一関門を突破です!

サブスクライバー(Subscriber)の一覧を取得

API KeyとAPI Tokenが取れましたので、あとは各種リクエスト時にヘッダを付けて送りましょう。おそらく1時間程度で一時キーの有効期限が切れますので、切れたら再取得しましょう。

$ curl  -X GET  \
        -H "X-Soracom-API-Key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \  
        -H "X-Soracom-Token:  ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ" \
        https://api.soracom.io/v1/subscribers \
        | jq .

[
  {
    "imsi": "QQQQQQQQQQQQQQQQ",
    "msisdn": "WWWWWWWWWWWWW",
    "ipAddress": null,
    "apn": "soracom.io",
    "type": "s1.standard",
    "groupId": null,
    "createdAt": 1442390154436,
    "lastModifiedAt": 1442392789862,
    "expiredAt": null,
    "terminationEnabled": false,
    "status": "ready",
    "tags": {
      "name": "HOGE"
    },
    "sessionStatus": null,
    "speedClass": "s1.standard",
    "moduleType": "nano",
    "plan": 0,
    "expiryTime": null,
    "operatorId": "OOOOOOOOOOOOOO",
    "createdTime": 1442390154436,
    "lastModifiedTime": 1442392789862
  },
  {
    "imsi": "PPPPPPPPPPPPPPPP",
    "msisdn": "EEEEEEEEEEEEEE",
    "ipAddress": null,
    "apn": "soracom.io",
    "type": "s1.standard",
    "groupId": null,
    "createdAt": 1442390007478,
    "lastModifiedAt": 1442392856946,
    "expiredAt": null,
    "terminationEnabled": false,
    "status": "ready",
    "tags": {
      "name": "HUGA"
    },
    "sessionStatus": null,
    "speedClass": "s1.standard",
    "moduleType": "nano",
    "plan": 0,
    "expiryTime": null,
    "operatorId": "OOOOOOOOOOOOOO",
    "createdTime": 1442390007478,
    "lastModifiedTime": 1442392856946
  },

......

こちらもバッチリです。

API Reference

さて、基本的な使い方が分かってきましたので、どんなAPIがあるか確認してみたいと思います。API ReferenceのWebページを開いて認証情報を入力してみましょう。すると、下の方にAPI一覧が出来きます。今後続々と追加されるのではと期待しています。

screenshot_2015-10-03_23_37_14

API Referenceでは、API名を選択すると、動作確認をすることができます。パラメータを指定できますので、どのAPIがどのような引数を渡す必要があるのか確認することができます。以下は画面からの入力欄の例です。

screenshot 2015-10-03 23.42.56

統計情報(Stats)

さて、API Reference一覧から統計情報の取得ができそうでしたのでやってみたいと思います。統計情報(stats)を取得するためには、fromとtoとperiodの指定をする必要があります。また、パラメータを複数指定する場合は&で繋ぎますが、URLなのでエスケープ指定します。または、URL全体を"で囲います。

fromとtoでは、unixtimeを指定する必要がありますが、手入力の指定は面倒なので、計算してくれるサイトなどを活用します。

$ curl  -X GET  \
        -H "X-Soracom-API-Key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \  
        -H "X-Soracom-Token:  ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ" \
https://api.soracom.io/v1/stats/beam/subscribers/UUUUUUUUUUUUU/?from=1443625200\&to=1443798000\&period=day \
        | jq .

[
  {
    "date": "20150930",
    "unixtime": 1443571200,
    "beamStatsMap": {
      "inHttp": {
        "count": 1934
      },
      "outHttps": {
        "count": 1934
      }
    }
  },
  {
    "date": "20151001",
    "unixtime": 1443657600,
    "beamStatsMap": {
      "inHttp": {
        "count": 11499
      },
      "outHttps": {
        "count": 11499
      }
    }
  },
  {
    "date": "20151002",
    "unixtime": 1443744000,
    "beamStatsMap": {
      "inHttp": {
        "count": 17153
      },
      "outHttps": {
        "count": 17153
      }
    }
  }
]

グループ(Group)

グループは、サブスクライバーをまとめたものです。SORACOM Beamを利用する際に指定したりします。さっそく、情報収集してみましょう。

$ curl  -X GET  \
        -H "X-Soracom-API-Key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \  
        -H "X-Soracom-Token:  ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ" \
        https://api.soracom.io/v1/groups  \
        | jq .

[
  {
    "operatorId": "YYYYYYYYYYYY",
    "groupId": "GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG1",
    "createdAt": 1442393707982,
    "lastModifiedAt": 1443061049837,
    "configuration": {
      "SoracomBeam": {
        "tcp://beam.soracom.io:8023": {
          "name": "Fluentd",
          "destination": "tcps://mydomain:24224",
          "enabled": true,
          "addSubscriberHeader": false
        },
        "http://beam.soracom.io:8888/": {
          "name": "Kinesis",
          "destination": "https://kinesis.ap-northeast-1.amazonaws.com/",
          "enabled": true,
          "addSubscriberHeader": true,
          "customHeaders": {}
        }
      }
    },
    "tags": {
      "name": "KinesisSample"
    },
    "createdTime": 1442393707982,
    "lastModifiedTime": 1443061049837
  },
  {
    "operatorId": "YYYYYYYYYYYY",
    "groupId": "GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG2",
    "createdAt": 1443146981895,
    "lastModifiedAt": 1443594279137,
    "configuration": {
      "SoracomBeam": {
        "http://beam.soracom.io:8888/": {
          "name": "test",
          "destination": "https://www.google.com/",
          "enabled": true,
          "addSubscriberHeader": false,
          "customHeaders": {},
          "addSignature": false
        }
      }
    },
    "tags": {
      "name": "GoogleSample"
    },
    "createdTime": 1443146981895,
    "lastModifiedTime": 1443594279137
  },
   .....
]

こちらも取得できました。結果を見てみると中々興味深い情報がありますね。SORACOM Beam宛に来たリクエストがどこに転送されるか確認できると思います。たとえば、Kinesisに転送するなどです。

まとめ

今回は、SORACOM APIを使って様々な情報を収集してみました。取得だけでなく設定することもできますので、別システムとの連携も簡単そうですね。

参考資料

SORACOM API 利用ガイド

API Reference

Unixtime相互変換ツール

curlで複数パラメータのGETを投げる