2011-01-05 25 views
6

Tôi có API dựa trên Web mà tôi muốn gửi các yêu cầu POST/GET qua AppleScript. Tôi muốn truy xuất và phân tích cú pháp phản hồi sao cho tôi có thể đưa nó vào ứng dụng khác.Có thể và cách bạn nhận dữ liệu từ xa (ví dụ: JSON) vào AppleScript?

Điều này có khả thi không? Nếu vậy, làm thế nào?

Các dữ liệu JSON sẽ, ví dụ, giống như thế này:

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

+1

Tôi không nghĩ AppleScript có bất kỳ hỗ trợ bản địa cho điều này (mặc dù tôi có thể là sai), nhưng bạn luôn có thể sử dụng 'làm script' vỏ. –

Trả lời

3

Để trả lời các câu hỏi cụ thể (sau một đọc lại nhanh), sự ủng hộ web chỉ AppleScript có là thông qua việc URL Access Scripting thư viện, mà chỉ là một trình bao bọc cho lệnh curl của thiết bị đầu cuối. Đó là một chút lỗi và không báo cáo lại tất cả mọi thứ như nó cần.

Ngoài ra, cũng không có hỗ trợ JSON gốc nào trong Bản ghi nhớ, và làm như vậy sẽ hơi đau một chút. Để phân tích cú pháp JSON, bạn cần sử dụng 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 

Điều này được thực hiện khi mọi thứ diễn ra đúng. Bạn sẽ phải xem xét JSON được định dạng sai, như trong ví dụ của bạn có chứa một dấu phẩy thừa mà nó không thuộc về, và chênh lệch như các khoảng trống thừa và các thứ tương tự. Nếu bạn có thể thao tác dữ liệu ở nơi khác để có được những gì bạn cần, tôi sẽ đề nghị làm như vậy. Applescript không phải là rất tốt cho những thứ như thế này.

0

Tôi phân tích cú pháp XML/HTML/JSON, v.v. sử dụng cụm từ thông dụng. AppleScript không có hỗ trợ gốc cho các biểu thức chính quy nhưng bạn có thể tải xuống một phần bổ sung tập lệnh có tên là Satimage cho phép bạn sử dụng chúng trong các bản ghi của bạn.

Tải xuống và cài đặt phần bổ sung tập lệnh và sau đó xem Satimage user guide để biết hướng dẫn và mã mẫu.

Nếu bạn không quen thuộc với các cụm từ thông dụng (hoặc thậm chí nếu bạn đang có), một ứng dụng được gọi là RegExhibit sẽ giúp bạn tìm đúng cú pháp cho tập lệnh của mình.

8

Tôi cần phân tích cú pháp JSON trong AppleScript và tạo một ứng dụng nền có thể chạy được rất đơn giản để thực hiện việc này. Nó thực sự chỉ liên kết hai khung công tác (JSON, Appscript) với nhau.

Tính năng này hiện khả dụng miễn phí trên Mac AppStore. Bạn có thể xem thêm các ví dụ trên số website của chúng tôi.

Cách sử dụng rất đơn giản:

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

Thực hiện tốt. Điều này cộng với một số loại yêu cầu HTTP để tìm nạp JSON có thể đã giải quyết được vấn đề của tôi. – buley

+0

Tuyệt vời - Tôi vừa mới sử dụng "làm kịch bản lệnh shell" và cuộn tròn để tìm nạp JSON - nhưng có lẽ điều gì đó thanh lịch hơn. – davidb

+1

Phiên bản MAS bây giờ có lệnh "tìm nạp JSON" để tránh phải cuộn tròn để tải xuống JSON. – davidb

1

tôi cần một phiên bản mà không đòi hỏi bất kỳ phụ thuộc mới (như cài đặt một ứng dụng). Vì vậy, tôi đã thực hiện một bộ mã hóa/giải mã json chỉ sử dụng bảng phân tích.

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

+0

Khi kiểm tra mã của bạn (Tôi đã hy vọng sử dụng mã nào) có vẻ như bạn đang sử dụng python, chứ không phải chỉ là bản ghi chép? – simonthumper

+0

Vâng, đúng vậy. Nhưng python luôn luôn có sẵn trên Mac OS X. Tôi nghĩ rằng chỉ sử dụng applescript là cách để làm chậm. – user23127

+0

Vâng nó chạy tốt và giải mã JSON Tôi muốn nó quá ... ngay sau khi tôi chucked nó trong một kịch bản Xcode chạy mặc dù nó đã cho tôi một số lỗi python, tôi đoán Xcode chỉ là buồn cười về những gì nó có thể và không thể chạy :) Đã kết thúc viết trình phân tích cú pháp của riêng tôi trong bản ghi chép nhưng khi bạn nói nó rất chậm! – simonthumper

2

Câu hỏi đặt ra là tuổi nhưng bây giờ có vẻ là một giải pháp có sẵn:

JSON Helper là một đại lý (hoặc ứng dụng nền kịch bản) cho phép bạn làm những việc hữu ích với JSON (JavaScript Object Notation) trực tiếp từ AppleScript.

http://www.mousedown.net/mouseware/JSONHelper.html App Store

Các vấn đề liên quan