AppleScript не может получить цитируемую форму ответа API - PullRequest
0 голосов
/ 16 декабря 2018

Я сделал сегодня AppleScript ранее, который отображает количество подписчиков YouTube для Geektools, но я хотел, чтобы его было проще использовать людям, и попытался заставить его работать без имени файла (например, взяв subcount-PewDiePie.scpt и выводит подсчет PewDiePie), и я сделал ввод имени из имени файла рабочим, но он дает мне ошибки, когда я пытаюсь извлечь число из ответа API

работающего (исходный код)

set apiResponse to (do shell script "curl -s 'https://www.googleapis.com/youtube/v3/channels?part=statistics&forUsername=PewDiePie&fields=items%2Fstatistics%2FsubscriberCount&key=AIzaSyAEQGj2ZcDrTU0ZqzteD8eDVJwB9cpmvEo'")

on returnNumbersInString(inputString)
    set s to quoted form of inputString
    do shell script "sed s/[a-zA-Z\\']//g <<< " & s
    set dx to the result
    set numlist to {}
    repeat with i from 1 to count of words in dx
        set this_item to word i of dx
        try
            set this_item to this_item as number
            set the end of numlist to this_item
        end try
    end repeat
end returnNumbersInString

returnNumbersInString(apiResponse)

Неработающий настраиваемый код

set channelName to path to me as text
set oldDelims to AppleScript's text item delimiters
set AppleScript's text item delimiters to {"subcount-"}
set nameFilter to text items of channelName
set channelName to item 2 of nameFilter

set AppleScript's text item delimiters to {"."}
set nameFilter to the text items of channelName
set channelName to item 1 of nameFilter

set curlLink to "https://www.googleapis.com/youtube/v3/channels?part=statistics&forUsername=" & channelName & "&fields=items%2Fstatistics%2FsubscriberCount&key=AIzaSyAEQGj2ZcDrTU0ZqzteD8eDVJwB9cpmvEo"
set curlCommand to "curl -s " & (quoted form of curlLink)

set apiResponse to {do shell script curlCommand}
on returnNumbersInString(inputString)
    set s to quoted form of inputString
    do shell script "sed s/[a-zA-Z\\']//g <<< " & s
    set dx to the result
    set numlist to {}
    repeat with i from 1 to count of words in dx
        set this_item to word i of dx
        try
            set this_item to this_item as number
            set the end of numlist to this_item
        end try
    end repeat
end returnNumbersInString

returnNumbersInString(apiResponse)

Каждый раз, когда я делаю второй, выдается ошибка

Can’t get quoted form of {"{
 \"items\": [
  {
   \"statistics\": {
    \"subscriberCount\": \"76957805\"
   }
  }
 ]
}"}.

Сбой сразупосле получения информации с веб-сайта, которая не имеет никакого смысла, поскольку ни один из кодов, кроме того, как он получил ссылку на веб-сайт, не был изменен, кто-нибудь может помочь мне решить эту проблему

1 Ответ

0 голосов
/ 16 декабря 2018

Вы заключили свою команду do shell script в фигурные скобки здесь:

set apiResponse to {do shell script curlCommand}

Следовательно, apiResponse теперь является списком, содержащим строку JSON, а не просто строку JSON.Удалите фигурные скобки, чтобы строка гласила:

set apiResponse to do shell script curlCommand
...