2 votes

Comment vérifier si un fichier est disponible au téléchargement ?

Le code suivant génère chaque jour un lien pour télécharger le fichier HD d'un site, mais il ne sait pas comment déterminer si le lien est valide ou non. Comment puis-je vérifier la validité du lien ?

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

0 votes

Bonjour Varela Je suis désolé, mais je ne comprends pas vraiment ce que vous demandez. Pouvez-vous essayer de préciser un peu plus clairement la partie pour laquelle vous avez besoin d'aide ?

0 votes

@TJLuoma J'ai (j'espère) rendu la question de l'OP plus claire.

2 votes

Vous pouvez essayer de télécharger le fichier et s'il se télécharge, le lien est valide.

4voto

ʀ2ᴅ2 Points 996

J'ai l'habitude de vérifier le code HTTP et de poursuivre à partir de là. Puisqu'il s'agit d'AppleScript, voici un exemple de gestionnaire que j'ai écrit :

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

Après avoir vérifié le code HTTP, vous pourriez écrire pour le script pour télécharger le fichier.

0 votes

Belle solution. +1

0 votes

+1 mais parfois les sites web sont stupides et n'affichent pas les codes d'erreur corrects. Une meilleure solution serait de tester si un fichier réel est disponible au téléchargement.

0voto

moodforaday Points 2633

Si le serveur le supporte, vous devriez pouvoir faire quelque chose comme ceci :

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

(C'est censé être deux - avant head même s'il a été transformé en em-dash !)

Et ensuite vous voulez vérifier le Code d'état HTTP .

Quelque chose comme ça pourrait fonctionner :

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

2 votes

Ce serait une assez bonne réponse si vous n'aviez pas fourni la solution dans un langage de script complètement différent de celui que le PO utilise, sans aucun détail sur la façon d'adapter ce code dans le langage de son choix.

0 votes

C'est vrai. Je n'ai pas reconnu qu'il s'agissait d'AppleScript à l'époque où je l'ai lu (et je n'ai pas vu non plus la balise qui est là maintenant).

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X