GameSprit

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

AppleScript : ruby スクリプトを実行する

2011-03-09 21:56:38 | AppleScript
ruby -e scriptというのは、知っていましたし、使うこともあります。

例えば、こんな感じ:
以下は等価です。
ruby -e "5.times do |i|" -e "puts i" -e "end"

ruby -e "5.times do |i|
  puts i
end"

ruby -e "5.times do |i|; puts i; end"
(Rubyの起動 - Rubyリファレンスマニュアル


ただ、AppleScript から利用するのは「;」でつなぐなどで視認性が良くないと、思い込んでいました。

しかし、ザリガニが見ていた...。 のを、さらに後ろからのぞき見していたところ、そんなふうに使えるの!?と驚きました。視認性が良くなる方法ですね!

で、さっそく真似イヤ参考にしてみました。
Automator:rubyアクション-Weather Hacks(続) - GameSprit で使った ruby スクリプトを appleScript から実行してみます。Weather Hacks を読み込むスクリプトです。以前に、AppleScript からXMLファイルを操ってみようとして何度か挫折したものです。

そのときの Automator 用 ruby アクションはこんなの:
require 'open-uri'
require 'rexml/document'

# 変数宣言
xmlData = 0
whetherData = 0

open("http://weather.livedoor.com/forecast/webservice/rest/v1?city=60&day=today") {|f|
xmlData = f.read
}

# xml から天気データを取得
whetherData = REXML::Document.new(xmlData)

whethers = Array.new
whethers << whetherData.elements["/lwws/title"].text
whethers << whetherData.elements["/lwws/telop"].text
whethers << whetherData.elements["/lwws/description"].text
whethers << whetherData.elements["/lwws/image/url"].text

puts whethers</pre>



これをAppleScript から利用すると、こんな感じ:
"require 'open-uri'
require 'rexml/document'

# 変数宣言
xmlData = 0
weatherData = 0

open(\"http://weather.livedoor.com/forecast/webservice/rest/v1?city=60&day=today\") {|f|
xmlData = f.read
}

# xml から天気データを取得
weatherData = REXML::Document.new(xmlData)

weathers = Array.new
weathers << weatherData.elements[\"/lwws/title\"].text
weathers << weatherData.elements[\"/lwws/telop\"].text
weathers << weatherData.elements[\"/lwws/description\"].text
weathers << weatherData.elements[\"/lwws/image/url\"].text

puts weathers"

do shell script "/usr/bin/ruby -e " & quoted form of result</pre>



さらにサブルーチンにしてみました。
--http://d.hatena.ne.jp/zariganitosh/20100211/1265875573

my getWeather(81)

on getWeather(nr)
"require 'open-uri'
require 'rexml/document'
# 変数宣言
xmlData = 0
weatherData = 0
open(\"http://weather.livedoor.com/forecast/webservice/rest/v1?city=" & nr & "&day=today\") {|f|
xmlData = f.read
}
# xml から天気データを取得
weatherData = REXML::Document.new(xmlData)
weathers = Array.new
weathers << weatherData.elements[\"/lwws/title\"].text
weathers << weatherData.elements[\"/lwws/telop\"].text
weathers << weatherData.elements[\"/lwws/description\"].text
weathers << weatherData.elements[\"/lwws/image/url\"].text
puts weathers"

do shell script "/usr/bin/ruby -e " & quoted form of result

return result
end getWeather</pre>





ruby って、なんとなく AppleScript に似ていて、それでいてモダンで、いいですね。
うーん!活用の幅が広がりそうです。



Event-Driven XML Programming Guide: Introduction to Event-Driven XML Programming Guide for Cocoa
MacScripter / XML to List




キーワード:Weather HacksAppleScriptruby -eruby アクションruby スクリプト天気

最新の画像もっと見る

post a comment

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