前回のシェル芸勉強会で取り上げられたネタですが、スタッフとしてウロウロしてたので、今更になってやっと手を動かしてみたのですが、Yahoo天気予報をbashのワンライナーで自動取得してみました。htmlタグの除去など、スクレイピングを行うためのプログラミングに大事な要素があるので、他のページにも応用がききそうです。
■ タグを除去してみる
今回のワンライナーでキモとなるのは、タグの除去です。こんな感じで除去してあげましょう。
tr 'n' ' ' | sed -e 's/<[^>]*>//g' | tr ' ' 'n'
タグの除去を行う前に、一度すべての改行をnull文字に変換し、タグの中身を一切合切削除してからnull文字を改行コードに戻してあげています。
■ こんな感じになりました
[ (っ´∀`)っ@友の会 ~]$ curl -s http://weather.yahoo.co.jp/weather/jp/13/4410.html | tr 'n' ' ' | sed -e 's/<[^>]*>//g' | tr ' ' 'n' | egrep . | egrep -v '(^[[:space:]]*$)' | head -n 26 | egrep -v '(の天気$|を入力$)' | tr -d '>' 東京(東京)の天気 - Yahoo!天気・災害 現在位置:天気・災害トップ 関東・信越 東京都 東京(東京) 2013年5月16日 11時00分発表 5月16日(木) 晴後雨 最高気温(℃)[前日差]25 [ -1 ] 最低気温(℃)[前日差]18 [ +1 ] 降水確率(%) --- --- 60 70 時間帯(時) 0-6 6-12 12-18 18-24 風: 南の風後北の風 波: 0.5メートル 東京地方の警報:発表なし 東京地方の注意報:雷
タグの除去を行ったあとは空行以外を表示させ、スペースだけの行を削除し、本当に必要な行数を調整してから再度タグを除去しています。本当は降水確率と時間が左右に並んでほしかったのですが、そこまで丁寧にやろうとしたら、私のシェル芸能力だとまだまだ難しいですね・・・sh行あるのみです。 (´・_・`)
[amazonjs asin="4798033197" locale="JP" title="ポケット詳解 WebAPI辞典 (Pocket詳解)"]