2 votos

¿Cómo puedo verificar si un archivo está disponible para descargar?

El siguiente código genera un enlace para descargar el archivo HD desde un sitio todos los días, pero no sabe cómo determinar si el enlace es válido o no. ¿Cómo puedo verificar la validez del enlace?

set z to ""
set d to tid(tid(short date string of (current date), "/"), "")
set w to weekday of (current date)
set r to 10

if d > 20000000 then
    set Prefijo to d as text
else
    set Prefijo to (d + 20000000) as text
end if

on tid(entrada, delim)
    set {oldTID, my text item delimiters} to {my text item delimiters, delim}
    if class of entrada is list then
        set salida to entrada as text
    else
        set salida to text items of entrada
    end if
    set my text item delimiters to oldTID
    return salida
end tid

set x to 1
set y to ((characters 1 thru 4 of Prefijo) as string)

repeat with i from 1 to r

    if i < 10 then
        set x to "0" & i
    else
        set x to i
    end if

    set c to "http://streaming.hkjc.edgesuite.net/hdflash/racingfocus/" & y & "/" & Prefijo & "/" & x & "/" & "chi/racingfocus_" & Prefijo & "_" & x & "" & "_chi_2500kbps.mp4"

    set z to z & c & "" & return & return
    set i to i + 1

end repeat

display dialog z

0 votos

Hola Varela... Lo siento, pero realmente no entiendo lo que estás pidiendo. ¿Puedes intentar ser un poco más claro con qué parte necesitas ayuda?

0 votos

@TJLuoma (con suerte) he hecho la pregunta del OP más clara.

2 votos

Puedes intentar descargar el archivo y si se descarga, el enlace es válido.

4voto

Darth_Vader Puntos 138

Normalmente reviso el código HTTP y luego sigo desde allí. Dado que esto está etiquetado como AppleScript, aquí hay un ejemplo de manejador que escribí:

use AppleScript version "2.4" -- Yosemite (10.10) o posterior
use scripting additions

set foundMP4 to my checkStream(c)

on checkStream(passedStream)
    try
        set serverCommand to "curl -o /dev/null -Iw '%{http_code}' " & passedStream
        set serverResult to do shell script serverCommand
        if serverResult does not start with "2" then
            return false
        else
            return true
        end if
    on error serverResult
        display dialog "Se encontró un problema al verificar el estado del servidor, con error: " & serverResult with title "Verificación del servidor"
    end try
end checkStream

Después de verificar el código HTTP podrías escribir para que el script descargue el archivo.

0 votos

Buena solución. +1

0 votos

+1 pero a veces los sitios web son tontos y no muestran los códigos de error correctos. Una solución mejor sería probar si hay un archivo real disponible para descargar.

0voto

moodforaday Puntos 2633

Si el servidor lo admite, deberías poder hacer algo así:

curl -sfLS --head http://www,whatever.tld/this/path/here.ext

(¡Se supone que deben haber dos - antes de head incluso si se convierten en un guion largo!)

Después, querrás verificar el código de estado HTTP.

Algo así funcionaría:

URL="http://streaming.hkjc.edgesuite.net/hdflash/racingfocus/2018/20181101/01/chi/racingfocus_20181101_01_chi_2500kbps.mp4"

    # el 'tail -1' significa "Si hay más de uno, dame solo el último"
    # lo cual necesitarás en caso de redirecciones.
CODE=$(curl -sL --head "$URL" | awk -F' ' '/^HTTP/{print $2}' | tail -1)

case "$CODE" in
    404)
        echo "No encontrado: $URL"
    ;;

    200)
        echo "¡Encontrado! $URL"
    ;;

    *)
        echo "Respuesta Desconocida ($CODE) para $URL"
    ;;

esac

2 votos

Esta sería una respuesta bastante buena si no hubieras proporcionado la solución en un lenguaje de script completamente diferente al que está utilizando la persona que pregunta, sin detalles sobre cómo adaptar ese código a su idioma de elección.

0 votos

Verdad. En ese momento no lo reconocí como AppleScript cuando lo leí (ni vi la etiqueta que está ahí ahora).

-1voto

No se puede saber si un archivo remoto existe a menos que intentes acceder a él. Básicamente, necesitas intentar descargar el archivo y luego verificar si se devuelven códigos de error.

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