fascinated with tofu

豆腐に魅せられて

IIJ mio クーポンスイッチ API を叩いてテザリングを楽にする

仕事で少し API を触る機会があり学習中の身なのだが、そういえば普段使っている IIJ mio の格安 SIM には API があったなと思いいたり、触ってみたので記録がてら。

はじめに

格安 SIM を使い始めて久しいが、LTE 通信(高速なインターネット通信)を On / Off できるという概念は面白いと思った。

自分の場合、出先でのスマホ作業は仕事用端末の iPhone を使っているとだいたい通信制限ギリギリになってしまうため、どうしても出先でネット環境が必要になった場合、私用携帯の Android SIM フリー端末 (Zenpad3 )にてテザリングをして使い分けている。

クーポンアプリはオフィシャルなものとサードパーティのものを一つずつ使っていた。

しかし、API ならばブラウザとかターミナルとか POSTMAN (*1) でも叩けるのでは?いちいちタブレットでアプリ開く必要ないのでは? と思ったのが本記事のきっかけとなった。

(*1)POSTMAN

www.getpostman.com

参照

IIJmio クーポンスイッチ API リファレンス www.iijmio.jp

IIJmio デベロッパコンソール

IIJmioクーポンスイッチAPI

やりたいこと

Android にてテザリングしはじめたら ー ①
母艦(MBP)側でその SSID を拾いに行く  ー ②
同時に IIJ mio クーポンを ON にする ー ③

③の準備

順番前後しますが

POSTMAN のインストール

無くてもできなくはないが、今後も色々と捗るのでまだの方はインストールをどうぞ。インストール方法は割愛

IIJ mio の API 「みおポン API」を叩くために必要な情報の確認方法

API を操作したいときの基本としては、必ず用意されているであろうリファレンスガイドなどを読むことだ。

デベロッパID 開発者を識別する文字列です。 IIJmioクーポンスイッチAPIを利用する際に、X-IIJmio-Developer ヘッダに指定する必要があります。

アクセストークン アプリケーションの利用者を識別する文字列で、mioIDとパスワードによって利用者の認証/認可を行うことで発行されます。

IIJmioクーポンスイッチAPIを利用する際に、X-IIJmio-Authorization ヘッダに指定する必要があります。

この絵によると、(a) の作業と (b) の作業をすると得られるリダイレクト URI に含まれるアクセストークンを得る必要があるとわかる。

f:id:rrringress:20180123005959p:plain

(a) の作業:ブラウザからのログイン

mioID / パスワードを用意し、ブラウザで https://api.iijmio.jpにアクセスする。

https://api.iijmio.jp/mobile/d/v1/authorization/以下略 という URL に遷移する。

ここで mioID / パスワードを入力。MA から始まる。 f:id:rrringress:20180123010512p:plain

ログインをクリックして進む。 これで認可までが完了したことになる。

(b) の作業:アクセストークンの取得

次に、許可するをクリックすると、デベロッパ ID が取得でき、アプリ1~3 とその URI を編集できる画面となる。

これでX-IIJmio-Developer が取得できた。

f:id:rrringress:20180123010503p:plain

ここでブラウザの URL バーにある文字列のなかに access_token の他に、token_type, expires_in , state が新たに含まれている。

https://api.iijmio.jp/mobile/d/v1/console/#access_token=QHgWZ7◻◻◻◻◻◻◻&state=e9b5fab3e48e3d62◻◻◻◻◻◻◻&token_type=Bearer&expires_in=7776000

ちなみにアプリ名や Redirect URI は、サンプルのものと同じにしてみた。

f:id:rrringress:20180123011205p:plain

CLI からだけで実施する場合は、リクエストのサンプルの通り。State だけは勝手につけて良い値。

https://api.iijmio.jp/mobile/d/v1/authorization/?response_type=token&client_id=example_developer_idS&state=example_state&redirect_uri=jp.ad.iij.couponswitch%3A%2F%2Fcb

クーポンの操作(状態確認)

POSTMAN を使っていく。 まずはクーポンの状態確認から。

GET メソッドにて、

https://api.iijmio.jp/mobile/d/v2/coupon/
を宛先とし、

Headers にて、先ほど得た値を指定する
X-IIJmio-Developer,
X-IIJmio-Authorization

ここ SEND ボタンをクリックして成功すると Status 200 OK となり情報が返ってくる。

hddServiceCode は回線の固有識別子なので覚えておく必要がある。 その下には、残りのクーポン量などが表示されている。

f:id:rrringress:20180123013642p:plain

クーポンの操作(ON / OFF)

今度は PUT メソッドにて、同じ URL を叩くが、新たに Content-Type : application/json というヘッダを追加する。

f:id:rrringress:20180123014012p:plain

さらに、Body のタブから、「クーポンを ON にするぞ」という命令文を記述する。

命令するので PUT なんだと覚えている。もっというと Headers 情報は、正しい API リクエストであることの証明で、Body 情報は命令の中身というざっくり理解。

{"couponInfo" : [{"hdoInfo" : [{ "hdoServiceCode": "hdoXXXXXXXXX", "couponUse"     : true }]}]}

これで右上の SEND ボタンを押して成功すると、POSTMAN の下半分に、 Status 200 OK となり

{
    "returnCode": "OK"
}

という文字列が返ってくる。正しくクーポンを ON にできましたという返答。

f:id:rrringress:20180123014911p:plain

クーポンをオフにするときは、truefalse にする。

{"couponInfo" : [{"hdoInfo" : [{ "hdoServiceCode": "hdoXXXXXXXXX", "couponUse"     : false }]}]}

コード化(python

ここで操作してもスイッチとして使えるが、POSTMAN はこの操作を様々な言語のコードにしてくれる。

SEND ボタンの右下あたりの code をおすと、言語選択画面に移る。 ここでは python を選択する。 python の request という HTTP ライブラリを利用したサンプルコードに変換してくれる無料とは思えない有り難い機能だ。

このコードをコピペして iij_on.py とでもして実行権限をつける

f:id:rrringress:20180123015318p:plain

②の準備:CLI から SSID をつかみにいく

最初は Automator などで考えていたが、シェルだけでこんな便利なことができたんですね・・・。

まるっと利用させていただきました。ありがとうございます。 qiita.com

唯一の工夫として、最後の echo ~~ の前に、③で作成した python のコードを実行する一行を加える。

(snip)
echo 'Connected successfully.'
python iij_on.py
exit 0

tethering.sh という名前にしておいた。

これで、ある SSID への接続と、クーポンの有効化を、ワンライナーでできそうだ。

確認

①(ここだけは手動で)Android からテザリングを有効化
②&③ bash tethering.sh "ssid_name" "password"

Connected successfully.
{"returnCode": "OK"}

おしまい