Envolviendo youtube-dl en automator mediante Applecript

2

Espero crear una aplicación de automatización que solicite al usuario la entrada (es decir, url de YouTube) y la descargue utilizando youtube- dl (ya instalado a través de Homebrew). Después de esto, estoy tratando de usar el comando youtube-dl URL_HERE -e que recupera el título del video. Espero hacer una notificación que diga "TITLE_VIDEO descargado correctamente" después de que se descargue correctamente (si se descarga correctamente). Estoy usando el comando "Ejecutar Applescript" de automator.

Esto es todo lo que he conseguido hasta ahora:

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"

Soy nuevo en Applecript, así que solo las funciones básicas / que se pueden explicar fácilmente.

Lo que estoy pensando es hacer el comando de terminal youtube-dl URL_HERE -e que devolverá el título del video (TÍTULO), y establecerlo en una variable y luego pasar esa variable a display notification

    
pregunta William 11.12.2015 - 04:45

2 respuestas

1

Agradable, ¡una simple interfaz de usuario como esa podría ser muy útil en muchas situaciones!

Prueba esto:

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

Lamentablemente, la secuencia de comandos youtube-dl no descargó el video cuando usó la marca -e (y se produjo un error al intentar usar la opción --exec CMD).

Terminé simplemente ejecutando el comando dos veces; Primero descargue a / tmp, luego obtenga el título.

También podría usar el ID de proceso (pid) para rastrear el progreso, etc. :)

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

Actualizar: No pude obtener la salida de ciertos comandos a través de applescript, como 'nettop'. Probablemente hay maneras de solucionarlo. Aquí está mi intento descuidado de implementar una comprobación pid ... :)

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
    
respondido por el EO2 11.12.2015 - 07:52
0

Debe verificar el valor de retorno del script de shell. Consulte Documentación de Apple sobre do shell en la sección Cómo obtener una respuesta.

  

¿Cómo informan los errores de shell shell?

     

Todos los comandos de shell devuelven un estado entero cuando terminan: cero significa éxito; cualquier otra cosa significa fracaso. Si el script sale con un estado distinto de cero, do shell script emite un error de AppleScript con el estado como número de error.

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

Entonces, puedes verificar la variable success .

if success is equal to 0

Probablemente también puedas usar try y on error para verificar si la descarga funcionó.

try
    do shell script "cd /tmp/; /usr/local/bin/youtube-dl " & theUrl
on error
    -- show error message
end try
    
respondido por el orkoden 11.12.2015 - 11:44

Lea otras preguntas en las etiquetas