从Ruby、PHP或Cocoa访问Mac应用程序

从Ruby、PHP或Cocoa访问Mac应用程序,php,ruby,cocoa,macos,applescript,Php,Ruby,Cocoa,Macos,Applescript,我想从Ruby上访问几个不同的MacOSX应用程序,但我会选择PHP。这些应用程序是Elgato的turbo.264和苹果的iTunes。两者都定义了Applescript库,允许我从Applescript执行我想执行的操作,但我不想在Applescript中执行此操作。如果我不能在Ruby或PHP中实现这一点,也许我可以在objective C/Cocoa中实现,并创建某种可以从Ruby调用的包装器 这可能吗?似乎如果这些方法在Applescript中可用,那么它们应该在其他语言中可用,我只是

我想从Ruby上访问几个不同的MacOSX应用程序,但我会选择PHP。这些应用程序是Elgato的turbo.264和苹果的iTunes。两者都定义了Applescript库,允许我从Applescript执行我想执行的操作,但我不想在Applescript中执行此操作。如果我不能在Ruby或PHP中实现这一点,也许我可以在objective C/Cocoa中实现,并创建某种可以从Ruby调用的包装器

这可能吗?似乎如果这些方法在Applescript中可用,那么它们应该在其他语言中可用,我只是找不到任何东西

尝试了appscript()

该站点的示例如下:

而不是AppleScript

tell application "TextEdit"
    get paragraph 1 of document "ReadMe"
end tell
你在Ruby中写:

app('TextEdit').documents['ReadMe'].paragraphs[1].get
尝试RubyOSA(),然后可以执行以下操作:

require 'rbosa'
itunes = OSA.app('iTunes')

track = itunes.current_track
p track                     # <OSA::Itunes::FileTrack:0x1495e20>
p track.name                # "Over The Rainbow" 
p track.artist              # "Keith Jarrett" 
p track.duration            # 362.368988037109 
p track.date_added.to_s     # "2006-06-30" 
p track.enabled?            # true

# Play the selected track.
itunes.play                    

# Fade the volume.
100.times { |i| itunes.sound_volume = i; sleep 0.1 }  

# Set iChat's status message to the current track.
OSA.app('iChat').status_message = "Playing: #{track.name}"
需要“rbosa”
itunes=OSA.app(“itunes”)
曲目=itunes.current\u曲目
p轨道#
p track.name#“越过彩虹”
p track.artist#“Keith Jarrett”
p轨道持续时间#362.368988037109
p track.date添加到“2006-06-30”
p轨道已启用?#真的
#播放所选曲目。
itunes.play
#淡入音量。
100.1倍{i| itunes.sound|u volume=i;睡眠0.1}
#将iChat的状态消息设置为当前曲目。
OSA.app('iChat').status_message=“播放:{track.name}”
您可以与任何支持AppleScript的Mac OS X应用程序进行对话。Mac OS X 10.5(当前版本)包括,该框架允许您从Cocoa应用程序访问AppleScript功能。你也可以。基本上,它是这样工作的:

require 'osx/cocoa'
require_framework 'ScriptingBridge'
include OSX

iTunes = SBApplication.applicationWithBundleIdentifier 'com.apple.iTunes'
iTunes.activate
puts "Play #{iTunes.currentTrack.name}?"
iTunes.playpause if gets.strip == "Yes"

我很好奇为什么这个答案获得了3张赞成票,而RubyOSA只获得了一张。答案似乎非常相似,只是推荐了一个不同的工具-rb applescript有什么内在的更好的地方吗?我认为基本上,这个答案排在第一位,它们或多或少是相等的。如果几个答案相等,人们通常只会选择一个作为代表。我个人从来没有发现Appscript和RubyOSA之间有很大的区别。