Доступ к приложениям Mac из Ruby, PHP или Cocoa

Я хотел бы получить доступ к нескольким различным приложениям Mac OS X предпочтительно из Ruby, но я бы согласился на PHP. Приложения: turbo.264 от Elgato и iTunes от Apple. Оба имеют определенные библиотеки Applescript, которые позволят мне делать то, что я хочу, из Applescript, но я не хочу делать это в Applescript. Если я не могу сделать это на Ruby или PHP, возможно, я смогу сделать это на объектном C/Cocoa и создать какую-то оболочку, которую я мог бы вызывать из Ruby.

Это вообще возможно? Похоже, что если методы доступны в Applescript, они должны быть доступны и на других языках, я просто ничего не смог найти.


person Scott    schedule 15.08.2009    source источник


Ответы (3)


Попробуйте RubyOSA (http://rubyosa.rubyforge.org), и тогда вы сможете сделать следующее:

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}"

Вы можете общаться с любым приложением Mac OS X, которое поддерживает AppleScript.

person Rod Schmidt    schedule 15.08.2009


Mac OS X 10.5 (текущая версия) включает в себя Scripting Bridge, фреймворк, который позволяет вам получить доступ к функциям AppleScript из приложений Cocoa. Вы также можете получить к нему доступ из RubyCocoa и PyObjC. В основном это работает так:

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"
person Chuck    schedule 15.08.2009