如何修复此apple脚本shell脚本组合以接受引号?

如何修复此apple脚本shell脚本组合以接受引号?,shell,applescript,webhooks,spotify,ifttt,Shell,Applescript,Webhooks,Spotify,Ifttt,首先,很抱歉这是一篇很长的帖子,我尽可能简洁地解释了它。如果你觉得无聊或者其他什么,我会按照你自己的节奏来读,我会对任何回复做出回应 重要的是,我想说的是,我对脚本一无所知,而且(不是试图让自己听起来像个混蛋)不想自己学习它,因为我的大脑太油腻了,无法学习一些需要良好的记忆力、组织能力或集中力的东西,原因不明,我只想修改脚本 但我不是白痴,我可以运行终端或脚本编辑器,按照说明操作,插入东西并给出错误结果 脚本是从脚本编辑器运行的,涉及ifttt、webhooks、spotify、applescr

首先,很抱歉这是一篇很长的帖子,我尽可能简洁地解释了它。如果你觉得无聊或者其他什么,我会按照你自己的节奏来读,我会对任何回复做出回应

重要的是,我想说的是,我对脚本一无所知,而且(不是试图让自己听起来像个混蛋)不想自己学习它,因为我的大脑太油腻了,无法学习一些需要良好的记忆力、组织能力或集中力的东西,原因不明,我只想修改脚本

但我不是白痴,我可以运行终端或脚本编辑器,按照说明操作,插入东西并给出错误结果

脚本是从脚本编辑器运行的,涉及ifttt、webhooks、spotify、applescript和shellscript,但脚本是其中的重要部分,因为它是不完整的

基本上,该脚本将当前播放的spotify歌曲添加到预定义的播放列表中,效果非常好,但如果歌曲标题中有引号(单引号或双引号),它将给出错误消息(每种情况下的错误消息不同),并且不会添加这些歌曲,而且许多歌曲都有这些错误消息

所以它对我来说基本上是无用的,因为它对我来说的价值就是从应用程序外部控制spotify,就像我在看twitch一样

我试着在reddit上提问,从自由职业者网站和苹果支持论坛上雇佣一名自由职业者,人们尝试并提供了一些建议,但都不起作用,所以这是我最后尝试的网站之一,这个脚本对我来说非常重要,因为没有它我无法进行正确的音乐发现,但它已经坏了

作为背景,这是我最初一步一步地完成脚本工作的教程(对于标题中没有引号的歌曲)

这是我在脚本终端中运行的脚本

if application "Spotify" is running then
    tell application "Spotify"
        if player state is playing then
            set ArtistName to (get artist of current track)
            set SongName to (get name of current track)
        end if
    end tell
end if
do shell script " curl -X POST -H \"Content-Type: application/json\" -d '{\"value1\":\"" & songname & "\",\"value2\":\"" & ArtistName & "\"}' https://maker.ifttt.com/trigger/add/with/key/REPLACEME"
当我实际运行webhooks时,我将webhooks密钥替换为REPLACEME,但有人告诉我不要在网上共享该密钥

如果我在一首带有1个引号的歌曲上运行它,它会在脚本编辑器结果中显示

错误“sh:-c:第0行:在查找匹配的`”时出现意外的EOF” sh:-c:第1行:语法错误:文件“编号2”意外结束

如果我在一首有两个引号的歌上运行它,它会说

“错误请求”

如果我在没有引号的歌曲上运行它,它是成功的,并将歌曲添加到播放列表中,然后说

“祝贺您!您已启动添加事件”

两个来自不同网站的人独立建议我用这个代替shellscript,这是关于

do shell script " curl -X POST -H \"Content-Type: application/json\" -d '{\"value1\":\"" & quoted form of songname & "\",\"value2\":\"" & quoted form of ArtistName & "\"}' https://maker.ifttt.com/trigger/add/with/key/REPLACEME"
但它不起作用

1报价失败为

错误“sh:-c:第0行:在查找匹配的`”时出现意外的EOF” sh:-c:第1行:语法错误:文件“编号2”意外结束

2报价失败为

错误“sh:-c:第0行:意外标记附近的语法错误
('sh:-c:第0行:
curl-X POST-H“内容类型:application/json”-d'{“value1”:“'Great Fairy Fountain(来自《塞尔达传说:时间的陶笛》)-钢琴版','value2:“'Koji Kondo'”第2号

(歌曲信息就是我测试时播放的内容)

也有人建议,

set myJSONdata to "{\"value1\":\"" & SongName & "\",\"value2\":\"" & ArtistName & "\"}"
do shell script "echo curl -X POST -H \"Content-Type: application/json\" -d " & quoted form of myJSONdata & " hhttps://maker.ifttt.com/trigger/add/with/key/REPLACEME"
我不知道到底在哪里插入,但它也给出了错误消息

curl-X POST-H内容类型:application/json-d{“value1”:“Orphée Suite-6.Orphee's Return”,“value2”:“Philip Glass”}hhttps://maker.ifttt.com/trigger/add/with/key/REPLACEME"

错误“变量SongName未定义。”来自“SongName”的编号-2753

取决于我在剧本中的位置,他提出后没有回复我,所以我不知道我是否搞砸了

那个可怜的家伙花了几个小时为我在《自由撰稿人》上试了试,但他没有mac电脑,也没有applescript方面的经验,但他说applescript部分是问题,而不是shellscript,在建议引用的表单后,他试了试

if application "Spotify" is running then
    tell application "Spotify"
        if player state is playing then
            set ArtistName to (get artist of current track)
            set SongName to (get name of current track)
        end if
    end tell
end if

set delim to "\""
set {myTID, AppleScript's text item delimiters} to {AppleScript's text item delimiters, {delim}}
set myList to text items of SongName
set AppleScript's text item delimiters to myTID
set listSize to count of myList

set counter = 0

repeat with myItem in myList
    if counter < listSize
       set SongName to SongName & delim
    end if
end repeat

do shell script " curl -X POST -H \"Content-Type: application/json\" -d '{\"value1\":\"" & songname & "\",\"value2\":\"" & ArtistName & "\"}' https://maker.ifttt.com/trigger/add/with/key/REPLACEME"
如果应用程序“Spotify”正在运行,则
告诉应用程序“Spotify”
如果玩家状态正在播放,则
将ArtistName设置为(获取当前曲目的艺术家)
将SongName设置为(获取当前曲目的名称)
如果结束
结束语
如果结束
将delim设置为“\”
将{myTID,AppleScript的文本项分隔符}设置为{AppleScript的文本项分隔符,{delim}
将myList设置为SongName的文本项
将AppleScript的文本项分隔符设置为myTID
将listSize设置为myList的计数
设置计数器=0
对myList中的myItem重复
如果计数器<列表大小
将SongName设置为SongName&delim
如果结束
结束重复
执行shell脚本“curl-X POST-H\”内容类型:application/json\“-d'{\“value1\”:\”&songname&“\”,\“value2\”:\”&ArtistName&“\”}https://maker.ifttt.com/trigger/add/with/key/REPLACEME"
它给出了错误

语法错误,行尾不能跟在这个数字后面,然后在脚本中突出显示set counter=0行

我真的不想再尝试自由职业者了,因为我不喜欢里程碑付款期限的压力,也不喜欢雇佣人为我工作。当我在脚本编写方面如此缺乏经验,无法与他们讨论时,我宁愿在论坛上慢慢来


这就是我所有的信息,非常感谢您的帮助,我会回复并尝试任何建议,我可以向paypal中的一些人报销他们在工作中花费的时间,如果他们愿意的话,谢谢。

尝试添加带有
引号形式的
并明确避免双引号

if application "Spotify" is not running then return
tell application "Spotify"
    if player state is not playing then return
    set ArtistName to (get artist of current track)
    set SongName to (get name of current track)
end tell

set json to quoted form of ("{\"value1\":" & quote & escapeDoubleQuotes(SongName) & quote & ",\"value2\":" & quote & escapeDoubleQuotes(ArtistName) & quote & "}")
do shell script " curl -X POST -H \"Content-Type: application/json\" -d" & space & json & space & "https://maker.ifttt.com/trigger/add/with/key/REPLACEME"

on escapeDoubleQuotes(theString)
    set {TID, text item delimiters} to {text item delimiters, quote}
    set textItems to text items of theString
    set text item delimiters to "\\\""
    set quotedString to textItems as text
    set text item delimiters to TID
    return quotedString
end escapeDoubleQuotes

最后一个错误很明显。请查看所有其他
set…
行。是否有等号?在最后一个代码段中,将
set counter=0
替换为
set counter=0
I将set counter=0替换为set counter=0,将counter设置为0。它对没有引号或双引号的歌曲发出了“错误请求”,并且出现错误“sh:-c:第0行:在查找匹配的`''时出现意外的EOF sh:-c:第1行:语法错误:单引号的“意外文件结尾”编号2。我在哪里查找=符号