O'Reilly Resource Center: O'Reilly Macintosh Center
oreilly.deO'Reilly NetworkBücher, Konferenzen, Software, Online Publishing
KontaktBestellinfosOnline-Bücher

Pfeil Suche
Pfeil Bücher A-Z
Pfeil Neuerscheinungen
Pfeil Buchreihen
Pfeil Special Offer
Programmbereiche
Pfeil
Bioinformatik
C/C++ Programmierung
Design & Grafik
Java
Linux
Macintosh
.Net
Open Source
Oracle
Perl
PHP & MySQL
Python
Sicherheit
System- & Netzwerkadministration
Unix
Web & Internet
Windows
XML
Special Offer
Weitere Infos
Pfeil
Katalog bestellen
Mailinglisten abonnieren
Archiv

Günstige Preise für englische Bücher

Unsere Partner im Buchhandel

AppleScript-Grundlagen für Mac OS X
Seiten: 1, 2


Hallo, Unix Shell

AppleScripter können die Unix Shell unter Mac OS X 10.2 über zwei Wege erreichen. Der Befehl "do shell script" führt eine Unix Shell-Anweisung aus, ohne dass dabei eine spezifische Anwendung angesprochen werden muss. Geben Sie beispielsweise das folgende Skript im Skripteditor-Fenster ein, kompilieren Sie es und führen Sie es anschließend aus. Es wird die Ausgabe dreier Unix Shell-Befehle bewirken, die jeweils durch ein Semikolon abgetrennt sind.

   do shell script "cd $HOME; pwd; ls -l"

Das Skript erhält nun einen Ergebniswert in Form eines Strings (eine Zeichenfolge ähnlich einem in Anführungszeichen gestellten Satz), den es dann je nach Anforderung verarbeitet. Dies ist ein Teil des Wiedergabewerts, den obiges Skript bewirkt:

      "/Users/brucep
total 0
drwxr-xr-x   7 brucep  staff   264 Nov 24 20:27 AllProps
drwxr-xr-x   5 brucep  staff   126 Jan  4 19:57 Applications
drwx------  17 brucep  staff   534 Jan 18 10:24 Desktop
drwx------  14 brucep  staff   432 Jan 18 10:17 Documents
..."

Ein Skript für Terminal

Auch das Programm Terminal (das Befehlszeilen-Utility von Mac OS X) kann per Skript gesteuert werden. Das Folgende bewirkt, dass ein neues Terminal-Fenster geöffnet wird und Tomcat sowie der MySQL-Datenbank-Server starten. Sehr nützlich!

ignoring application responses
   tell application "Terminal"
      activate
      do script with command ¬
      "/Users/brucep/bin/start_tomcat; /usr/local/bin/safe_mysqld &;"
   end tell
end ignoring

Das Zeichen "¬", es handelt sich hierbei um ein Zeilenfortsetzungszeichen, wird auf dem Mac durch die Eingabe der Tastenkombination Optionstaste-Return erzeugt. Der Block "ignoring application responses/end ignoring" verhindert, dass AppleScript zum Stillstand kommt, bevor es von Terminal eine Antwort erhalten hat. Als Quelle für nähere Informationen zur AppleScript-Anweisung "ignoring" sei auf Seite 137 meines Buchs AppleScript in a Nutshell verwiesen.


Ein Skript für iTunes 3

Das folgende Skript bewirkt den Start von iTunes 3 und ermöglicht dem Anwender, einen Titel auszuwählen und ihn dann abzuspielen.

tell application "iTunes"

activate
try
   set mainWindow to item 1 of browser windows
   set _playlist to the view of mainWindow
   set theSongs to the name of every track of _playlist
   set songTitle to ¬
      choose from list theSongs with prompt ¬
         "Wählen Sie einen Titel für die Wiedergabe aus"
   tell _playlist
      set song to item 1 of ¬
         (every track whose name contains the songTitle)
   end tell
   say "Sie hören gerade den Titel" & (name of song) & ¬
          " von " & (artist of song)
   play song
on error
   display dialog ¬
"Es wurde entweder keine Wiedergabeliste ausgewählt,
oder Sie haben den Dialog beendet. Versuchen Sie es
bitte erneut."
end try
end tell

Dieses Skript listet alle Titel der im Hauptfenster von iTunes enthaltenen Stücke in einem Dialogfenster auf, aus dem dann ein beliebiger ausgewählt werden kann (dieses Dialogfenster wird durch den Skriptteil "choose from list theSongs" aufgerufen). Der AppleScript-Befehl "say" bewirkt, dass der Computer jeweils den Ausdruck spricht, den Sie diesem Befehl hinzufügen. Die dazu verwendete Stimme lässt sich unter Systemeinstellungen -> Sprache festlegen bestimmen. Sie können ferner "embedded speech commands" verwenden, um einzustellen, wie der Befehl "say" den Text vorliest. Sie werden feststellen, dass die Sprachfunktionen nur für die englische Sprache befriedigend funktionieren. Auf Seite 393 von Apple Script in a Nutshell finden Sie nähere Informationen zu "embedded speech commands".


Webservices

Bei Webservices handelt es sich um XML-Applikationen, über die ganz gezielt gewählte Informationen zwischen entfernten Computern ausgetauscht werden können. Diese Dienste basieren auf den beiden Protokolltypen XML-RPC (XML-Remote Procedure Call) und SOAP (Simple Object Access Protocol). Ohne nun zu tief in die technischen Grundlagen eindringen zu wollen, sollte man wissen, dass beide Protokolle HTTP (Hypertext Transfer Protocol) - also die gleiche Art des Datentransfers wie das Internet - nutzen, um Informationen zwischen entfernten Computern auszutauschen. Sowohl Anfragen als auch Antworten in XML-RPC und SOAP werden im XML-Format übermittelt. Unter Mac OS X ist es mit AppleScript kinderleicht, sowohl XML-RPC als auch SOAP zu nutzen.

"call xmlrpc"

Der Skript-Befehl "call xmlrpc" steht seit Version 10.1 von Mac OS X zur Verfügung. Um ihn zu nutzen, müssen Sie als Erstes einen XML-RPC-Server in einem AppleScript-"tell"-Block ansprechen. Das folgende Skript fragt einen XML-RPC-Server unter "http://time.xmlrpc.com/RPC2" nach Datum und Uhrzeit ab. Dies ist lediglich ein einfaches Beispiel; es gibt unzählige andere Datentypen, die über SOAP und XML-RPC abgefragt werden können. Der Befehl "call xmlrpc" erfordert (wie auch in "currentTime.getCurrentTime") einen Methodennamen, in dem alle erforderlichen Parameter enthalten sein müssen (siehe das Beispiel "call soap"). Das Skript wandelt den Ergebniswert in ein AppleScript-Datum um. Der Code addiert außerdem neun Stunden zu diesem Ergebniswert hinzu, um ihn an die mitteleuropäische Zeit anzugleichen.

tell application "http://time.xmlrpc.com/RPC2"

   set returnValue to call xmlrpc ¬
      {method name:"currentTime.getCurrentTime"}
   set theDate to (returnValue as date) + (9 * hours)

end tell

Websites, die Webservices bieten, erklären in der Regel, welche Methodennamen und Parameter benutzt werden müssen (siehe "http://www.xmlrpc.com/currentTime" für nähere Informationen zu diesem Probeskript). Ob Sie wollen oder nicht: Die Mac OS X-Systemsoftware nimmt Ihnen sämtliche XML-Arbeit ab. Als AppleScripter bleibt es Ihnen also erspart, einen XML-Ergebniswert parsen oder übersetzen zu müssen.

"call soap"

Der AppleScript-Befehl für die Nutzung eines SOAP-Servers lautet sinnigerweise "call soap". SOAP ist ein komplexeres Protokoll als XML-RPC, nicht zuletzt deshalb, weil SOAP es erlaubt, komplexere Datentypen auszutauschen. Die AppleScript-Syntax für einen SOAP-Aufruf ist dementsprechend etwas länger. Neben der "call soap"-Syntax müssen Sie noch Werte für den Methodennamen, "method namespace URI", beliebige Methodenparameter und die "SOAPAction" liefern. Sites wie XMethods (wo ich auch auf diese SOAP-Informationen gestoßen bin) erklären in der Regel, welche Werte man für die verschiedenen Parameter standardmäßig wählen sollte. Von allein werden Sie diese nämlich garantiert nicht erraten!

Das folgende Skript ruft einen Aktienwert in einer bestimmten Währung ab (und zwar live, sofern die Börse geöffnet ist), indem das Aktienkürzel und der Name des Landes in Form von Parametern übermittelt werden. In diesem Fall wählen wir Sun Microsystems, deren Börsennotierung in US-Dollar abgerufen werden soll. Der recht seltsam anmutende Teil "on getStockPrice(sym,_country)" ist ein AppleScript-Handler, der ein Aktienkürzel und einen Landesnamen in Parameter umwandelt und anschließend über den Befehl "call soap" die aktuelle Börsennotierung liefert. Näheres über AppleScript-Handler bzw. -Subroutinen finden Sie in Kapitel 8 ("Subroutines") des Buchs AppleScript in a Nutshell.

set sym to "SUNW"
set _country to "United States"

getStockPrice(sym, _country)

on getStockPrice(Symbol, theCountry)
   try
      with timeout of 30 seconds
         tell application "http://soaptest.activestate.com:8080/PerlEx/soap.plex"

            return (call soap ¬
            {method name:"StockQuoteInCountry", ¬
            method namespace uri:"http://activestate.com/",¬
            parameters:{Symbol:Symbol as string, country:theCountry as string},¬
            SOAPAction:"urn:activestate"} )

         end tell
      end timeout

   on error errmesg
      display dialog errmesg
   end try
end getStockPrice

Weitere Informationen zu AppleScript

AppleScript Website

O'Reillys AppleScript in a Nutshell

The AppleScript Studio home page

Apples ausführlicher Leitfaden zu AppleScript und XML-RPC, SOAP

Die XML-RPC-Spezifikation

Der Handler "getStockPrice" beinhaltet einen AppleScript-"try"-Block, der in der Lage ist, sämtliche Syntaxfehler innerhalb der Skript-Anweisung "try ... end try" aufzuspüren und gegebenenfalls auch zu beheben. In Hinblick auf SOAP- oder XML-RPC-Abfragen ist es durchaus möglich, dass die Beantwortung durch eine Verlangsamung des Netzwerks verzögert wird, was eventuell einen "time out" (so sagt man im AppleScript-Jargon) des Skripts nach sich zieht. Ohne die Fehlersuchanweisung "try" kann es zudem sein, dass das Skript sang- und klanglos versackt. Unser Beispiel benutzt im Übrigen die Anweisung "with time out", was die Wartezeit für die Beantwortung einer SOAP-Anfrage auf 30 Sekunden begrenzt.

Webservices stellen eine sehr wichtige Entwicklung innerhalb der Software-Welt dar. Beeindruckend ist vor allem, wie sauber AppleScript diese Dienste integriert.

Nichts wie ran!

Wir haben bis hierhin gerade mal an der Oberfläche der weit reichenden Möglichkeiten kratzen können, die AppleScript den Anwendern und Entwicklern bietet.

02/2003

AppleScript in a Nutshell ist 2001 bei O'Reilly erschienen.

Sehen diese Seiten zu fade bzw. langweilig aus? Wenn ja, dann liegt das daran, daß unsere Seiten CSS verwenden! Entweder Ihr Browser unterstützt CSS nicht oder Sie haben CSS deaktiviert.
Netscape 4.x-Benutzer: Deaktivierung von JavaScript bewirkt leider, daß auch CSS deaktiviert ist!


O'Reilly Home | O'Reilly-Partnerbuchhandlungen | Bestellinformationen
Kontakt | Über O'Reilly | Datenschutz

© 2003, O'Reilly Verlag
webmaster@oreilly.de