Disposizione di youtube-dl in automator tramite applescript

2

Spero di creare un'applicazione per l'automazione che richieda l'input da parte dell'utente (es. URL di YouTube) e la scarichi utilizzando youtube- dl (già installato tramite Homebrew). Dopo questo, sto cercando di usare il comando youtube-dl URL_HERE -e che recupera il titolo del video. Sto sperando di fare una notifica che dice "scaricato con successo TITLE_VIDEO" dopo che è stato scaricato con successo (se viene scaricato con successo). Sto usando il comando "Run Applescript" di automator.

Questo è tutto ciò che ho ottenuto finora:

display dialog "What is the youtube URL you want to download?" default answer ""
set answer to text returned of result

tell application "Terminal"
    activate
    do script with command "youtube-dl -f 140 " & answer
end tell

display notification "Successfully downloaded " & TITLE_HERE sound name "Blow"

Sono nuovo di applecript, quindi solo le funzioni di base / quelle che possono essere spiegate facilmente.

Quello che sto pensando è di eseguire il comando terminale youtube-dl URL_HERE -e che restituirà il titolo del video (TITLE) e impostarlo su una variabile e quindi passare tale variabile a display notification

    
posta William 11.12.2015 - 04:45
fonte

2 risposte

1

Bello - un'interfaccia utente semplice come quella potrebbe essere molto utile in molte situazioni!

Prova questo:

display dialog "URL to fetch?" default answer ""
set theUrl to (text returned of result)

--> get file
do shell script "cd /tmp/; /usr/local/bin/youtube-dl " & theUrl

--> get title
set theTitle to do shell script "/usr/local/bin/youtube-dl -e " & theUrl

display notification "Fetched " & theTitle sound name "Blow"
delay 1 --> avoid quit before notice

Purtroppo lo script youtube-dl non ha effettivamente scaricato il video quando si utilizza il flag -e, (e si è verificato un errore durante il tentativo di utilizzare l'opzione --exec CMD).

Finito per eseguire il comando due volte; Prima scarica in / tmp, quindi ottieni il titolo.

Potrebbe anche usare l'id di processo (pid) per tenere traccia dell'avanzamento, ecc.:)

command 2>/dev/null & pid=$!

Aggiornamento: Non sono riuscito a ottenere l'output di alcuni comandi tramite il applescript, come "nettop". Ci sono probabilmente dei modi per risolverlo. Ecco il mio tentativo sciatto di implementare un pid checking ..:)

set question to display dialog "URL to fetch?" default answer "" buttons {"Cancel", "Open in Browser", "Download"} default button 3
set pageURL to (text returned of result)
if pageURL is "" then return "No URL"
set choice to (button returned of question)

if choice is "Download" then
    try
        set pid to do shell script "cd /tmp/; /usr/local/bin/youtube-dl --newline " & pageURL & " > /tmp/vidstatus 2>&1 & echo $!"
        delay 1
        repeat while ((do shell script "kill -0 " & pid) is "") -- check if pid is still responding
            display dialog "Status: " & (do shell script "tail -n1 /tmp/vidstatus") -- display last line of output
        end repeat
    on error
        display dialog "Download complete!" -- eh, success, hopefully :) 
    end try

else if choice is "Open in Browser" then
    try
        set videoURL to do shell script "/usr/local/bin/youtube-dl -g " & pageURL
        open location videoURL -- browser can stream and save file
    on error
        display dialog "Download aborted!"
    end try
end if
    
risposta data 11.12.2015 - 07:52
fonte
0

Devi controllare il valore di ritorno dello script della shell. Vedi Documentazione di Apple su do shell nella sezione Ottenere una risposta.

How does do shell script report errors?

All shell commands return an integer status when they finish: zero means success; anything else means failure. If the script exits with a non-zero status, do shell script throws an AppleScript error with the status as the error number.

set success to do shell script "cd /tmp/; /usr/local/bin/youtube-dl " & theUrl

Quindi puoi controllare la variabile success .

if success is equal to 0

Probabilmente puoi anche utilizzare try e on error per verificare se il download ha funzionato.

try
    do shell script "cd /tmp/; /usr/local/bin/youtube-dl " & theUrl
on error
    -- show error message
end try
    
risposta data 11.12.2015 - 11:44
fonte

Leggi altre domande sui tag