如何让这个AppleScript工作?

时间:2014-11-05 12:50:54

标签: node.js applescript osx-yosemite automator url-shortener

因此,这个小转移的目标是能够选择一段包含URL的文本,并让OS X使用goo.gl URL缩短服务将其转换为短URL。

为此,我使用Automator创建了一项服务,该服务接受文本输入并将该输入传递给"运行AppleScript"行动。下面列出了AppleScript。

我已经安装了node.js v0.10.33并且还安装了一个名为json(http://trentm.com/json/)的节点包

只要我不将输出传输到json节点app,下面的脚本就可以正常工作 带有管道到json节点应用的curl命令在终端中运行良好。

我的猜测是shell环境关闭,但我不知道如何调查它。 有什么帮助吗?

-- shorten URLs via goo.gl URL shortener
-- syntax derrived from Scott Lowe @ blog.scottlowe.org

on run {input, parameters}

    set curlCommand to "curl https://www.googleapis.com/urlshortener/v1/url -H 'Content-Type: application/json' -d '{\"longUrl\": \"" & input & "\"}' | /usr/local/bin/json id"

    set jsonResult to (do shell script curlCommand)

    return jsonResult
end run

2 个答案:

答案 0 :(得分:1)

为什么你有"返回curlCommand"?不是你真的想要"返回jsonResult"?

不可否认,我对json一无所知,但curl命令的结果是一个字符串,我知道如何在applescript中解析一个字符串。这是我如何编写将其解析为字符串的代码。注意我使用此网页的网址作为"输入" ...

set input to "http://stackoverflow.com/questions/26757656/how-to-get-this-applescript-working"

set curlCommand to "curl https://www.googleapis.com/urlshortener/v1/url -H 'Content-Type: application/json' -d '{\"longUrl\": \"" & input & "\"}' | grep '\"id\"'"
set jsonResult to do shell script curlCommand
set shortURL to text 9 thru -2 of jsonResult
return shortURL

答案 1 :(得分:1)

在Applescript中处理JSON的一个很棒的工具是免费的App JSON Helper(App Store)。它将JSON转换为Applescript词典。所以我的回答非常(非常)类似于@ regulus6633帖子,但没有文本解析JSON:

set input to "http://stackoverflow.com/questions/26757656/how-to-get-this-applescript-working"

-- Note: without piping to grep at the end!
set curlCommand to "curl https://www.googleapis.com/urlshortener/v1/url -H 'Content-Type: application/json' -d '{\"longUrl\": \"" & input & "\"}'"

-- getting the full JSON answer
set jsonResult to do shell script curlCommand

-- using JSON Helper to translate JSON to Applescript dictionary
tell application "JSON Helper"
    set shortURL to |id| of (read JSON from jsonResult)
end tell

return shortURL

问候,迈克尔/汉堡