天道酬勤,学无止境

How to fetch and parse an XML file using AppleScript?

There's an XML file on some remote server (http://foo/bar.xml):

<?xml version="1.0" encoding="UTF-8"?> 
<foo> 
  bar
</foo>

How can I get the value "bar" using AppleScript?

标签

评论

Here's what I've done:

set file_tgt to (POSIX path of (path to temporary items)) & "file.xml"
    do shell script "curl -L " & "http://url.com/file.xml" & " -o " & file_tgt
tell application "System Events"
    set file_content to contents of XML file file_tgt
    tell file_content
        set my_value to value of XML element 1
    end tell
end tell

Originally I was using the "URL Access Scripting" app to fetch the file, but since it has been removed in Lion, I switched to pure curl, which works under both Snow Leopard and Lion.

I found this thread which has an example of parsing an XML file with the XML tools available via System Events. Seems pretty convoluted to me though.

There's also this (freeware) scripting addition package for parsing/writing XML. Haven't looked at it, but it might be neat.

Personally, I would save my script as a script bundle, and then I'd make a little php/Ruby/perl/python/whatever script to parse the XML (since I'm just more comfortable with that) in the bundle. Then I'd use AppleScript then pass the XML to the parser script from cURL.

AppleScript:

set scriptPath to POSIX path of (path to me as alias) & "Contents/Resources/parse_xml.rb"
set fooValue to do shell script "curl http://foo/test.xml 2> /dev/null | ruby " & quoted form of scriptPath

parse_xml.rb could be somthing like this (using Ruby as an example):

require "rexml/document"

# load and parse the xml from stdin
xml = STDIN.read
doc = REXML::Document.new(xml)

# output the text of the root element (<foo>) stripped of leading/trailing whitespace
puts doc.root.text.strip

(Ruby and the REXML package should be readily available on any Mac, so it should work anywhere… I believe)

Point is, when the script runs it'll download the XML file with cURL, pass it to the Ruby script, and in the end, fooValue in the AppleScript will be set to "bar".

Of course, if the XML is more complex, you'll need more scripting, or take another look at the other options.

There are probably even more ways of doing it (for instance, you could just do some string manipulation instead of full-on XML parsing, but that's a little brittle of course), but I'll stop here :)

Realizing this is an old question, but here’s one way using the Bing Maps API (note I replaced my API key with XXXXXXXXXX). use do shell script with curl to retrieve the XML, then just walk down the elements until you get to the one you need (you can consolidate all the tells into tell xml element “X” of xml element “y” of xml element…, but this is just easier to follow).

set theXML to make new XML data with properties {name:"Geolocation", text:(do shell script "curl 'http://dev.virtualearth.net/REST/v1/Locations?&q=638%20Brandon%20Town%20Center%20Brandon%20FL%2033511&o=xml&key=XXXXXXXXXX'")}
tell theXML
    tell XML element "Response"
        tell XML element "ResourceSets"
            tell XML element "ResourceSet"
                tell XML element "Resources"
                    tell XML element "Location"
                        tell XML element "Point"
                            set theLatitude to the value of XML element "Latitude"
                            set theLongitude to the value of XML element "Longitude"
                        end tell
                    end tell
                end tell
            end tell
        end tell
    end tell
end tell

EDIT: I suppose I should include the XML I was using for the above:

<?xml version=\"1.0\" encoding=\"utf-8\"?>
<Response xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.microsoft.com/search/local/ws/rest/v1\">
  <Copyright>Copyright © 2014 Microsoft and its suppliers. All rights reserved. This API cannot be accessed and the content and any results may not be used, reproduced or transmitted in any manner without express written permission from Microsoft Corporation.</Copyright>
  <BrandLogoUri>http://dev.virtualearth.net/Branding/logo_powered_by.png</BrandLogoUri>
  <StatusCode>200</StatusCode>
  <StatusDescription>OK</StatusDescription>
  <AuthenticationResultCode>ValidCredentials</AuthenticationResultCode>
  <TraceId>06bb657f1ac9466ba00ef45aa55aef3b|BN20130631|02.00.108.1000|BN2SCH020180822, BN2SCH020181444, BN2SCH020181020, BN2SCH030291220, BN2SCH030261523</TraceId>
  <ResourceSets>
    <ResourceSet>
      <EstimatedTotal>1</EstimatedTotal>
      <Resources>
        <Location>
          <Name>638 Brandon Town Center Dr, Brandon, FL 33511</Name>
          <Point>
            <Latitude>27.929752349853516</Latitude>
            <Longitude>-82.326362609863281</Longitude>
          </Point>
          <BoundingBox>
            <SouthLatitude>27.925889632282839</SouthLatitude>
            <WestLongitude>-82.332191670122214</WestLongitude>
            <NorthLatitude>27.933615067424192</NorthLatitude>
            <EastLongitude>-82.320533549604349</EastLongitude>
          </BoundingBox>
          <EntityType>Address</EntityType>
          <Address>
          <AddressLine>638 Brandon Town Center Dr</AddressLine>
          <AdminDistrict>FL</AdminDistrict>
          <AdminDistrict2>Hillsborough Co.</AdminDistrict2>
          <CountryRegion>United States</CountryRegion>
          <FormattedAddress>638 Brandon Town Center Dr, Brandon, FL 33511</FormattedAddress>
          <Locality>Brandon</Locality>
          <PostalCode>33511</PostalCode>
          </Address>
          <Confidence>High</Confidence>
          <MatchCode>Good</MatchCode>
          <GeocodePoint>
            <Latitude>27.929752349853516</Latitude>
            <Longitude>-82.326362609863281</Longitude>
            <CalculationMethod>Parcel</CalculationMethod>
            <UsageType>Display</UsageType>
          </GeocodePoint>
          <GeocodePoint>
            <Latitude>27.929159164428711</Latitude>
            <Longitude>-82.32720947265625</Longitude>
            <CalculationMethod>Interpolation</CalculationMethod>
            <UsageType>Route</UsageType>
          </GeocodePoint>
        </Location>
      </Resources>
    </ResourceSet>
  </ResourceSets>
</Response>

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • How to create XML from a string (not a file) in Applescript?
    I have an Applescript that receive an XML string formatted as parameter, and I would like to read/parse data. Received string looks like: <?xml version="1.0" encoding="utf-8" ?> <win> <name>Documents</name> <target>SSD:Documents:</target> <listview>1</listview> <sidebar>0</sidebar> <bounds>1200, 630, 1825, 1080</bounds> </win> I saw examples with XML files but I can't figure how to populate a record based upon received string. Final record could be like this: set myRecord to {name:_XML_element_name_, tg:_XML_element_target_, listview: ...} Or I could use at least some variables: set theName to
  • 在不运行 iTunes 的情况下获取 iTunes 专辑插图(Fetch iTunes album artwork without iTunes running)
    问题 在 Cocoa 应用程序中,我正在寻找一种解决方案来从 iTunes 检索专辑插图,而无需在后台启动和运行 iTunes 本身。 通常且可能是唯一的解决方案 Scripting Bridge 和固有的 AppleScript 将在执行任何命令之前启动 iTunes。 专辑插图是唯一无法通过解析iTunes Library.xml获得的信息。 对于给定的轨道,iTunes 以下列方式混淆艺术作品的存储: ~/{Library Path}/Album Artwork/Cache/D989408F65D05F99/04/13/04/D989408F65D05F99-EB5B7A9086F4B4D4.itc . 有人知道一种无需启动 iTunes 即可获得专辑封面的技术吗? 我总是可以走不同的路线,例如使用亚马逊的数据服务,但我更喜欢基于本地 iTunes 的解决方案。 回答1 文件名是库 ID (D989408F65D05F99) 和曲目 ID (EB5B7A9086F4B4D4) 的混合。 目录结构来自于库ID和曲目ID的后三位转换为十进制,即4D4变为04、13、04。 .itc 文件似乎具有 RIFF/chunked 类型结构。 这里有一些关于文件结构的内容。 回答2 iTunes 11+ (macOS 10.13+) 引入了具有此功能的 iTunes Library
  • 如何从 Applescript 中的字符串(不是文件)创建 XML?(How to create XML from a string (not a file) in Applescript?)
    问题 我有一个接收格式为参数的 XML 字符串的 Applescript,我想读取/解析数据。 收到的字符串如下所示: <?xml version="1.0" encoding="utf-8" ?> <win> <name>Documents</name> <target>SSD:Documents:</target> <listview>1</listview> <sidebar>0</sidebar> <bounds>1200, 630, 1825, 1080</bounds> </win> 我看到了 XML 文件的示例,但我不知道如何根据收到的字符串填充记录。 最终记录可能是这样的: set myRecord to {name:_XML_element_name_, tg:_XML_element_target_, listview: ...} 或者我至少可以使用一些变量: set theName to _XML_element_name_ set theTarget to _XML_element_target_ ... 回答1 只需从纯文本创建一个新的XML data实例 set xmlText to "<?xml version=\"1.0\" encoding=\"utf-8\" ?> <win> <name>Documents</name> <target>SSD
  • 如何在可编写脚本的应用程序中将任意 AppleScript 记录传递给 Cocoa?(How to pass an arbitrary AppleScript Record to Cocoa in a scriptable app?)
    问题 我有一个 Cocoa 应用程序,其中包含在 .sdef XML 文件中描述的 AppleScript 字典。 sdef 中定义的所有 AppleScript 类、命令等都是工作属性。 除了我的“提交表单”命令。 “提交表单”命令是我唯一的命令,它试图将一个参数作为从 AppleScript 到 Cocoa 的任意信息散列表传递。 我认为这应该通过传递 AppleScript record来完成,该record将在 Cocoa 端自动转换为NSDictionary 。 tell application "Fluidium" tell selected tab of browser window 1 submit form with name "foo" with values {bar:"baz"} end tell end tell “带值”参数是我遇到问题的record -> NSDictionary参数。 请注意,记录/字典的键不能预先知道/定义。 他们是任意的。 这是我的 sdef XML 中此命令的定义: <command name="submit form" code="FuSSSbmt" description="..."> <direct-parameter type="specifier" optional="yes" description="..."/>
  • 在 Apple Swift 中解析 Excel 数据(Parsing Excel Data in Apple Swift)
    问题 我目前的工作流程涉及使用 Applescript 来分隔 Excel 数据并将其格式化为纯文本文件。 我们正在推动全 Swift 环境,但我还没有找到任何类型的工具包来将我的 Excel 数据解析为 Swift。 我唯一能想到的就是使用C或其他东西并将其包装起来,但这并不理想。 对于解析这些数据以在 Swift 中使用有什么更好的建议吗? 目标是消除 Applescript,但我不确定在仍然与 Excel 文件交互的同时是否可行。 通过 Applescript 编写 Excel 脚本似乎是唯一的方法。 编辑:我没有从这个工作流程中删除 Excel 的选项。 这就是数据进入应用程序的方式,因此我必须包含它。 能够简化解析这些数据然后处理它的过程将是最重要的。 我知道 Applescript 过去在帮助我处理它方面做得很好; 然而,它对我来说有点太封闭了。 我一直在考虑用 Swift/Cocoa 编写一些东西,但这仍然可能需要使用 Applescript 提取数据,对吗? 推动 Swift 的一大优势是可读性。 我不太了解 Objective-C,我觉得 swift 会更容易过渡。 我在 PC 上的工作流程一直在使用 COM 对象,如前所述,它在 Mac Excel 应用程序中不可用。 我现在只是在寻找数据提取。 以前的一些应用程序确实在应用程序内进行了处理
  • 您可以以及如何将远程数据(例如 JSON)获取到 AppleScript 中?(Can and how do you get remote data (e.g. JSON) into AppleScript?)
    问题 我有一个基于 Web 的 API,我想通过 AppleScript 向它发送 POST/GET 请求。 我想检索和解析响应,以便我可以将其提供给另一个应用程序。 这可能吗? 如果是这样,如何? 例如,JSON 数据如下所示: {"result":"success","image":,"foo", "name":"bar"} 回答1 要回答特定问题(快速重读之后),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
  • 如何在python和mac应用程序之间通信?(How do I communicate between python and a mac application?)
    问题 这可能是一个模糊的问题,但我未能正确表述。 所以这是一个解释。 我开发了一个应用程序,该应用程序最初是作为Mac应用程序开发的,同时使用Carbon / Cocoa的API来完成我的任务。 (该应用程序的目标是在鼠标移动/其他击键之后向应用程序发送“击键”。为此,我使用了Accessibility API)。 但是现在,我想添加脚本支持,因此可能会有条件的击键。 例如:在按“ Y”键5次后,我想按“ B”键。 在OSX中,Python应用程序不可能做这种事情,而且我找不到允许我做的任何库。 所以我想我会将应用程序制作成两块。 首先:我将在Cocoa / Carbon中编写一个具有以下基本功能的应用程序:SendKeyToApp(pid,key)和WaitForMovement()。 python应用程序将使用这些方法调用与该应用程序通信。 这里的问题是:我该如何在这两个应用程序之间进行通信? 我将使用HTTP服务器,套接字服务器还是某种subprocess.Popen()hacks。 坦率地说,我不知道。 有没有人有实现这一任务的想法? 回答1 更轻松。 我从Python内部使用了Accessibility API,这一切使我可以轻松实现此目的,而根本不需要任何可可/碳素。 对于那些感兴趣的人,它被称为atomac。 回答2 PyObjC可能就是您想要的: PyObjC
  • Parsing Excel Data in Apple Swift
    My current workflow involves using Applescript to essentially delimit Excel data and format it into plain text files. We're pushing towards an all Swift environment, but I haven't yet found any sort of kits for parsing my Excel data into Swift. The only thing I can think of is to use C or something and wrap it, but that's not ideal. Any better suggestions for parsing this data for use in Swift? The goal is to eliminate Applescript, but I'm not sure if that will be possible while still interacting with Excel files. Scripting Excel via Applescript seems to be the only method. EDIT: I don't have
  • 使用AppleScript解析HTML源代码(Parsing HTML source code using AppleScript)
    问题 我正在尝试解析一个HTML文件,该文件已转换为Automator内部的TXT文件。 以前,我是使用Automator从网站上下载HTML文件的,现在我正在努力解析源代码。 最好是,我只想获取表的信息,并且需要对1800个不同的HTML文件重复此操作。 这是源代码的示例: </head> <body> <div id="header"> <div class="wrapper"> <span class="access"> <div id="fb-root"></div> <span class="access"> Gold Account: <a class="upgrade" title="Account Details" href="http://www.hedge-professionals.com/account-details.html" >Active </a> Logged in as Edward   |   <a href="javascript:void(0);" onclick='logout()' class="logout">Sign Out</a> </span> </span> </div><!-- /wrapper --> </div><!-- /header --> <div id="masthead"> <div class=
  • Parsing HTML source code using AppleScript
    I'm trying to parse an HTML file which I have converted to a TXT file inside of Automator. I previously downloaded the HTML file from a website using Automator, and I am now struggling to parse the source code. Preferably, I want to take the information of just the table and I need to repeat this action for 1800 different HTML files. Here is an example of the source code: </head> <body> <div id="header"> <div class="wrapper"> <span class="access"> <div id="fb-root"></div> <span class="access"> Gold Account: <a class="upgrade" title="Account Details" href="http://www.hedge-professionals.com
  • 如何将 CSV 转换为多个列表(applescript)?(How to transform a CSV into several lists (applescript)?)
    问题 我已经为此挖掘了一段时间,但找不到解决方案。 我有一个包含以下数据的 CSV 文件: 1,2,3,a,b,c,4,5,6,d,e,f,7,8,9,0 0,9,8,g,h,i,7,6,4,k,l,m,5,4,3,2 等等... 除了某些字段为真或假之外,每一行都包含大部分不同的数据。 我需要的是将每一行作为一个列表拉出来,然后才能解析数据。 我希望能够从所有列表中删除例如第 3 项,然后保存要在电子表格中使用的数据。 请记住,我对 applescript 还比较陌生,所以仍在尝试了解它,已经购买了许多网站上似乎强烈推荐的书,但尚未交付! :-) 另外,如果您知道这样做的不同/更好的方法,那么我很乐意尝试。 目前我有以下几点: Blockquote -- 设置变量将 LF 设置为 ASCII 字符 10 -- 选择你的文件将 prompt1 设置为“请找到您的设备 CSV 文件...” 将 csvDevices 设置为“testfile.csv” --set csvDevices to (选择带有提示prompt1的文件) -- 读取文件到内存设置 csvLines 以读取 csvDevices 将 AppleScript 的文本项分隔符设置为 {LF} 将 csvEntries 设置为 csvLines 的段落将 AppleScript 的文本项分隔符设置为 {","} --
  • 如何重复或循环一个applescript(how to repeat or loop an applescript)
    问题 我正在寻找一个选项来为苹果邮件中的所有未读邮件着色,我发现了以下脚本 tell application "Mail" set background color of (messages of inbox whose read status is false) to red --unread set background color of (messages of inbox whose read status is true) to none --default read end tell 我将此脚本添加到邮件规则中,该规则适用于每封邮件,然后它几乎完美运行。 唯一的问题是它只能工作一次。 所以如果我收到一条新消息,脚本不会注意到它(所以它不是红色的,只有粗体),或者如果我阅读了一封电子邮件,那么它仍然是红色的。 请有人帮助我,该脚本将循环运行,或者该脚本将每秒运行一次。 仅供参考,我是 Windows 用户(mac 对我来说真的很新),我正在寻找计划任务选项,但我没有在我的 mac 上找到这么简单的事情。 回答1 您有多种选择来运行计划任务。 Apple 建议使用“launchd”代理。 对于许多示例,只需谷歌“launchd 教程”即可。 基本原理是这样的……你用你想要的任何指令创建一个 plist 文件(一个带有 .plist 文件扩展名的 xml 文本文件)
  • Fetch iTunes album artwork without iTunes running
    In a Cocoa application, I'm looking for a solution to retrieve album artwork from iTunes without requiring iTunes itself to be launched and running in the background. The usual and perhaps only solution, Scripting Bridge, and inherently AppleScript, will launch iTunes prior to executing any commands. Album artwork is the only information which cannot be obtained from parsing iTunes Library.xml. iTunes obfuscates the storage of artwork in the following manner, for a given track: ~/{Library Path}/Album Artwork/Cache/D989408F65D05F99/04/13/04/D989408F65D05F99-EB5B7A9086F4B4D4.itc. Anyone know of
  • Automator / AppleScript 在 Mac Mail 中处理传入的电子邮件(Automator / AppleScript to process incoming emails in Mac Mail)
    问题 我正在设计一个应用程序,如果我的应用程序崩溃,它允许用户通过电子邮件向我发送崩溃报告。 我想让 Mac Mail 在计算机上运行,​​当电子邮件通过时,自动脚本/AppleScript 会运行以处理电子邮件正文的内容。 我已经在 python 脚本中完成了整个解析/处理,但我必须手动将电子邮件的内容复制到一个文件中,然后在该文件上运行我的解析器。 设置它以便将电子邮件的内容推送到我的解析脚本中的最佳方法是什么? 非常感谢! 回答1 可能最简单的方法是定义 Mail.app 规则。 您可以设置过滤条件来指定一组传入电子邮件以将规则应用到您可以指定的规则操作中,即对传入消息运行 AppleScript。 规则由 Mail.app Preferences -> Rules 。 Apple 在 Mac OS X 中提供了规则操作脚本的示例。在/Library/Scripts/Mail Scripts/Rule Actions查找或搜索网络。 回答2 这是一个使用邮件规则从电子邮件中提取到文件的脚本:MacScripter / Mail rule script for message export。 可能适用于您正在做的事情的示例代码。 回答3 使用 Applescript 编辑器中的字典查看邮件的属性,您将很快能够查看任何邮件消息的属性。 这是获取邮件消息内容的快速而肮脏的示例。
  • iTunes 应用程序加载器 - 自动化(iTunes Application Loader - automation)
    问题 由于最近 Apple 更改了 iTunes Connect 界面,人们需要使用 Application Loader 上传应用程序。 这很好,但我需要一个脚本来自动化我的工作。 App Loader 之类的应用程序如何实现自动化? 我在想用 AppleScript 写的东西……但我不知道它暴露了什么动作(如果有的话)。 在某个地方找到了我也可以从 AppleScript 中编写 GUI 脚本的地方,但我找不到关于它的文档。 我需要什么......某种方式来触发输入操作(鼠标点击/键盘输入)并从显示的各种控件中读取文本。 如果这在 Python/Ruby 中是可能的,那就太好了,但 AppleScript 很好。 OS X 是 10.6.4 版。 任何建议表示赞赏。 谢谢, 回答1 Application Loader 文档提到了一个可以用于此目的的 altool。 (https://itunesconnect.apple.com/docs/UsingApplicationLoader.pdf) 相关资料: 您可以使用 altool,Application Loader 的命令行工具来验证您的应用程序二进制文件并将其上传到 App Store。 要在上传之前验证您的构建或自动将有效构建上传到 App Store,您可以在您的持续集成系统中包含 altool。 altool 位于
  • AppleScript选择文件或文件夹(AppleScript choose file or folder)
    问题 可以一次使用AppleScript选择文件或文件夹吗? 现在我可以使用 tell application "SystemUIServer" to return POSIX path of (choose file) 或者 tell application "SystemUIServer" to return POSIX path of (choose folder) 获取文件或文件夹。 但是,我无法一次获得文件或文件夹。 回答1 不,您不能使用“选择文件”或“选择文件夹”动词来做到这一点,但是基础NSOpenPanel支持选择一个文件或文件夹(或多个文件/文件夹)。 因此,您可以使用AppleScriptObjC做到这一点。 这是一个使用ASObjCRunner的示例(从此处派生): script chooseFilesOrFolders tell current application's NSOpenPanel's openPanel() setTitle_("Choose Files or Folders") -- window title, default is "Open" setPrompt_("Choose") -- button name, default is "Open" setCanChooseFiles_(true)
  • 查找使用 AppleScript 安装的 Mac OSX 版本(Find Mac OSX version installed using AppleScript)
    问题 如何使用 AppleScript 找到我的 Mac 上安装了哪个版本的 OSX? 我想以编程方式安装应用程序并根据版本运行不同的 pkg 文件。 谢谢 回答1 我不是在 Mac 上,所以可能有更好的方法来做到这一点,但想到的第一种方法只是执行 shell 命令来查询操作系统版本。 http://developer.apple.com/technotes/tn2002/tn2065.html#TNTAG2 http://developer.apple.com/DOCUMENTATION/Darwin/Reference/ManPages/man1/sw_vers.1.html 根据这些参考资料,您可能想要执行以下操作: set os_version to do shell script "sw_vers -productVersion" 回答2 以下是使用内置函数在 AppleScript 中获取 OSX 版本的方法: set sysinfo to system info set osver to system version of sysinfo 在 OS X Mavericks 上,结果是“10.9”。 单行: set osver to system version of (system info) 回答3 您可以使用以下方法获取操作系统版本作为显示字符串: set
  • AppleScript 为 Amazon s3 执行 shell 脚本 cURL 命令(AppleScript do shell script cURL command for Amazon s3)
    问题 我专门在 Mac OSX 环境中工作,我正在尝试将 .zip 文件自动上传到我的 amazon s3 存储桶。 最近几天我一直在尝试,我真的很难过。 我已经尝试了我将发布的内容的许多不同变体,但我总是得到相同的错误结果。 我什至尝试让我的 AppleScript 调用 .sh 文件,但仍然无法得到结果。 我不会只发布我正在执行 cURL 命令的部分代码。 我的包含整个 cURL 命令的字符串都在一行中,因为我读过它最适合 AppleScript 理解。 set objectName to "My\\ Big\\ Test.zip" set dateFormatted to do shell script "date -R" set s3Bucket to "zipsOnAmazon" set fileName to zipFile set relativePath to (" " & s3Bucket & "/" & objectName & " ") set s3AccessKey to "my-key" set s3SecretKey to "my-secret" set contentType to "application/octet-stream" set stringToSign to "PUT " & contentType & " " &
  • How to Extract AppleScript Data from a NSAppleEventDescriptor in Cocoa and Parse it
    What I'm doing is executing an AppleScript inside of Cocoa. It returns some data as a NSAppleEventDescriptor, which NSLog() prints like so: <NSAppleEventDescriptor: 'obj '{ 'form':'name', 'want':'dskp', 'seld':'utxt'("69671872"), 'from':'null'() }> I want to take that data and turn it into a NSDictionary or NSArray, or something useful so I can extract stuff from it (specifically I'm after the field holding the "69671872" number). It appears to be an array of some sort, but my knowledge with Apple Events is fairly limited. Any idea on how to do this? Here's the source creating the above data
  • 如何从可可中的NSAppleEventDescriptor中提取AppleScript数据并进行解析(How to Extract AppleScript Data from a NSAppleEventDescriptor in Cocoa and Parse it)
    问题 我正在做的是在Cocoa中执行AppleScript。 它返回一些数据作为NSAppleEventDescriptor ,NSLog()打印如下: <NSAppleEventDescriptor: 'obj '{ 'form':'name', 'want':'dskp', 'seld':'utxt'("69671872"), 'from':'null'() }> 我想获取这些数据并将其转换为NSDictionary或NSArray ,或者有用的东西,以便我可以从中提取内容(特别是在持有“ 69671872”数字的字段之后)。 它似乎是某种形式的数组,但是我对Apple Events的了解非常有限。 有关如何执行此操作的任何想法? 这是创建上述数据的源: NSString *appleScriptSource = [NSString stringWithFormat:@"tell application\"System Events\"\n return desktop 1\n end tell"]; NSDictionary *anError; NSAppleScript *aScript = [[NSAppleScript alloc] initWithSource:appleScriptSource]; NSAppleEventDescriptor