[RESOLU] verifer existance images distant

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] verifer existance images distant

Re: verifer existance images distant

par Jefekoi » 05 déc. 2020, 21:37

Bon j'ai trouvé
1) dans les deux premiers liens il y a l'année
/2020/
/2019/ (pour l'archive)
et le troisième il n'y a pas d'année mais je récupère de la même manière ;)

Re: verifer existance images distant

par Jefekoi » 05 déc. 2020, 09:47

Bonjour,

Le programme fonctionne très bien merci beaucoup Naroth d'avoir pris du temps pour moi. (sauf pour internet explorer mais là ...)

J'ai juste une petite question,

Je voudrais si c'est possible une fois que le script à fait son boulot, j'aimerais savoir quel lien a t-il pris ? (version callback)
lienWebCam
lienArchive
lienError

C'est pour l'associer à un texte (dans un div) (Webcam archives ou pas ?)

lienWebCam="Webcam en direct"
lienArchive ="Images d'archives"
lienError= "Webcam en maintenance"

Re: verifer existance images distant

par Jefekoi » 04 déc. 2020, 18:53

Je viens de mettre en œuvre ton script callback, il me va super bien, il y a juste cette histoire d'actualiser toute les 30mn qui me pose problème,

Mais je viens de trouver :)
J'ai supprimé setInterval(checkImages, 9000)

Et je l'ai mis dans 2 conditions :)



<SCRIPT LANGUAGE="JavaScript">
checkImages();
function HeureCheckEJS()
{
krucial = new Date;
heure = krucial.getHours();
min = krucial.getMinutes();
sec = krucial.getSeconds();
jour = krucial.getDate();
if (jour<10)
jour="0"+jour;
mois = krucial.getMonth();
if (mois<10)
mois="0"+mois;
annee = krucial.getFullYear();
if (sec < 10)
sec0 = "0";
else
sec0 = "";
if (min < 10)
min0 = "0";
else
min0 = "";
if (heure < 10)
heure0 = "0";
else
heure0 = "";
DinaHeure = '<strong><span style="color: #ff0000;">' + heure0 + heure + "<strong></span>:" + min0 + min + ":" + '<strong><span style="color: #ff0000;">' + sec0 + sec +'<strong></span>';
Minute= min0 + min;
Seconde=sec0 + sec;
which = DinaHeure
if (document.getElementById){
document.getElementById("ejs_heure").innerHTML="<h3>"+which+"</h3>";

if (Minute=="46" && Seconde<="01") checkImages();
if (Minute=="35" && Seconde<="01") checkImages();

}
setTimeout("HeureCheckEJS()", 1000)
}
window.onload = HeureCheckEJS;
</SCRIPT>

Re: verifer existance images distant

par Jefekoi » 04 déc. 2020, 17:58

Merci Naroth,

Oui pour l'heure je ne peux pas utiliser la function setInterval(printDate, 5000) car l'image change uniquement à une heure fixe ( exemple 17:01 et 17h31)

Pour l'histoire de la version je ne sais pas comment le savoir :)

Re: verifer existance images distant

par Naroth » 04 déc. 2020, 17:29

Bonjour,

Pour exécuter une fonction régulièrement je te conseille de regarder du côté de setInterval

On s'en sert de la façon suivante
https://jsfiddle.net/rz8bsj1g/
function printDate() {
    let date = new Date();
    console.log(date.toUTCString())
}

// Appelle la fonction printDate toutes les 5 secondes
setInterval(printDate, 5000)


Voici une proposition à adapté a ton cas, mais ne sachant pas si tu utilises les callbacks ou les promesses voici les deux versions

Version avec callback : https://jsfiddle.net/fnj98epr/1/
Version avec promesses : https://jsfiddle.net/u7kjhm3v/1/

Re: verifer existance images distant

par Jefekoi » 03 déc. 2020, 06:53

Bonjour,

Personne pour m'aider ?

Ce que je cherche à faire :
1- J'ai le lien d'une webcam, ce lien affiche une image (2020)
2) Un deuxième lien image "d'archives" si la webcam ne fonctionne pas, même date sauf que c'est l'année précédente (2019)
3) et si cette deuxième ne fonctionne pas (c'est du vécu) je met une image de mon site (précisant qu'elle est en panne)

Et pour corser le tout les images changent toutes les 30 mn

Ce que je n'arrive pas à faire ce sont les 3 conditions (en général) les scripts existant : soit le lien fonctionne (TRUE) ou soit il ne fonctionne pas (FALSE) je trouve pas la troisième condition..

J'ai essayer en PHP mais ce n'est pas recommander pour cette situation

Je vois que du Javascript ..

Merci pour votre aide

Bonne journée

Re: verifer existance images distant

par Jefekoi » 30 nov. 2020, 20:39

Tu vas peut être m'aider

En faite je voudrais actualiser l'image toute les 30mn

J'ai fait ceci avec le premier code (regardes les 2 conditions)

<SCRIPT LANGUAGE="JavaScript">
function HeureCheckEJS()
{
krucial = new Date;
heure = krucial.getHours();
min = krucial.getMinutes();
sec = krucial.getSeconds();
jour = krucial.getDate();
mois = krucial.getMonth()+1;
annee = krucial.getFullYear();
if (sec < 10)
sec0 = "0";
else
sec0 = "";
if (min < 10)
min0 = "0";
else
min0 = "";
if (heure < 10)
heure0 = "0";
else
heure0 = "";
DinaHeure = '<strong><span style="color: #ff0000;">' + heure0 + heure + "<strong></span>:" + min0 + min + ":" + '<strong><span style="color: #ff0000;">' + sec0 + sec +'<strong></span>';
Minute= min0 + min;
Seconde=sec0 + sec;
if (Minute==05 && Seconde<=01) { .... IL FAUDRAIT METTRE un appel de function pour qu'il vérifie et affiche l'image .... ;}
if (Minute==35 && Seconde<=01) {testImage(urls[1], record);}
which = DinaHeure
if (document.getElementById){
document.getElementById("ejs_heure").innerHTML=which;
}
setTimeout("HeureCheckEJS()", 1000)
}
window.onload = HeureCheckEJS;
</SCRIPT>

Mais je n'obtiens pas grand chose de bon ..

Re: verifer existance images distant

par Jefekoi » 30 nov. 2020, 20:25

Bonjour,

Merci Naroth super ton deuxième code.
J'adhère , je vais essayer de l'adapter à mon programme, je vais peut être mieux m'en sortir qu'avec le premier (je m'arrache les cheveux depuis des jours) :)

Re: verifer existance images distant

par Naroth » 27 nov. 2020, 16:16

Bonjour,


La première solution la plus "simple" est d'ajouter un deuxième callback en paramètre qui sera appelé quand la photo n'est pas trouvé
J'ai modifié ton exemple : https://jsfiddle.net/uhbf60z5/3/
function testImage(url, onSuccessCallback, onErrorCallback, timeout) {
    timeout = timeout || 5000;
    var timedOut = false, timer;
    var img = new Image();
    img.onerror = img.onabort = function() {
        if (!timedOut) {
            clearTimeout(timer);
            onErrorCallback();
        }
    };
    img.onload = function() {
        if (!timedOut) {
            clearTimeout(timer);
            onSuccessCallback(url, "success");
        }
    };
    img.src = url;
    timer = setTimeout(function() {
        timedOut = true;
        onErrorCallback();
    }, timeout); 
}
    

function record(url, result) {
    document.body.innerHTML += "<span class='" + result + "'>" + 
        result + ": " + url + "</span><br>";
}

testImage("http://www.cnn.com/foo.jpg", record, () => {
	testImage("http://photos.smugmug.com/photos/invalid344291068_HdnTo-Ti.jpg", record, () => {
		testImage("http://photos.smugmug.com/photos/344291068_HdnTo-Ti.jpg", record, () => {
  		testImage("https://www.google.com/images/srpr/logo3w.png", record, () => {
    		console.log("error")
  		}); 
		});
  });
});
En revanche si tu as beaucoup d'image à vérifier ça peut vite rendre le code très lourd à lire

Si tu es intéressé par une version plus simple à lire on peut utilisé les promesses
https://jsfiddle.net/hjc7pofn/13/
function testImage(url, timeout) {
		return new Promise((resolve) => {  
      timeout = timeout || 5000;
      var timedOut = false, timer;
      var img = new Image();
      img.onerror = img.onabort = function() {
        if (!timedOut) {
          clearTimeout(timer);
          resolve(false);
        }
      };
      img.onload = function() {
        if (!timedOut) {
          clearTimeout(timer);
          resolve(url)
        }
      };
      img.src = url;
      timer = setTimeout(function() {
        timedOut = true;
        resolve(false)
      }, timeout); 
    })
}
    

function record(url, result) {
    document.body.innerHTML += "<span class='" + result + "'>" + 
        result + ": " + url + "</span><br>";
}

(async() => {
	
  let images = [
      "http://www.cnn.com/foo.jpg",
      "http://photos.smugmug.com/photos/invalid344291068_HdnTo-Ti.jpg", 
      "http://photos.smugmug.com/photos/344291068_HdnTo-Ti.jpg", 
      "https://www.google.com/images/srpr/logo3w.png"
    ]
        
    
		for await( let img of images ) {
    	
      let image = await testImage( img )
      
      if( image ) {
      	record(image, "success");
        break;
      }
      else {
      	record(img, "error")
      }
    }    
})();

verifer existance images distant

par Jefekoi » 25 nov. 2020, 08:04

Bonjour,

J'ai un script webcam sur mon site et j'ai un petit souci si vous pouvez m'aider je ne connais pas trop le langage script

il cherche le premier lien photo (1)
si il ne trouve pas il charge une archive photo(2)
Et si il n'existe pas il va chercher une photo(3) sur mon site (photo précisant qu'il y a une panne)

Le script que j'ai mis:
http://jsfiddle.net/jfriend00/qKtra/

comment lui dire si les 2 premiers liens ne fonctionnent pas qu'il aille chercher le troisième lien.

Car avec ce script il fait que vérifier si les liens existent et affiche "success" où "error"

Pour mon cas si le 1er est "success" il s’arrête là
Dans le cas contraire il vérifie si le second est "success"
Et si pas "success" il vérifie le troisième qui lui c'est certain il existe.


function testImage(url, callback, timeout) {
timeout = timeout || 5000;
var timedOut = false, timer;
var img = new Image();
img.onerror = img.onabort = function() {
if (!timedOut) {
clearTimeout(timer);
callback(url, "error");
}
};
img.onload = function() {
if (!timedOut) {
clearTimeout(timer);
callback(url, "success");
}
};
img.src = url;
timer = setTimeout(function() {
timedOut = true;
callback(url, "timeout");
}, timeout);
}


function record(url, result) {
document.body.innerHTML += "<span class='" + result + "'>" +
result + ": " + url + "</span><br>";
}

testImage("http://photos.smugmug.com/photos/344291068_HdnTo-Ti.jpg", record);

testImage("http://photos.smugmug.com/photos/invali ... nTo-Ti.jpg", record);

testImage("http://www.cnn.com/foo.jpg", record);