GameSprit

自転車やMac・AppleScript、映画・小説やドラマのレビュー、備忘メモ・クイズなどを置いています。

AppleScript : 円の対ドル為替データを取得する

2013-06-08 22:59:21 | AppleScript
さて、今回は AppleScript で web API を利用して、円対ドルの為替レートを取得して、表示させてみます。


円の対ドル為替レートというのは、例えば、円が70円台になり円高だとか、円が100円に迫り円安になっただとか、つまり、1ドルあたり何円かという表示をここでは目指します。

ただ、少なくともいつ更新されたデータかということくらいはわからないと、1ヶ月前のレートか昨日のレートかと心許ないので、更新情報は付け加えます。


つまり、期待する出力は「97.5 Yen/USD(2013-06-08 20:08:05)」というものです。



さて、利用する Web APIクジラ 外国為替 確認 API (為替 RSS) です。詳細はリンク先を熟読して指示に従ってください。XML、JSON、INI、CSV形式で提供されています。


ところで、1ドル当たりの円はいくらかという、ドルからみたCSV形式のレート一覧を取得するには ‎api.aoikujira.com/kawase/csv/usd を参照します。


取得できる為替データは次のようなものです。
赤字で示した部分を、後ほど利用します。
code,value
result,ok
basecode,usd
update,2013-06-08 20:08:05
source,http://xurrency.com/
API_URL,http://api.aoikujira.com/kawase/
EUR,0.7565

.
.
.

JPY,97.5
KRW,1122.8399
LKR,126.35
MYR,3.0935
NZD,1.2678
SGD,1.2489
TWD,29.75
ZAR,9.9831
THB,30.635

.
.
.




このデータから「97.5 Yen/USD(2013-06-08 20:08:05)」を出力する AppleScript の核の部分を下図に示します。
なお、このスクリプトは、エラー対策をしていません、念のため。また、「更新頻度は1日に1回程度」ということですので、頻繁にアクセスする場合は、キャッシュするなどの対策を講じる方が良いでしょう。






スクリプト実行した場合の、1行毎の実行結果をコメントアウトして記載してみました。
以下に解説します。


まず、AppleScript の do shell script コマンドを使ってシェルコマンドを利用しています。

シェルコマンドcurl で、クジラ外国為替確認API から CSV形式の為替データを取得します。
そして、為替データパイプライン|」で、grep コマンドに渡して、為替データのうち、「update」が含まれる行と「JPY」が含まれる行を取り出します。2行ともを1度の処理で取り出すために grep の「-e」オプションを指定します。


次に、この2行を改行で切り分けてリスト化し、{"update,2013-06-08 20:08:05", "JPY,97.5"}を生成します。


あとは順に出力データを生成し、追加してゆきます。
留意する点は、"update,2013-06-08 20:08:05" を「,」で分解してリスト化してものから「item 2 of ~」により2番目のみ取り出し、また同様に、"JPY,97.5"から「97.5」のみを取り出しています。


結果として、「97.5」&「(」&「2013-06-08 20:08:05」&「)」で、「97.5 Yen/USD(2013-06-08 20:08:05)」が生成されます。




関連リンク:
Web API 設計のベストプラクティス集 "Web API Design - Crafting Interfaces that Developers Love" - フリーフォーム フリークアウト





キーワード:web API為替レートAppleScriptdo shell scriptcurlgrep

最新の画像もっと見る

4 Comments

コメント日が  古い順  |   新しい順
Unknown (Mamu)
2013-06-11 07:06:41
こんにちは!
AppleScriptを公開していらっしゃるのを見て、リクエストというか、こんなのあったら便利なんですけど・・というご相談です。

というのは、複数ファイルの接頭辞をつけるのに、いつもはリネームソフトを使ってます。
それを、クリップボードの言葉(例えば "images_")で一気にリネームできたりすると便利かなぁと思いました。

開発の構想の片隅に入れていただけると嬉しいです!
返信する
こんばんは、Mamuさん (vallie)
2013-06-12 00:05:17
ご要望の処理は、そんなに難しくはないと思います。
『複数ファイル』を、どう指定するのかが不明ですが。

参考までに、デスクトップに「relaxation_of_the_new_world」というファイルを作った後に、そのファイル名を「images_relaxation_of_the_new_world」に変更するスクリプトを以下に示します。


set fname to "relaxation_of_the_new_world"

tell application "Finder"

make new file with properties {name:fname} at desktop

delay 1

set theTarget to file fname of desktop

set orgName to name of theTarget
set newName to "images_" & orgName
set the name of theTarget to newName

end tell


『複数ファイル』の場合は、それらのファイルをリストに納めて、順に処理をすることになると想像しています。

返信する
Unknown (vallie)
2013-06-12 22:39:48
Mamuさん、

『複数ファイル』の指定には、AppleScript を使ったドロップレット(http://blog.goo.ne.jp/vallie/e/cbb0a94963076b13b65d5ac8da89be22)や、フォルダーアクションを使う方法(http://blog.goo.ne.jp/vallie/e/4bcd3fba45e4b4e0abb66d33cb225b0b)があります。


また、複数ファイルの接頭辞を付けてリネームする別のアプローチとして、Automator を使う方法があります。(http://tu-kazu.jp/etc1.php

返信する
Unknown (Mamu)
2013-06-14 07:22:28
アドバイスありがとうございます(^^)
Automatorだと、素人にも敷居が低くてできそうですね!やってみま~す。
返信する

post a comment

ブログ作成者から承認されるまでコメントは反映されません。