GameSprit

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

AppleScript : Web API おはこん番地は!? を利用して、月齢を求める

2012-12-23 23:25:29 | AppleScript
Web API | おはこん番地は!? | ビットラボ | 株式会社ビットマイスター を利用して、正午月齢を計算してみます。


おはこん番地は!? Web APIは、入力された日付と場所から、太陽と月の出没時刻、方位角、高度、正午月齢、月相を計算し、結果をXMLで出力してくれる無料APIです。プログラムによる大量アクセスは禁止、1日につき2000件以上のリクエストが見込まれる場合は、メールで事前に相談が必要です。詳細は都度、上記の「Web API おはこん番地は!?」の情報をご確認ください。


今回の使用目的は、正午月齢の計算です。
例えば、2012年12月23日の正午月齢を知るには、次のリクエストを送信します。

http://labs.bitmeister.jp/ohakon/api/?mode=moon_age&year=2012&month=12&day=23


すると、次のようにXMLで結果が返ってきて、「9.71」という正午月齢を得ることができます。
<result>
<object type="cosymantecnisbfw" cotype="cs" id="cosymantecnisbfw" style="width: 0px; height: 0px; display: block;"/>
<object type="cosymantecnisbfw" cotype="bgpage" id="cosymantecnisbfwbg" style="width: 0px; height: 0px; display: block;"/>
<script type="text/javascript" defer="defer" id="NortonInternetSecurityBF" tab="0" browser="0"/>
<version>2.0</version>
<date>
<year>2012</year>
<month>12</month>
<day>23</day>
</date>
<moon_age>9.71</moon_age>
</result>



単純に、このAPIを利用して、2012年12月23日の正午月齢を得る rubyスクリプトは次の通りです。
require 'open-uri'
require 'rexml/document'

xmlData = 0
theData = 0

open(\"http://labs.bitmeister.jp/ohakon/api/?mode=moon_age&year=2012&month=12&day=23\") {|f|
xmlData = f.read
}

theData = REXML::Document.new(xmlData)

res = Array.new
res << theData.elements[\"/result/moon_age\"].text

puts res



蛇足ですが、rubyスクリプトとして利用する場合は、返ってきた結果をキャッシュしておけば、
1日につき2000件以上のリクエストを送らずに済みますね。


さて、ここでは AppleScript から、この rubyスクリプト呼び出して利用してみます。
set yyyy to year of (current date)
set mm to month of (current date) as number
set dd to day of (current date)

my checkMoonAge(yyyy, mm, dd)


on checkMoonAge(yyyy, mm, dd)

"require 'open-uri'
require 'rexml/document'

xmlData = 0
theData = 0

open(\"http://labs.bitmeister.jp/ohakon/api/?mode=moon_age&year="

set cmd1 to quoted form of result


"&month="

set cmd2 to quoted form of result


"&day="

set cmd3 to quoted form of result

"\") {|f|
xmlData = f.read
}

theData = REXML::Document.new(xmlData)

res = Array.new
res << theData.elements[\"/result/moon_age\"].text

puts res"

set cmd4 to quoted form of result

return do shell script "/usr/bin/ruby -e " & cmd1 & yyyy & cmd2 & mm & cmd3 & dd & cmd4

end checkMoonAge




元のrubyスクリプトをベースにして、年/月/日を引数として与えるために、それぞれの前後で
rubyスクリプトを分割しています。そして、do shell scriptコマンドの
引数として、分割したrubyスクリプトの間に年/月/日を挟んで実行します。
ここまでを、ハンドラcheckMoonAgeとしてまとめています。

ハンドラを実行する際に、今日の年/月/日を数値で得て、ハンドラに引数として与えています。




関連記事:
AppleScript : 日付や時刻の操作 - GameSprit
AppleScript : Weather Hacks で天気予報(まとめ) - GameSprit



最新の画像もっと見る

post a comment

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