2011-01-05 7 views
6

मुझे एक वेब-आधारित एपीआई मिला है जिसके लिए मैं ऐप्पलस्क्रिप्ट के माध्यम से POST/GET अनुरोध भेजना चाहता हूं। मैं प्रतिक्रिया को पुनः प्राप्त करना और विश्लेषण करना चाहता हूं जैसे कि मैं इसे किसी अन्य ऐप में खिला सकता हूं।ऐप्पलस्क्रिप्ट में आप दूरस्थ डेटा (उदा। जेएसओएन) कैसे प्राप्त कर सकते हैं?

क्या यह संभव है? यदि हां, तो कैसे?

JSON डेटा होता है, उदाहरण के लिए, इस तरह दिखेगा:

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

+1

मुझे नहीं लगता कि AppleScript इस के लिए किसी भी देशी समर्थन (हालांकि मैं गलत हो सकता है) है, लेकिन आप हमेशा इस्तेमाल कर सकते हैं 'खोल script' है। –

उत्तर

3

विशिष्ट प्रश्न (एक त्वरित फिर से पढ़ना के बाद) उत्तर देने के लिए, केवल वेब समर्थन Apple स्क्रिप्ट है URL Access Scripting पुस्तकालय, के माध्यम से है जो टर्मिनल के curl कमांड के लिए सिर्फ एक रैपर है। यह थोड़ी छोटी गाड़ी है और इसे सबकुछ वापस रिपोर्ट नहीं करता है जैसा इसे करना चाहिए।

इसके अलावा, एप्पलस्क्रिप्ट में कोई मूल 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 

यह सब कुछ ठीक हो जाने पर यह सब किया जाता है। आपको बुरी तरह से गठित जेएसओएन को ध्यान में रखना होगा, जैसा कि आपके उदाहरण में एक अतिरिक्त कॉमा है जहां यह संबंधित नहीं है, और अतिरिक्त रिक्त स्थान और जैसे भिन्नताएं हैं। यदि आप जो चाहते हैं उसे पाने के लिए कहीं और डेटा का उपयोग कर सकते हैं, तो मैं ऐसा करने का सुझाव दूंगा। इस तरह की चीजों के लिए एप्पलस्क्रिप्ट बहुत अच्छा नहीं है।

0

मैं नियमित अभिव्यक्तियों का उपयोग कर एक्सएमएल/एचटीएमएल/जेएसओएन आदि का विश्लेषण करता हूं। ऐप्पलस्क्रिप्ट में नियमित अभिव्यक्तियों के लिए मूल समर्थन नहीं है लेकिन आप Satimage नामक एक स्क्रिप्टिंग अतिरिक्त डाउनलोड डाउनलोड कर सकते हैं जो आपको अपने एप्पलस्क्रिप्ट में उपयोग करने की अनुमति देगा।

स्क्रिप्टिंग जोड़ को डाउनलोड और इंस्टॉल करें और फिर निर्देशों और नमूना कोड के लिए Satimage user guide देखें।

यदि आप नियमित अभिव्यक्ति से परिचित नहीं हैं (या यहां तक ​​कि यदि आप हैं) RegExhibit नामक ऐप आपको आपकी स्क्रिप्ट के लिए सही वाक्यविन्यास खोजने में मदद करेगा।

8

मुझे ऐप्पलस्क्रिप्ट में JSON को पार्स करने की आवश्यकता थी, और ऐसा करने के लिए एक बहुत ही सरल पटकथा पृष्ठभूमि ऐप बनाया। यह वास्तव में सिर्फ दो ढांचे (JSON, Appscript) से जुड़ा हुआ है।

अब यह मैक ऐपस्टोर पर निःशुल्क उपलब्ध है। आप हमारे website पर और उदाहरण देख सकते हैं।

प्रयोग बहुत सरल है:

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

अच्छी तरह से किया गया। जेएसओएन लाने के लिए यह कुछ प्रकार के HTTP अनुरोध से मेरी समस्या हल हो सकती है। – buley

+0

कूल - मैं बस जेएसओएन लाने के लिए "डू शैल स्क्रिप्ट" और कर्ल का उपयोग कर रहा हूं - लेकिन शायद कुछ और सुरुचिपूर्ण है। – davidb

+1

एमएएस संस्करण में अब JSON डाउनलोड करने के लिए कर्ल करने से बचने के लिए "JSON JSON" कमांड है। – davidb

1

मैं एक संस्करण है जो किसी भी नए निर्भरता (कोई एप्लिकेशन इंस्टॉल की तरह) की आवश्यकता नहीं है की जरूरत है। तो मैंने केवल एक एप्सस्क्रिप्ट बनाया जो जेसन एन्कोडर/डिकोडर था।

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

+0

आपके कोड के निरीक्षण पर (जिसे मैं उपयोग करने की उम्मीद कर रहा था) ऐसा लगता है कि आप केवल एप्पलस्क्रिप्ट के बजाय अजगर का उपयोग कर रहे हैं? – simonthumper

+0

हाँ, यह सही है। लेकिन पाइथन हमेशा मैक ओएस एक्स पर उपलब्ध है। मैंने सोचा कि केवल सेबस्क्रिप्ट का उपयोग धीमा करने का तरीका था। – user23127

+0

हाँ यह ठीक चला गया और जेएसओएन को डीकोड किया, मैं इसे भी चाहता था ... जैसे ही मैंने इसे एक एक्सकोड रन-स्क्रिप्ट में चकित किया, हालांकि मुझे कुछ पायथन त्रुटियां मिलीं, मुझे लगता है कि एक्सकोड सिर्फ यह मजाकिया है कि यह क्या कर सकता है और नहीं कर सकता भागो :) एप्पलस्क्रिप्ट में अपना खुद का पार्सर लिखना समाप्त हो गया लेकिन जैसा कि आपने कहा था कि यह बहुत धीमा था! – simonthumper

2

प्रश्न पुराने साल थी लेकिन अब तक वहाँ एक समाधान उपलब्ध हो रहा है: जो आप के साथ उपयोगी चीजें करने देता है

JSON हेल्पर एक एजेंट है (या स्क्रिप्ट पृष्ठभूमि आवेदन) एप्पलस्क्रिप्ट से सीधे JSON (जावास्क्रिप्ट ऑब्जेक्ट नोटेशन)।

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

संबंधित मुद्दे