みおぽん for CLI

Preview:

DESCRIPTION

 

Citation preview

みおぽんFORCLIemasaka

IIJMIO(BIC)のSIM買った

選定理由サブなので維持費が安いこと2桁MBのファイルをやりとりすることがあるので速いこと⾼速モードをオンオフできること

IIJMIOクーポンスイッチ(みおぽん)

(GooglePlayより)

みおぽんAPI公開

仕様を⾒てみるみおぽん相当の情報の取得·設定ができるWebAPIクーポン情報取得、クーポンON/OF、パケット履歴取得

割と素直なRESTfulAPI

CLI(コマンドライン)ツールを作れる!?

がアクセストークンを得てからみおぽんAPIを呼ぶ仕組みアクセストークンはOAuth2.0のImplicitGrantで取得する

(公式ドキュメントより)

問題IIJmioサイトのWebフォームからIDとパスワードを⼊⼒しなくてはならないアクセストークンは、フォームから送信して返ってくるリダイレクトURLに⼊るブラウザからCLIツールに渡すのは困難

それMECHANIZEで?Mechanize:ブラウザみたいにリンクやフォームを操作するPerl·Python·RubyライブラリIIJmioのWebフォームは、formタグではなくてXHRでデータを送信

Mechanize系は使えない

PHANTOMJSPhantomJS:画⾯を持たないCLIのWebブラウザー

QtWebkitベースJavaScriptも動く制御もJavaScriptでWebアプリのテストや、スクレイピングなどで使われている

サンプル公式サイトより

console.log('Loadingawebpage');varpage=require('webpage').create();varurl='http://www.phantomjs.org/';page.open(url,function(status){//Pageisloaded!phantom.exit();});

作ったmiopon-cli

使うまでの前提がいろいろあるので、まだ⾃分専⽤https://github.com/emasaka/miopon-cli

クーポン情報取得$mioponinfo

パケットログ取得$mioponlog

クーポンのオンオフ$mioponon$mioponoff

JSONでの出⼒も$mioponinfo--format=json|jq-C.|less-R

jq便利

構成lib/miopon/api.rb(Miopon::API)

RESTfulAPIと⼀対⼀対応するクラス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利⽤

Recommended