「jq」タグアーカイブ

Web APIをShellで使おう!(メールで情報を送る)2

こんにちは。Arakawaです。
さて、二回目ですが、取得したデータを定期的にメールで送ることをしたいと思います。
とはいえ、昨今のスマートフォンは、指先一つで天気予報を見ることができ、わざわざ
メールで送信する意味ってどこにあるのか・・・。いや、きっとどこかで役に立つような・・。

small_232678770
photo credit: chrn via photopin cc

1.先ずは復習。データが取得できるか、試してみましょう。
[bash] # wget -q -O – http://weather.livedoor.com/forecast/webservice/json/v1?city=260010 | jq ‘.forecasts[]|.date,.telop,"最高気温->",.temperature.max.celsius,"最低気温->",.temperature.min.celsius’
"2014-12-12"
"曇時々晴"
"最高気温->"
"12"
"最低気温->"
null
"2014-12-13"
"晴時々曇"
"最高気温->"
"8"
"最低気温->"
"2"
"2014-12-14"
"曇時々晴"
"最高気温->"
null
"最低気温->"
null
[/bash] 2.取得できましたね。では、これをメールにしてみましょうか?。

shellのソース(tenki.shとしました。)
[bash] #!/bin/bash
export LANG=ja_JP.UTF-8

echo "MIME-Version: 1.0
Content-Type: text/plain; charset="ISO-2022-JP"
Content-Transfer-Encoding: 7bit
X-Priority: 3
Subject:天気予報
From: 送り元@
To: 送り先@

`wget -q -O – http://weather.livedoor.com/forecast/webservice/json/v1?city=260010 | jq ‘.forecasts[]|.date,.telop,"最高気温->",.temperature.max.celsius,"最低気温->",.temperature.min.celsius’`
" | /usr/bin/nkf -j | /usr/sbin/sendmail -t

exit 0
[/bash]

メールの抜粋
[text] 件名:天気予報

本文:
"2014-12-12"
"曇時々晴"
"最高気温->"
"12"
"最低気温->"
null
"2014-12-13"
"晴時々曇"
"最高気温->"
"8"
"最低気温->"
"2"
"2014-12-14"
"曇時々晴"
"最高気温->"
null
"最低気温->"
null

[/text]

3.あと、定期的に送るため、クーロンに以下のように設定しました。

[shell] 0 7 * * * /お好きなパス/tenki.sh
[/shell] としておきましょう。毎朝7時メールが来ます。

以上のようにすれば、(まだ編集の余地は大いにあるのですが。X-( ) メールで定期的に天気予報を受け取ることができます。

簡単ですが、今日はこの辺で・・。

Web APIをShellで使おう!(jqをCentOS6.5にインストール編)1

みなさん、こんにちは。
Arakawaです。最近CUIがシンプルで心地よく感じる時があり、できるならば
CUIで過ごせないかと時々画策しています。
small__5450429373
photo credit: blakespot via photopin cc

さて、CUIで過ごしていると、どうしてもいろんな情報をCUIで取得したくなります。
天気予報であったり、ニュースであったり、技術情報であったり・・。
そーいうのをLynxでみるのも悪くはないですが、もっとシンプルに
取得したい・・・。思いついたのがWeb APIでした。

Web APIは、XMLやJSONで提供されていることが多いと思います。そこでそれらを
簡単に処理できるアプリがないかなぁ~と思いいろいろググっていますと、
jqというアプリが便利だということがわかってきました。

jqを一度インストールしてみて、いろいろ画策(笑)していきたいと思います。

——————–
インストール実施した内容ログ

1.http://stedolan.github.io/jq/download/からバイナリを適当なところにダウンロードします。

[shell] #cd /tmp
#wget http://stedolan.github.io/jq/download/linux64/jq
[/shell]

2.実行権限を与えました。755にします。

[shell] #chmod 755 jq
[/shell]

3.では、動くかどうか、試してみたいと思います。Web APIでまずテストといえば
天気予報が簡単でよさそうな気がしています。Livedoorさんのサービスをお借りしたいと思います。
http://weather.livedoor.com/weather_hacks/webservice
から京都のデータをゲットしたいともいます。2014/11現在このアドレスでデータが取得できるようです。
http://weather.livedoor.com/forecast/webservice/json/v1?city=260010

では、実際に試してみます。

[shell] #wget -q -O – http://weather.livedoor.com/forecast/webservice/json/v1?city=260010 | ./jq ‘.’
[/shell]

こんな感じで表示されました。

[shell] {
"pinpointLocations": [
{
"link": "http://weather.livedoor.com/area/forecast/2610000",
"name": "京都市"
},
{
"link": "http://weather.livedoor.com/area/forecast/2620400",
"name": "宇治市"
},
{
"link": "http://weather.livedoor.com/area/forecast/2620600",
"name": "亀岡市"
},
{
"link": "http://weather.livedoor.com/area/forecast/2620700",
"name": "城陽市"
},
{
"link": "http://weather.livedoor.com/area/forecast/2620800",
"name": "向日市"
},
{
"link": "http://weather.livedoor.com/area/forecast/2620900",
"name": "長岡京市"
},
{
"link": "http://weather.livedoor.com/area/forecast/2621000",
"name": "八幡市"
},
{
"link": "http://weather.livedoor.com/area/forecast/2621100",
"name": "京田辺市"
},
{
"link": "http://weather.livedoor.com/area/forecast/2621300",
"name": "南丹市"
},
{
"link": "http://weather.livedoor.com/area/forecast/2621400",
"name": "木津川市"
},
{
"link": "http://weather.livedoor.com/area/forecast/2630300",
"name": "大山崎町"
},
{
"link": "http://weather.livedoor.com/area/forecast/2632200",
"name": "久御山町"
},
{
"link": "http://weather.livedoor.com/area/forecast/2634300",
"name": "井手町"
},
{
"link": "http://weather.livedoor.com/area/forecast/2634400",
"name": "宇治田原町"
},
{
"link": "http://weather.livedoor.com/area/forecast/2636400",
"name": "笠置町"
},
{
"link": "http://weather.livedoor.com/area/forecast/2636500",
"name": "和束町"
},
{
"link": "http://weather.livedoor.com/area/forecast/2636600",
"name": "精華町"
},
{
"link": "http://weather.livedoor.com/area/forecast/2636700",
"name": "南山城村"
},
{
"link": "http://weather.livedoor.com/area/forecast/2640700",
"name": "京丹波町"
}
],
"link": "http://weather.livedoor.com/area/forecast/260010",
"forecasts": [
{
"dateLabel": "今日",
"telop": "晴のち曇",
"date": "2014-11-12",
"temperature": {
"min": null,
"max": {
"celsius": "21",
"fahrenheit": "69.8"
}
},
"image": {
"width": 50,
"url": "http://weather.livedoor.com/img/icon/5.gif",
"title": "晴のち曇",
"height": 31
}
},
{
"dateLabel": "明日",
"telop": "曇時々晴",
"date": "2014-11-13",
"temperature": {
"min": {
"celsius": "9",
"fahrenheit": "48.2"
},
"max": {
"celsius": "13",
"fahrenheit": "55.4"
}
},
"image": {
"width": 50,
"url": "http://weather.livedoor.com/img/icon/9.gif",
"title": "曇時々晴",
"height": 31
}
},
{
"dateLabel": "明後日",
"telop": "曇時々晴",
"date": "2014-11-14",
"temperature": {
"min": null,
"max": null
},
"image": {
"width": 50,
"url": "http://weather.livedoor.com/img/icon/9.gif",
"title": "曇時々晴",
"height": 31
}
}
],
"location": {
"city": "京都",
"area": "近畿",
"prefecture": "京都府"
},
"publicTime": "2014-11-12T11:00:00+0900",
"copyright": {
"provider": [
{
"link": "http://tenki.jp/",
"name": "日本気象協会"
}
],
"link": "http://weather.livedoor.com/",
"title": "(C) LINE Corporation",
"image": {
"width": 118,
"link": "http://weather.livedoor.com/",
"url": "http://weather.livedoor.com/img/cmn/livedoor.gif",
"title": "livedoor 天気情報",
"height": 26
}
},
"title": "京都府 京都 の天気",
"description": {
"text": " 近畿地方は、湿った空気の影響で雲が広がり、弱い雨の降っているところ\nがあります。\n\n 今日の京都府は、湿った空気の影響で雲が広がりやすく、午後は日本海か\nら気圧の谷が南下するため、北部では夕方から雨の降るところがあるでしょ\nう。\n\n 明日の京都府は、気圧の谷や寒気の影響で北部を中心に雲が広がり、雨や\n雷雨となるところがある見込みです。",
"publicTime": "2014-11-12T10:36:00+0900"
}
}
[/shell]

ちゃんと整形されていますね。めでたしめでたし。
では、せっかくなので、どこからでもアクセスできるようにしておきましょうかね。
4. 設定

[shell] #mv jq /usr/local/bin/
#wget -q -O – http://weather.livedoor.com/forecast/webservice/json/v1?city=260010 | jq ‘.’
[/shell]

皆さん動きましたか?./ がついていないことを確認してくださいね。
動かない人は、どこにパスが通っているか確認してください。

[shell] #echo $PATH
[/shell]

では、次は、これらを使ってもう少し、面白そうなことをしていこうと思います。
では。($・・)/~~~