みおぽん	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.or...
作った
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_cli(MioponCLI)
miopon-cli本体
設定ファイルとか出⼒フォーマットとか
bin/miopon
実⾏するコマンド
MioponCLIを呼び出してるだけ
Thor利⽤
Upcoming SlideShare
Loading in …5
×

みおぽん for CLI

1,749 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,749
On SlideShare
0
From Embeds
0
Number of Embeds
776
Actions
Shares
0
Downloads
2
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

みおぽん for CLI

  1. 1. みおぽん FOR CLI emasaka
  2. 2. IIJMIO(BIC)のSIM買った
  3. 3. 選定理由 サブなので維持費が安いこと 2桁MBのファイルをやりとりすることがあるので速いこと ⾼速モードをオンオフできること
  4. 4. IIJMIOクーポンスイッチ(みお ぽん) (Google Playより)
  5. 5. みおぽんAPI公開
  6. 6. 仕様を⾒てみる みおぽん相当の情報の取得·設定ができるWeb API クーポン情報取得、クーポンON/OF、パケット履歴取得 割と素直なRESTful API
  7. 7. CLI(コマンドラ イン)ツールを 作れる!?
  8. 8. が アクセストークンを得てから みおぽんAPIを呼ぶ仕組み アクセストークンはOAuth 2.0のImplicit Grantで取得する (公式ドキュメントより)
  9. 9. 問題 IIJmioサイトのWebフォームからIDとパスワードを⼊⼒しな くてはならない アクセストークンは、フォームから送信して返ってくるリダ イレクトURLに⼊る ブラウザからCLIツールに渡すのは困難
  10. 10. それMECHANIZEで? Mechanize:ブラウザみたいにリンクやフォームを操作する Perl·Python·Rubyライブラリ IIJmioのWebフォームは、formタグではなくてXHRでデータ を送信 Mechanize系は使えない
  11. 11. PHANTOMJS PhantomJS:画⾯を持たないCLIのWebブラウザー QtWebkitベース JavaScriptも動く 制御もJavaScriptで Webアプリのテストや、スクレイピングなどで使われている
  12. 12. サンプル 公式サイトより 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(); });
  13. 13. 作った miopon-cli https://github.com/emasaka/miopon-cli 使うまでの前提がいろいろあるので、まだ⾃分専⽤
  14. 14. クーポン情報取得 $ miopon info
  15. 15. パケットログ取得 $ miopon log
  16. 16. クーポンのオンオフ $ miopon on $ miopon off
  17. 17. JSONでの出⼒も $ miopon info --format=json | jq -C . | less -R jq便利
  18. 18. 構成 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を呼ぶときに認証処理をするラッパークラス ほかでも使えるライブラリとして作った
  19. 19. 構成(つづき) lib/miopon_cli(MioponCLI) miopon-cli本体 設定ファイルとか出⼒フォーマットとか bin/miopon 実⾏するコマンド MioponCLIを呼び出してるだけ Thor利⽤

×