2 votos

Envolver youtube-dl en automator mediante applescript

Tengo la esperanza de hacer una aplicación automator que pide al usuario de entrada (es decir, youtube url), y lo descarga utilizando youtube-dl (ya instalado a través de Homebrew). Después de esto, estoy tratando de utilizar el comando youtube-dl URL_HERE -e que busca el título del vídeo. Tengo la esperanza de hacer una notificación que dice "descargado con éxito TITLE_VIDEO" después de que se descarga con éxito (si se descarga con éxito). Estoy usando el comando "Run 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 applescript, así que sólo funciones básicas/que se puedan explicar fácilmente.

Lo que estoy pensando es hacer el comando de terminal youtube-dl URL_HERE -e que devolverá el título del vídeo (TITLE), lo asignará a una variable y luego pasará esa variable a display notification

1voto

EO2 Puntos 34

Una interfaz de usuario tan sencilla 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

Desafortunadamente el youtube-dl script no descargó realmente el vídeo cuando se utilizó la bandera -e, (y se produjo un error al intentar utilizar la opción --exec CMD).

Terminé ejecutando el comando dos veces; Primero descargar a /tmp, a continuación, obtener el título.

También podría utilizar el identificador de proceso (pid) para realizar un seguimiento del progreso, etc. :)

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

Actualización: No pude obtener la salida de ciertos comandos a través de applescript, como 'nettop'. Probablemente hay maneras de arreglarlo. Aquí está mi descuidado intento 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

0 votos

Esto es exactamente lo que estaba buscando. Gracias. Sé que puedo personalizar la notificación desde aquí usando la documentación. ¿Puedes explicar el pid/track progress? Soy nuevo en applescript, así que no estoy seguro de cómo podría implementar eso.

0 votos

De nada. Ten en cuenta que no es una solución muy sólida/rápida :) Traté de leer los datos de red recibidos para el proceso de descarga y, de alguna manera, alimentar que como una actualización continua de applescript diálogo / notificación.. No estoy seguro de cómo hacer cualquiera de los dos ;) youtube-dl tiene una clase de Python que podría ser conveniente utilizar.

0voto

Norman Ramsey Puntos 136

Tienes que comprobar el valor de retorno del shell script. Véase Documentación de Apple sobre do shell en la sección Obtener una respuesta.

¿Cómo informa de errores el shell script?

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

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

A continuación, puede comprobar el success variable.

if success is equal to 0

También puede utilizar try y on error para comprobar si la descarga ha funcionado.

try
    do shell script "cd /tmp/; /usr/local/bin/youtube-dl " & theUrl
on error
    -- show error message
end try

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X