¿Cómo verifico si hay un archivo disponible para descargar?

2

El siguiente código genera un enlace para descargar el archivo HD de un sitio todos los días, pero no sabe cómo determinar si el enlace es válido o no. ¿Cómo verifico 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 Prefix to d as text
else
    set Prefix to (d + 20000000) as text
end if

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

set x to 1
set y to ((characters 1 thru 4 of Prefix) 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 & "/" & Prefix & "/" & x & "/" & "chi/racingfocus_" & Prefix & "_" & x & "" & "_chi_2500kbps.mp4"

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

end repeat

display dialog z
    
pregunta Varela Margarita 01.11.2018 - 03:11

3 respuestas

4

Por lo general, compruebo el código HTTP y luego ejecuto desde allí. Como esto está etiquetado AppleScript, aquí hay un controlador de ejemplo que escribí:

use AppleScript version "2.4" -- Yosemite (10.10) or later
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 "Ran into issue checking server status, with error: " & serverResult with title "Server Check"
    end try
end checkStream

Después de verificar el código HTTP, puede escribir para que el script descargue el archivo.

    
respondido por el ʀ2ᴅ2 01.11.2018 - 14:41
0

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

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

(se supone que son dos - antes de head , incluso si se convirtió en un em-dash!)

Y luego desea verificar el código de estado HTTP .

Algo como esto funcionaría:

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

    # the 'tail -1' means "If there are more than one, just give me the last one"
    # which you'll need in case of redirects.
CODE=$(curl -sL --head "$URL" | awk -F' ' '/^HTTP/{print $2}' | tail -1)

case "$CODE" in
    404)
        echo "Not found: $URL"
    ;;

    200)
        echo "Found! $URL"
    ;;

    *)
        echo "Unknown Response ($CODE) for $URL"
    ;;

esac
    
respondido por el TJ Luoma 01.11.2018 - 14:27
-1

No puede saber si existe un archivo remoto a menos que intente acceder a él. Básicamente, debe intentar descargar el archivo y luego verificar si hay códigos de error devueltos.

    
respondido por el nohillside 01.11.2018 - 07:14

Lea otras preguntas en las etiquetas