2011-01-05 13 views
6

Mam interfejs API oparty na sieci Web, do którego chciałbym wysyłać żądania POST/GET za pośrednictwem AppleScript. Chciałbym pobrać i przeanalizować odpowiedź w taki sposób, aby móc ją dodać do innej aplikacji.Czy i jak można uzyskać zdalne dane (np. JSON) w AppleScript?

Czy to możliwe? Jeśli tak to jak?

dane JSON byłoby na przykład wyglądać tak:

{"result":"success","image":,"foo", "name":"bar"}

+1

Nie sądzę AppleScript ma jakieś natywne wsparcie dla tego (choć mogę się mylić), ale zawsze można użyć 'zrobić powłoki script'. –

Odpowiedz

3

odpowiedzieć na konkretne pytanie (po szybkim Reread), jedyne wsparcie web Applescript ma jest przez bibliotekę URL Access Scripting, która jest tylko opakowaniem dla polecenia terminalu curl. Jest trochę błędny i nie przekazuje wszystkiego tak, jak powinien.

Poza tym, nie ma natywnego wsparcia JSON w Applescript, a to będzie trochę bolesne. Aby przeanalizować JSON, musisz użyć Applescript's text item delimiters.

set mJson to "\"result\":\"success\",\"image\":\"foo\", \"name\":\"bar\"" -- get your data into a string somehow, like a function 
set AppleScript's text item delimiters to {","} 
set keyValueList to (every text item in mJson) as list 
set AppleScript's text item delimiters to "" 
(*"result":"success", "image":"foo", "name":"bar"*) 

repeat with thiskeyValuePair from 1 to (count keyValueList) 
    set theKeyValuePair to item thiskeyValuePair of keyValueList 
    set AppleScript's text item delimiters to {":"} 
    set theKeyValueBufferList to (every text item in theKeyValuePair) as list 
    set AppleScript's text item delimiters to "" 
    set theKey to item 1 of theKeyValueBufferList 
    (*"result"*) 
    set theValue to item 2 of theKeyValueBufferList 
    (*"success"*) 
end repeat 

To wszystko, gdy wszystko idzie dobrze. Będziesz musiał wziąć pod uwagę źle sformułowany JSON, jak w twoim przykładzie, który zawiera dodatkowy przecinek tam, gdzie go nie ma, i różnice takie jak dodatkowe spacje i tym podobne. Jeśli możesz manipulować danymi w innym miejscu, aby uzyskać to, czego potrzebujesz, sugerowałbym to. Applescript nie jest dobry na takie rzeczy.

0

Analizuję XML/HTML/JSON itp. Za pomocą wyrażeń regularnych. AppleScript nie ma natywnej obsługi wyrażeń regularnych, ale możesz pobrać dodatek skryptowy o nazwie Satimage, który pozwoli ci użyć ich w swoich skryptach Apple.

Pobierz i zainstaluj dodatek do skryptów, a następnie zapoznaj się z Satimage user guide, aby uzyskać instrukcje i przykładowy kod.

Jeśli nie jesteś zaznajomiony z wyrażeń regularnych (lub nawet jeśli), aplikacja o nazwie RegExhibit pomoże Ci znaleźć właściwą składnię skryptów.

8

Potrzebowałem parsować JSON w AppleScript i stworzyłem bardzo prostą skryptową aplikację działającą w tle. To naprawdę tylko wiąże dwa frameworki (JSON, Appscript).

Jest już dostępna za darmo w sklepie Mac App Store. Możesz sprawdzić więcej przykładów na naszej website.

Użycie jest bardzo proste:

tell application "JSONHelper" 

    -- return JSON from an AppleScript list 

    set jsonString to make JSON from {"A", "B", "C"} 
    log jsonString 

    set asList to read JSON from jsonString 

    -- return JSON from an AppleScript record 

    set jsonString to make JSON from {a_string:"string", a_list:{"abc", 123, false, true}} 
    log jsonString 

    -- return an AppleScript record from JSON 

    set asRecord to read JSON from jsonString 
    log asRecord 

end tell 
+0

Ładnie wykonane. To plus jakieś żądanie HTTP do pobrania JSON mogło rozwiązać mój problem. – buley

+0

Fajnie - właśnie używałem "zrobić skrypt powłoki" i zwijać, aby pobrać JSON - ale jest prawdopodobnie coś bardziej eleganckiego. – davidb

+1

Wersja MAS ma teraz polecenie "pobierz JSON", aby uniknąć konieczności zwijania się, aby pobrać JSON. – davidb

1

Potrzebowałem wersję, która nie wymaga żadnych nowych zależności (jak instalowanie aplikacji). Zrobiłem więc kodek/dekoder tylko dla AppleScript.

https://github.com/KAYLukas/applescript-json

+0

Po sprawdzeniu twojego kodu (który miałem nadzieję użyć) wygląda na to, że używasz Pythona, a nie tylko AppleScript? – simonthumper

+0

Tak, to prawda. Ale Python jest zawsze dostępny na Mac OS X. Myślałem, że używanie tylko applescript było sposobem na spowolnienie. – user23127

+0

Tak, to działało dobrze i dekodowało JSON, którego też chciałem ... jak tylko wrzuciłem go do skryptu uruchamiającego Xcode, chociaż dało mi to trochę błędów w pythonie, myślę, że Xcode jest po prostu zabawne, co może i nie może. Uruchomiłem :) Zakończyłem pisanie własnego parsera w applescript, ale jak powiedziałeś, było bardzo wolno! – simonthumper