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

Delphi Discussion :

Re récupérer une valeur sur Internet Explorer à partir de Delphi


Sujet :

Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 62
    Points : 61
    Points
    61
    Par défaut Re récupérer une valeur sur Internet Explorer à partir de Delphi
    Bonjour,
    J’ai besoin de vos lumières : je souhaite récupérer le cours de l’EUR/USD en temps réel, directement sur un site Internet. J’ai tenté d’utiliser WebBrowser mais ça n’a pas fonctionné car le site en question ne se charge pas complètement sur une ancienne version de navigateur type WebBrowser.
    J’ai préféré travailler directement avec Internet Explorer en utilisant OleObject. Les cotations de la bourse que j’ai trouvées sur la toile sont décalées et ne me permettent pas de travailler dessus.
    Un clic droit sur le site ma permit d’ouvrir le contenu HTML et isoler la valeur que je cherche à récupérer à savoir :
    Prix de l’EUR/USD = 1.13470 à la troisième ligne du code html ci-dessous,
    Image capture d’écran du site :

    Nom : Cotation.jpg
Affichages : 413
Taille : 13,1 Ko

    Ce bout de code ne fonctionne pas sous Internet Explorer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Valeur: String;
    begin
    Valeur := GetElementById(WebBrowser1.Document, 'valeur à récupérer');
    end;
    En chargeant internet Explorer, Comment récupérer la cotation (1.13470) à partir de Delphi, afin de l’afficher directement dans un TEdit ou n’importe quel compos Delphi ?
    Je n’arrive pas à accéder à ces lignes par programmation sous Delphi.
    Merci infiniment pour votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 029
    Points : 40 927
    Points
    40 927
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    point besoin d'Internet Explorer ni de Web browser pour ce faire, d'ailleurs que font ces derniers si ce n'est afficher un fichier HTML ?
    Le plus difficile est de trouver la bonne page ou le bon flux RSS.

    un composant Indy (idhttp) ou du moins les unités nécessaires à une création lors de l'exécution, quelques traitements de gestion de fichiers HTML (ou pas) cela suffit

    Voici un peu de code que j'avais utilisé pour un test (récupération des informations dans un mémo d'un fichier à cette adresse {http://www.ecb.europa.eu/euro.htmll})
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
    uses ...IdBaseComponent, IdComponent,
      IdTCPConnection, IdTCPClient, IdHTTP, ....;
     
    procedure TForm18.BitBtn1Click(Sender: TObject);
    var F : TextFile;
        Buffer,Markup : String;
        Http: TIdHttp;
        URL, Filename: string;
        FS: TFileStream;
        // mise en page d'un cours
        procedure Cours (B : String);
        var i,j,l : integer;
            Devise : String;
            Valeur : String;
            c : Double;
        begin
          i:=Pos('(',B)+1;
          Devise:=Copy(B,i,3);
          i:=Pos('=',B)+1;
          j:=Pos('<',B);
          Valeur:=Copy(B,i,j-i);
          Valeur:=StringReplace(Valeur,'.',decimalseparator,[]);
          c:=StrToFloatDef(Valeur,0);
          Memo1.Lines.Add(Format('%s %3.4f',[devise,c]));
        end;
        // mise en page date cours
        procedure DateCours(B : String);
        var i,j : Integer;
            Day : String;
            DC : TDate;
            F : TFormatSettings;
            d,m,y : word;
         const
            months : array[1..12] of string = ('Jan','Feb','Mar','Apr','May','Jun',
                                         'Jul','Aug','Sept','Nov','Oct','Dec');
        begin
          i:=Pos(':',B)+2;
          j:=Pos('</h1>',B);
          Day:=Copy(B,i,j-i);
          d:=StrToInt(Copy(day,1,2));
          y:=StrToInt(RightStr(day,4));
          m:=ANSIindexstr(Copy(Day,4,3),months)+1;
          try
            DC:=encodedate(y,m,d);
           memo1.Lines.Add(FormatDateTime('dd/mm/yyyy',DC));
          except
           memo1.Lines.Add(Day);
          end;
        end;
     
    begin
      URL := 'http://www.ecb.europa.eu/euro.html';
      memo1.Lines.Clear;
      Filename := ExtractFilePath(Application.exename)+'euro.html'; // le fichier sera récupéré
      if FileExists(FileName) then DeleteFile(FileName);
      FS := TFileStream.Create(Filename, fmCreate);  // dans un stream
      try
        try
          Http := TIdHttp.Create(nil);
          try
            try
              Http.Get(URL, FS);
            except
    //          on E: EIdHTTPProtocolException do begin
    //            Showmessage(E.ErrorMessage);
    //            if E.ErrorCode <> 404 then raise;
    //            if URL = '' then raise;
    //          end;
            end;
          finally
            Http.Free;
          end;
        finally
          FS.Free;
        end;
      except
        DeleteFile(Filename);
        memo1.Lines.add('Impossible de télécharger le fichier.');
        Exit;
      end;
     
        { Création du fichier de sortie }
        AssignFile(F,'euro.html');
        Reset(F) ;
        while not EOF(F) do
        begin
        ReadLn(F, buffer);
        if ANSIEndsText('<br />',Buffer) then Cours(Buffer);
        if ANSIStartsText('<h1>Date',Buffer) then DateCours(Buffer);
     
       end;
       CloseFile(F) ;
    end;
    maintenant que la méthode d'obtention d'un fichier html est faite , rien n'empêche de travailler ce fichier de manière différent de ce bout de programme
    en apprenant à traiter un fichier XML
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 62
    Points : 61
    Points
    61
    Par défaut
    Merci SergioMaster,
    J’ai testé votre code, il fonctionne parfaitement. L’adaptation de votre code à mon cas me semble difficile sachant que mes connaissance en XML, html sont très limitées. Lors du chargement des cotations des devises j’ai remarqué un moment de latence de quelques secondes. Ça me pose un problème car je veux absolument que la parité choisie soit affichée en temps réel. Le test de votre code m’a permis de comprendre, néanmoins, que même si j’arrive à l’adapter à mon cas le résultat sera toujours décalé à cause du traitement demandé après le chargement de tout le code de la page WEB.
    Je développe un automate capable de prendre des décisions et surveiller l’évolution des positions prises par le trader. L’automate enregistre en mémoire la position de tous les boutons, listBox du site de trading et réagi instantanément selon des scénarios préprogrammés. L’automate en mode apprentissage enregistre les actions prises par le trader.
    Quel est l’avantage d’un tel système ?
    La rapidité de réaction. En effet, si vous ouvrez une position à la hausse ou à la baisse, vous n’êtes plus obligé de rester devant l’ordinateur pour la surveiller en cas de changement volatile des cours.
    L’automate réagi selon des scénarios programmés que les traders applique dans ce genre de situation et sauve la position. Ça permet de faire énormément d’économie. Ex : Pour une mise de 50€ vous récupérer 40€ au lieu de perdre la totalité à savoir 50€.
    La maitrise des oscillateurs RSI, CCI, les moyens mobiles, les bandes de Bollinger ou le chandelier Japonais ne suffisent pas à sauver certaines positions de Trade car les marchés sont extrêmement volatiles. Des retournements de situation bizarre, des cassures s’exercent parfois sur certaines positions à des vitesses impossibles à contrer par un être humain, même expérimenté.
    L’automate développé sous Delphi me permet de compenser la fatigue et la surveillance ennuyante des cours et des chiffres. Il doit réagir instantanément à un retournement de situation volatile.
    Je souhaite savoir s’il existe une possibilité de récupérer directement les cotations des paires de devises chez un fournisseur moyennant un abonnement ?
    Avec Delphi bien sûr.
    Il me manque juste la récupération des cotations en temps réel. L’application sous Delphi compare les prix reçus en temps réel par rapport aux prix mémorisés.
    Merci pour vos lumières.

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 029
    Points : 40 927
    Points
    40 927
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    l'exemple donné s'appuie sur un fichier mis à jour une seule fois dans la journée et donc ne correspond pas à vos besoins.
    vous devrez vous orienter, AMHA, vers un flux RSS. Je me souviens qu'il y a eu une séance sur Delphi et les flux RSS lors des DevsduJeudi saison 3 épisode 11 (passer directement à la séance matin 2°partie en "amuse bouche")

    mes connaissance en XML, html sont très limitées.
    les miennes aussi mais heureusement , Delphi avec son composant XMLDoc permet de s'en sortir sans trop de maux de tête

    reste à trouver le bon flux
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342

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

Discussions similaires

  1. Réponses: 33
    Dernier message: 20/06/2012, 09h58
  2. Récupérer une valeur sur un autre WB, sans activate.
    Par NicolasC91 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 16/05/2011, 11h06
  3. Réponses: 6
    Dernier message: 04/09/2008, 19h17
  4. récupérer nombre itérations vers une valeur sur hashmap
    Par flora806 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 26/02/2008, 14h43
  5. Réponses: 2
    Dernier message: 15/05/2007, 15h43

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