2010-12-03 37 views
2

Voici un exemple de CURL, que j'utilise pour essayer de télécharger automatiquement un fichier.Aide pour le téléchargement du fichier cURL AppleScript

curl http://testflightapp.com/api/builds.json 
    -F [email protected] 
    -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' 

J'ai fait un AppleScript qui demande « notes », le fichier et si vous souhaitez notifier:

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 

Là où je semble avoir des problèmes est l'emplacement du fichier. Je ne suis pas sûr, mais je pense qu'il retourne le mauvais format avec: au lieu de/pour le chemin.

Merci d'avance pour tout conseil.

Répondre

3

Pour obtenir un chemin de la forme Posix /Users/you/file au lieu du chemin de style classique pour Mac Macintosh HD:Users:you:file, vous pouvez utiliser POSIX path of: set pathToIPA to POSIX path of pathToIPA. Cependant, il y a quelques autres choses que vous devriez corriger, par ordre d'importance.

  1. Utilisez quoted form of pour toute entrée de l'utilisateur qui va dans le shell. Sinon, si l'utilisateur écrit It's good., le shell verra le littéral '. Pire, quelqu'un pourrait écrire ; rm -rf ~, et alors vous seriez arrosé. Vous n'avez pas besoin de property pour chaque variable; ils sont vraiment pour les constantes.

  2. Vous n'êtes pas cohérent avec votre nom. Ce serait bien de voir these_vars, theseVars, ou TheseVars, pas tous les trois. Un point plutôt mineur, cependant. Un point tout aussi mineur est que vous pouvez supprimer des variables supplémentaires, bien qu'il s'agisse d'un point de style. Je ne sais pas ce que vous vouliez avoir, mais aprèsreturn UploadResponse, vous avez plus de code. Ce code ne fonctionnera pas, parce que vous venez de rentrer. Assurez-vous de ne laisser que l'un de ces chemins de code!

Vous devez faire # 1; les trois autres choses sont définitivement facultatives. Même ainsi, voici comment je réécrirais le code:

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" & ¬ 
     " -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 
+1

Merci pour toutes les informations et le script révisé. Il semble fonctionner au début, mais rien n'est téléchargé. Tout ce que je finis par voir la sortie des résultats est l'ensemble du script, qui semble maintenant correct. Je ne reçois aucune erreur cette fois. Est-ce l'arrêt prématuré? Merci encore pour votre aide. – runmad

+0

@Canada: Oups, c'est de ma faute. Je ne pouvais pas exécuter le script shell, bien sûr, donc je l'ai dit de retourner test_flight_API_upload_script' comme la seule façon de vérifier le résultat, mais (bien sûr) * vous * ne le voulez pas :-) à présent. –

+0

Ah, super. Hehe, désolé, je suis un débutant AppleScript total! – runmad