帮助AppleScript cURL文件上传

时间:2010-12-03 14:40:00

标签: file-upload curl applescript

这是一个示例CURL,这是我用来尝试实现文件的自动上传。

curl http://testflightapp.com/api/builds.json 
  -F file=@testflightapp.ipa 
  -F api_token='your_api_token' 
  -F team_token='your_team_token' 
  -F notes='This build was uploaded via the upload API' 
  -F notify=True 
  -F distribution_lists='Internal, QA'

我制作了一个AppleScript,要求提供“注释”,文件以及是否通知:

property api_token : "SECRET"
property team_token : "SECRET"
property notify : "False"
property pathToIPA : ""
property whats_new : ""

set whats_new_prompt to (display dialog "What's new in this version?" default answer "")
set whats_new to text returned of whats_new_prompt

set pathToIPA to (choose file with prompt "Select IPA")

set pathToIPA to (pathToIPA as text)

set notify_question to display dialog "Notify testers?" buttons {"No", "Yes"} default button 2
set notify_answer to button returned of notify_question

if notify_answer is equal to "No" then
    set notify to "False"
end if

if notify_answer is equal to "Yes" then
    set notify to "True"
end if

uploadIPA(api_token, team_token, notify, whats_new, pathToIPA)

on uploadIPA(api_token, team_token, notify, whats_new, pathToIPA)
    set TestFlightAPIUploadScript to "/usr/bin/curl" & ¬
        " http://testflightapp.com/api/builds.json " & ¬
        " –F " & "file=" & pathToIPA & ¬
        " –F " & "api_token=" & api_token & ¬
        " –F " & "team_token=" & team_token & ¬
        " –F " & "notes=" & whats_new & ¬
        " –F " & "notify=" & notify

    set UploadResponse to do shell script TestFlightAPIUploadScript
    return UploadResponse
    if UploadResponse contains "Status: 200 OK" then
        return "Success!"
    else
        return "Failure!"
    end if
end uploadIPA

我似乎遇到的问题是文件位置。我不确定,但我认为它返回了错误的格式:而不是/为路径。

提前感谢任何建议。

1 个答案:

答案 0 :(得分:3)

要获取/Users/you/file形式的POSIX路径而不是Macintosh HD:Users:you:file的经典Mac风格路径,您可以使用POSIX path ofset pathToIPA to POSIX path of pathToIPA。但是,按照重要性的顺序,您还应该修复其他一些事项。

  1. quoted form of用于进入shell的任何用户输入。否则,如果用户写It's good.,shell将看到文字'。更糟糕的是,有人可以写; rm -rf ~,然后你就会受到冲击。

  2. 每个变量都不需要property;他们真的是常数。

  3. 您的命名不一致。很高兴看到these_varstheseVarsTheseVars,而不是全部三个。但是,这是一个相当小的一点。一个类似的小点是你可以删除一些额外的变量,虽然这又是一个样式点。

  4. 我不知道你有什么意思,但是 return UploadResponse之后的,你有更多的代码。该代码将无法运行,因为您刚刚返回。确保您只留下其中一个代码路径!

  5. 你需要做#1;其他三件事绝对是可选的。即便如此,这也是我重写代码的方式:

    property api_token : "SECRET"
    property team_token : "SECRET"
    
    set whats_new to text returned of ¬
        (display dialog "What's new in this version?" default answer "")
    set path_to_IPA to POSIX path of (choose file with prompt "Select IPA")
    set notify_answer to button returned of ¬
        (display dialog "Notify testers?" buttons {"No", "Yes"} default button 2)
    if notify_answer is equal to "No" then
        set notify to "False"
    else if notify_answer is equal to "Yes" then
        set notify to "True"
    else
        error "\"Notify testers\" check failed."
    end if
    
    upload_IPA(api_token, team_token, notify, whats_new, path_to_IPA)
    
    on upload_IPA(api_token, team_token, notify, whats_new, path_to_IPA)
        set test_flight_API_upload_script to "/usr/bin/curl" & ¬
            " http://testflightapp.com/api/builds.json" & ¬
            -- add `@` to refer to the file itself not its path
            " -F " & "file=@" & quoted form of path_to_IPA & ¬ 
            " -F " & "api_token=" & quoted form of api_token & ¬
            " -F " & "team_token=" & quoted form of team_token & ¬
            " -F " & "notes=" & quoted form of whats_new & ¬
            " -F " & "notify=" & quoted form of notify
    
        set upload_response to do shell script test_flight_API_upload_script
        return upload_response
        -- Delete the above line or this if
        if upload_response contains "Status: 200 OK" then
            return "Success!"
        else
            return "Failure!"
        end if
    end upload_IPA