IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

4D Discussion :

Pb Avec la base de démo XARA : Récupérer une image sur un site web


Sujet :

4D

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 16
    Points : 9
    Points
    9
    Par défaut Pb Avec la base de démo XARA : Récupérer une image sur un site web
    Bonjour a tous, je suis petit nouveau et débutant dans le monde 4D, et je me heurte à mon premier problème :

    Je voudrais afficher dans un formulaire 4D une image provenant de mon site internet, donc récupéré automatiquement depuis une URL. Je me suis donc tout naturellement tourné vers la base de démonstration nommée Xara, téléchargeable sur ce même site. Et elle ne fonctionne pas. Je me suis rendu compte que l'url de téléchargement ne fonctionne pas, dans la fonction RecupGIF. Je l'ai remplacée par une autre (www.4dtoday.com) pour l'adresse du serveur, et (http://4DToday.com/images/images/misc/rss.gif) pour l'url de l'image.
    La je vais plus loin, tout se passe bien jusqu'à l'execution de la ligne :
    BLOB VERS DOCUMENT("tmp.gif";$receipt)
    qui, si j'ai bien compris, génère un fichier en local tmp.gif. Hors ce fichier généré, bien qu'il fasse la bonne taille, ne semble pas correct car je ne peux pas l'ouvrir sous windows avec n'importe quel editeur d'image.
    Du coup, à la ligne suivante :
    LIRE FICHIER IMAGE("tmp.gif";$picture)
    qui lit le fichier, j'ai une erreur et la variable picture ne contient rien. J'ai fait le test en remplacant le fichier tmp.gif par celui que je télécharge à la main sur le site internet et que je place à la place de tmp.gif, et la ca fonctionne bien.

    Donc a priori le problème vient de cette fonction, à moins que c'est au niveau de la variable $receipt qu'il y a un problème.

    Si qqn pouvait m'éclairer
    Merci
    Thomas

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 103
    Points : 67
    Points
    67
    Par défaut
    bonsoir

    peux-tu copier le code de la méthode qui te pose pb et le commenter sur les points qui ne fonctionnent pas ?

    je pourrai y jeter un oeil pour te filer un coup de main

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    voila la méthode RecupGif() :
    ---------------------------------------------------------------------------
    C_TEXTE($1) `URL
    C_IMAGE($0) `Return picture


    $Page:=$1
    FIXER TAILLE BLOB($receipt;0)

    $test:=IT_MacTCPInit

    `IMPORTANT COMMENT :
    `IF YOU HAVE APROXY,THE VARIABLE $Server SHOULD
    `BE SET TO YOUR PROXY NAME

    $Server:="http://ws.xara.com"
    `$Server:="YourProxyNameHere"

    $err:=TCP_Open ($Server;80;tcp_ID)

    Si ($err=0)
    $err:=TCP_Send (tcp_ID;"GET "+$page+" HTTP/1.0"+(2*(Caractere(13)+Caractere(10))))
    Repeter
    $erreur:=TCP_ReceiveBLOB (tcp_id;$tampon)
    $err:=TCP_State (tcp_ID;$status)
    Si (Taille BLOB($tampon)#0)
    COPIER BLOB($tampon;$receipt;0;Taille BLOB($receipt);Taille BLOB($tampon))
    Fin de si
    Jusque ($status=0)
    $err:=TCP_Close (tcp_ID)


    $offset:=0
    $header:=BLOB vers texte($receipt;Texte sans longueur ;$offset;Taille BLOB($receipt))
    $content_length:=0
    $p:=Position("Content-Length:";$header)
    Si ($p>0)
    $header:=Sous chaine($header;$p+15)
    $p2:=Position(Caractere(13);$header)
    Si ($p2>0)
    $content_length:=Num(Sous chaine($header;1;$p2-1))
    Fin de si
    Fin de si

    $len_header:=Taille BLOB($receipt)-$content_length
    SUPPRIMER DANS BLOB($receipt;0;$len_header)

    BLOB VERS DOCUMENT("tmp.gif";$receipt)
    LIRE FICHIER IMAGE("tmp.gif";$picture)
    $0:=$picture

    Fin de si

    --------------------------------------------------------------------------

    Cette fonction recoit une URL en parametre, et retourne une variable contenant l'image (pour l'afficher dans un cadre variable)
    Première erreur : au niveau de la variable $server :
    $Server:="http://ws.xara.com"
    `$Server:="YourProxyNameHere"

    $err:=TCP_Open ($Server;80;tcp_ID)

    si on laisse la valeur par défaut, la variable $err ne prends pas 0 et il ne se passe plus rien. J'ai donc remplacé les valeurs par des valeurs de tests comme ceci :
    $page:="http://4DToday.com/images/images/misc/rss.gif"
    $Server:="http://www.4Dtoday.com"
    `$Server:="YourProxyNameHere"

    $err:=TCP_Open ($Server;80;tcp_ID)

    La il rentre bien dans le if. tout semble bien se passer, les différentes varibles erreur s'initialise bien à 0 au fur et à mesure.
    l'erreur apparait alors ici :

    BLOB VERS DOCUMENT("tmp.gif";$receipt) => il crée un fichier tmp.gif sur le disque dur en local, et ce fichier n'est pas lisible par un logiciel d'edition graphique quel qu'il soit (photoshop ........)

    LIRE FICHIER IMAGE("tmp.gif";$picture) => C'est la que l'erreur apparait, car il n'arrive pas à lire l'image, normal car elle semble illisible.

    $0:=$picture => Donc la variable $picture n'est pas initialisée.

    Donc je vois deux choses : soit la fonction BLOB VERS DOCUMENT ne marche pas correctement, soit la variable $receipt n'est pas remplie correctement au fur et à mesure de la boucle, et du coup la fonction BLOB VERS DOCUMENT ne peut pas reconstruire le fichier image correctement.
    Mon but étant de faire apparaitre une image dans un formulaire récupérée sur un site web, si il y a un autre moyen que celui la je suis preneur.
    Merci Thomas

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Points : 18
    Points
    18
    Par défaut
    En regardant vote code j'ai constaté que vous avez des erreurs dans votre requête. Je vous conseil donc d'utiliser ce code:

    `Envoie interogation HTTP

    Si ($Next)

    $SP:=Caractere(32)
    $CRLF:=Caractere(13)+Caractere(10)
    $CRLFX2:=(Caractere(13)+Caractere(10))*2Si

    `indique URL de l'image que l'on veut
    $vTCP_SendRequest:=$vTCP_SendRequest+"GET"+$SP+[BookMarks]E_link+"/favicon.ico"+$SP+"HTTP/1.0"+$CRLF

    `si vous avez un proxy, indiquez son adresse
    $vTCP_SendRequest:=$vTCP_SendRequest+"Host:"+$SP+"proxy.private.4d.fr:80"+$CRLF

    `Objet et type que la requète doit nous retourner
    $vTCP_SendRequest:=$vTCP_SendRequest+"Accept:"+$SP+"image/x-icon"+$CRLF

    `Précisez le navigateur que vous allez utiliser
    $vTCP_SendRequest:=$vTCP_SendRequest+"User-Agent:"+$SP+"User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206"+" Firefox/0.8"+$CRLFX2

    Si (TCP_Send($vTCP_IdSession;$vTCP_SendRequest)#0)
    $Next:=Faux
    Fin de si

    Debug:=Debug+"TCP Send Request..."+Caractere(13)
    Debug:=Debug+Windows vers Mac($vTCP_SendRequest)+Caractere(13)
    Debug:=Debug+Caractere(13)+Caractere(13)

    Fin de si


    `Réception Réponse HTTP

    Si ($Next)

    FIXER TAILLE BLOB($vTCP_ReceiveRequest;0)
    FIXER TAILLE BLOB($vTCP_Buffer;0)

    Repeter
    Au cas ou

    `Ces deux commandes permettent de récupérer les données de l'image dans un Buffer (BLOB temporaire) et de vérifier si la session est toujours ouverte.

    : (TCP_ReceiveBLOB($vTCP_IdSession;$vTCP_Buffer)#0)
    $Next:=Faux
    : (TCP_State($vTCP_IdSession;$vTCP_State)#0)
    $Next:=Faux

    Sinon

    $vBLOB_Src_Pos:=0
    $vBLOB_Trg_Pos:=Taille BLOB($vTCP_ReceiveRequest)

    `Chaque données récupérer dans le Buffer est copier dans un BLOB
    COPIER BLOB($vTCP_Buffer;$vTCP_ReceiveRequest;
    $vBLOB_Src_Pos;$vBLOB_Trg_Pos;Taille BLOB($vTCP_Buffer))

    Fin de cas

    Jusque (($vTCP_State=0) | ($Next=Faux))

    `On efface le BLOB temporaire
    FIXER TAILLE BLOB($vTCP_Buffer;0)

    Fin de si

    A la fin de ce code vous devez récupérer toutes les données de votre image dans un BLOB.
    Pour la suite je vous renvoi sur un tech tips qui traite de la récèption dans 4D des images récupérer sur Internet.

    http://www.4d.fr/knowledgebase?CaseID=1072

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    merci cela fonctionne
    Thomas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Partager une image sur les site sociaux avec html
    Par tariq.elgbouri dans le forum Débuter
    Réponses: 5
    Dernier message: 04/09/2012, 11h35
  2. Réponses: 18
    Dernier message: 13/06/2012, 08h07
  3. automate pour récupérer des données sur un site web
    Par castor75 dans le forum Langage
    Réponses: 2
    Dernier message: 24/04/2008, 19h59
  4. Récupérer des informations sur un site web
    Par JnewB dans le forum Langage
    Réponses: 11
    Dernier message: 08/04/2007, 19h44
  5. Récupérer les images d'un site web
    Par [Silk] dans le forum Web & réseau
    Réponses: 2
    Dernier message: 15/03/2006, 12h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo