Может и как вы получаете удаленные данные (например, JSON) в AppleScript? - PullRequest
6 голосов
/ 05 января 2011

У меня есть веб-API, в который я хотел бы отправлять запросы POST / GET через AppleScript. Я хочу получить и проанализировать ответ, чтобы я мог передать его в другое приложение.

Возможно ли это? Если да, то как?

Данные JSON будут, например, выглядеть так:

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

Ответы [ 4 ]

8 голосов
/ 28 января 2011

Мне нужно было проанализировать JSON в AppleScript, и я сделал очень простое фоновое приложение для сценариев, чтобы сделать это. Это действительно просто связывает две платформы (JSON, Appscript) вместе.

Теперь он доступен бесплатно в Mac AppStore. Вы можете проверить больше примеров на нашем сайте .

Использование очень просто:

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
3 голосов
/ 05 января 2011

Чтобы ответить на конкретный вопрос (после быстрого перечитывания), единственная веб-поддержка, поддерживаемая Applescript, - это библиотека URL Access Scripting, которая является просто оболочкой для команды curl терминала. Это немного глючит и не сообщает все как следует.

Кроме того, в Applescript также отсутствует встроенная поддержка JSON, и это будет немного болезненно. Чтобы проанализировать JSON, вам нужно использовать 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

Все это делается, когда все идет хорошо. Вы должны будете принять во внимание плохо сформированный JSON, как в вашем примере, который содержит дополнительную запятую, где он не принадлежит, и отклонения, такие как дополнительные пробелы и тому подобное. Если вы можете манипулировать данными в другом месте, чтобы получить то, что вам нужно, я бы предложил сделать это. Applescript не очень хорош для таких вещей.

1 голос
/ 13 апреля 2014

Мне нужна версия, которая не требует каких-либо новых зависимостей (например, установка приложения).Поэтому я сделал кодировщик / декодер JSON только для appleScript.

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

0 голосов
/ 06 января 2011

Я анализирую XML / HTML / JSON и т. Д. С помощью регулярных выражений.AppleScript не имеет встроенной поддержки регулярных выражений, но вы можете загрузить дополнение для сценариев под названием Satimage , которое позволит вам использовать их в своих приложениях.

Загрузите и установите дополнение для сценариев, а затемобратитесь к руководству пользователя Satimage для получения инструкций и примеров кода.

Если вы не знакомы с регулярными выражениями (или даже если вы), приложение под названием RegExhibit поможет вам найти правильный синтаксис для ваших скриптов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...