Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

タダで天気のYAML形式データを生成Rubyワンライナー

お天気ワンライ……ナぁ……?

$ ruby -r json -r yaml -e 'YAML::dump((JSON.parse!(`curl http://weather.livedoor.com/forecast/webservice/json/v1?city=130010`))["forecasts"], $stdout)'

……Mac Book Air の13インチの画面には収まったからワンライナーとは言えますよね!!
本当はcurbというcurlを便利に使うgemを使いたかったのですが……
使い方がよくわかってないのでパスしました

具体的な動き

curl

例の如くお天気系APIを叩いて結果を頂いています。
APIはコチラを利用させて貰いました。
http://weather.livedoor.com/weather_hacks/webservice
結果はjsonで返って来ます
商用利用でなければ、特に制約はないみたいです。

ruby

-r

ワンライナーの構文で、gemを引っ張りだします。

-e "スクリプト本体"

jsonをパースして、YAML形式のデータを標準出力に出すようにしています。
市町村の情報やら、お天気解説なんかもついて来ているのですが……
今回は用が無いので"forecasts"だけを頂きます。
更にパイプでsedawkワンライナーと使えば必要なデータを絞り込めます。

実行結果(東京= city:130010)

$ ##上のスクリプト##
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  8360    0  8360    0     0  85747      0 --:--:-- --:--:-- --:--:--  103k
---
- dateLabel: 今日
  telop: 曇のち晴
  date: '2013-11-04'
  temperature:
    min: 
    max: 
  image:
    width: 50
    url: http://weather.livedoor.com/img/icon/12.gif
    title: 曇のち晴
    height: 31
- dateLabel: 明日
  telop: 晴れ
  date: '2013-11-05'
  temperature:
    min:
      celsius: '13'
      fahrenheit: '55.4'
    max:
      celsius: '18'
      fahrenheit: '64.4'
  image:
    width: 50
    url: http://weather.livedoor.com/img/icon/1.gif
    title: 晴れ
    height: 31
- dateLabel: 明後日
  telop: 晴時々曇
  date: '2013-11-06'
  temperature:
    min: 
    max: 
  image:
    width: 50
    url: http://weather.livedoor.com/img/icon/2.gif
    title: 晴時々曇
    height: 31

編集

11/4 curlをパイプで繋げてたけど よく考えたらバッククォートで十分だった事に気付く