みおぽん	FOR	CLI
emasaka
IIJMIO(BIC)のSIM買った
選定理由
サブなので維持費が安いこと
2桁MBのファイルをやりとりすることがあるので速いこと
⾼速モードをオンオフできること
IIJMIOクーポンスイッチ(みお
ぽん)

(Google	Playより)
みおぽんAPI公開
仕様を⾒てみる
みおぽん相当の情報の取得·設定ができるWeb	API
クーポン情報取得、クーポンON/OF、パケット履歴取得
割と素直なRESTful	API
CLI(コマンドラ
イン)ツールを
作れる!?
が
アクセストークンを得てから	みおぽんAPIを呼ぶ仕組み
アクセストークンはOAuth	2.0のImplicit	Grantで取得する

(公式ドキュメントより)
問題
IIJmioサイトのWebフォームからIDとパスワードを⼊⼒しな
くてはならない
アクセストークンは、フォームから送信して返ってくるリダ
イレクトURLに⼊る
ブラウザからCLIツールに渡すのは困難
それMECHANIZEで?
Mechanize:ブラウザみたいにリンクやフォームを操作する
Perl·Python·Rubyライブラリ
IIJmioのWebフォームは、formタグではなくてXHRでデータ
を送信
Mechanize系は使えない
PHANTOMJS
PhantomJS:画⾯を持たないCLIのWebブラウザー
QtWebkitベース
JavaScriptも動く
制御もJavaScriptで
Webアプリのテストや、スクレイピングなどで使われている
サンプル
公式サイトより
console.log('Loading	a	web	page');
var	page	=	require('webpage').create();
var	url	=	'http://www.phantomjs.org/';
page.open(url,	function	(status)	{
		//Page	is	loaded!
		phantom.exit();
});
作った
miopon-cli
https://github.com/emasaka/miopon-cli
使うまでの前提がいろいろあるので、まだ⾃分専⽤
クーポン情報取得
$	miopon	info
パケットログ取得
$	miopon	log
クーポンのオンオフ
$	miopon	on
$	miopon	off
JSONでの出⼒も
$	miopon	info	--format=json	|	jq	-C	.	|	less	-R

jq便利
構成
lib/miopon/api.rb(Miopon::API)
RESTful	APIと⼀対⼀対応するクラス
lib/miopon/api/auth.rb(Miopon::API::Auth)
PhantomJSでアクセストークンを取得するクラス
lib/miopon/api/auth_by_phantomjs.js
PhantomJSのスクリプト
lib/miopon/client.rb(Miopon::Client)
Miopon::APIを呼ぶときに認証処理をするラッパークラス
ほかでも使えるライブラリとして作った
構成(つづき)
lib/miopon_cli(MioponCLI)
miopon-cli本体
設定ファイルとか出⼒フォーマットとか
bin/miopon
実⾏するコマンド
MioponCLIを呼び出してるだけ
Thor利⽤

みおぽん for CLI