apple_system_status (0.1.0): Apple System Status scraping library http://t.co/bDBkkUgDwm
— RubyGems (@rubygems) 2015, 7月 28
経緯
先日iTunes Storeなどで障害が起きていて、弊社でもiOSの課金周りでエラーが多発していました
上記エントリを見ていてたまたまAppleのSystem Statusページがあることを知りました
どういうgem?
Githubみたいにrssが取れれば IFTTT と連携してメール送るようにして障害を検知というのができるのですが*1、Appleの方はそういうAPIがなかったのでスクレイピングしてとれるようにしたのが今回のapple_system_statusというgemです
使い方
phantomjs が必要なので別途インストールしてください
Rubyで使う場合にはこんな感じです
crawler = AppleSystemStatus::Crawler.new pp crawler.perform("jp") {:title=>"00:53 JST 時点のシステム状況", :services=> [{:title=>"App Store", :description=>"問題なし: App Store", :status=>"allgood"}, {:title=>"iCloud ストレージアップグレード", :description=>"問題なし: iCloud ストレージアップグレード", :status=>"allgood"}, {:title=>"iTunes Store", :description=>"問題なし: iTunes Store", :status=>"allgood"}, # ... ]}
コマンド経由でも実行できます
$ apple_system_status fetch --country=jp --title="iTunes Store" 00:47 JST 時点のシステム状況 iTunes Store,allgood,問題なし: iTunes Store
json出力をサポートしているので jq と組み合わせればこういうこともできます。監視が捗りますNE!
$ apple_system_status fetch --country=jp --format=json --title="iTunes Store" | jq . { "title": "00:51 JST 時点のシステム状況", "services": [ { "title": "iTunes Store", "description": "問題なし: iTunes Store", "status": "allgood" } ] } $ apple_system_status fetch --country=jp --format=json --title="iTunes Store" | jq .services[0].status "allgood"
他にも
phantomjsインストールするの('A`)マンドクセという人にはAPIサーバもあります。
https://app-stat-api.herokuapp.com/
SinatraでWeb APIを作ってその中でこのgemを呼んでいるだけです
使い方もさっきとだいたい同じ
$ curl -s https://app-stat-api.herokuapp.com/jp/services.json?title=iTunes+Store | jq .services[0].status "allgood"
毎回スクレイピングすると重くなるのでスクレイピングの結果は5分間キャッシュしています。
キャッシュを使ってほしくないとかHerokuのインスタンスが起動する時のオーバーヘッドが気になる方はgemの方を使ってください。
余談
趣味で結構スクレイピングしてるのですが、phantomjs + capybara + poltergeist の組み合わせが自分の中で鉄板になりつつあります
- phantomjs : ヘッドレスブラウザ*2の定番。webkit内蔵してるのでjsが動くのがいい
- capybara : webアプリのシステムテストに使われることが多いけどスクレイピングでも重宝w
- poltergeist : capybaraでpoltergeist使う時のドライバ
昔は mechanize を使ってたんですがjsが実行できないのでbodyに含まれない要素が取得できないというデメリットが。(その分軽量なんですが)