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

Lazarus Pascal Discussion :

Extraction de texte d'une page web


Sujet :

Lazarus Pascal

  1. #1
    Membre régulier
    Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 101
    Points : 80
    Points
    80
    Par défaut Extraction de texte d'une page web
    Bonjour à toutes et à tous.

    Windows 10 x86_64-win64-win32/win64; Lazarus version 2.2.2; fpc 3.2.2
    Je m'essaye à extraire du texte d'une page web. À partir de l'adresse suivante :
    https://lazplanet.blogspot.com/2019/...in-2-ways.html
    J'ai ouvert Lazarus et suivi pas à pas la procédure décrite. Tout fonctionne bien quand l'adresse débute par 'http://'. Mais cela se gâte si cette adresse est en 'https://'. Je reçois le message suivant :

    Nom : DonnéesInternet.jpg
Affichages : 207
Taille : 46,3 Ko

    J'ai bien dans le répertoire de l'exécutable 'libeay32.dll' et 'ssleay32.dll' extraits depuis
    https://indy.fulgan.com/SSL/ dans le fichier 'openssl-1.0.2u-x64_86-win64.zip'. Étaient-ce les bon fichiers ? Où se trouve l'unité opensslsockets ?

    Si quelqu'un pouvait me mettre sur la bonne piste pour m'en sortir je serais bien content.
    Merci d'avance, Michel.

  2. #2
    Membre confirmé

    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 170
    Points : 455
    Points
    455
    Par défaut
    Bonjour,

    Voici un exemple, qui me sert à récupérer du texte sur GitHub (en l’occurrence la dernière version disponible du programme) avec Indy installé:

    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
    uses ...., fphttpclient, fpopenssl, openssl, opensslsockets;    
     
    ....
     
    TAboutBox = class(TForm) 
    ....
    public
    function ChkNewVersion (url: string=''): string;  
    end;
     
    implementation
     
    ....
     
    function TAboutBox.ChkNewVersion(url: string=''): string;
    var
      MyHTTPCli: TFPHTTPClient;
      spage: string;
      stagurl: string;
      titlebeg, titleend: Integer;
      A: TStringArray;
      sl: TStringList;
      s: string;
      i, p: integer;
    begin
      result:= '';
      sl:= TStringList.create();
      // if length(url)=0 then url:= ChkVerUrl;    //Sans objet ici
      { SSL initialization has to be done by hand here }
      InitSSLInterface;
      MyHTTPCli:= TFPHTTPClient.Create(nil);
      try
        MyHTTPCli.IOTimeout:= 20000;
        MyHTTPCli.AllowRedirect:= true;
        MyHTTPCli.AddHeader('User-Agent','Mozilla 5.0 (bb84000 '+ProgName+')');
        // Parse last release page to get last version
        // <title>Release Version 0.9.1.7 - 08/04/2021 etc
        sl.text:= MyHTTPCli.Get(url);
        Application.ProcessMessages; //let loading complete
        if sl.Count > 0 then
        begin
          for i:= 0 to sl.Count-1 do
          begin
            p:= pos('<title>', sl.Strings[i]) ;
            if p > 0 then
            begin
              s:=Copy(sl.Strings[i], p+8, 40);
              A:= s.Split(' ');
              break;
            end;
          end;
          // Avoid exception if we dont find the proper line
          if length(A)>=2 then result:= A[2]
          else result:= '';
        end;
      except
        on e:Exception do
           ErrorMessage:= e.message
      end;
      if Assigned(MyHTTPCli) then MyHTTPCli.Free;
      if Assigned(sl) then sl.free;
    end;
    Points importants :
    • Ne pas supprimer opensslsockets, même si Lazarus dit que c'erst inutile.
    • La fonction InitSSLInterface; estnécessaire dans certains cas de figure
    • Spécifier un UserAgent car certains sites refusent la connexion en son absence. Je prends Mozilla 5.0, j'y ajoute de quoi me reconnaitre ainsi que mon programme. Si le site est un tant soit peu intelligent, il sait que c'est moi et pas un robot ou un pirate.


    bb84000

  3. #3
    Membre régulier
    Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 101
    Points : 80
    Points
    80
    Par défaut
    Merci bb84000 pour ta réponse. Je vais essayer de mettre en œuvre ta solution.
    Je rendrai compte de mes essais.

  4. #4
    Membre régulier
    Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 101
    Points : 80
    Points
    80
    Par défaut
    Où trouver Indy qui correspond à ma configuration?

  5. #5
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    Hello,
    dans les versions récentes de Lazarus >= 2.2.0 on peut utiliser d'autres dlls plus "modernes" que libeay32 et ssleay32 comme le montre le code du fichier openssl.pas qui se trouve dans fpcsrc\packages\openssl\src :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var
      {$IFDEF WINDOWS}
      DLLSSLName: string = 'ssleay32.dll';
      DLLSSLName2: string = 'libssl32.dll';
      DLLSSLName3: string = {$IFDEF WIN64}'libssl-1_1-x64.dll'{$ELSE}'libssl-1_1.dll'{$ENDIF};
      DLLUtilName: string = 'libeay32.dll';
      DLLUtilName2: string = {$IFDEF WIN64}'libcrypto-1_1-x64.dll'{$ELSE}'libcrypto-1_1.dll'{$ENDIF};
      {$ELSE}
    En particulier il y a les dll libssl-1_1 et libcrypto-1_1. On peut trouver où télécharger les dll ici . Choisir :
    2023-02-07 OpenSSL Binaries Win-64 1.1.1t requires ICS V8.57 or later Built with Visual Studio Build Tools 2017 Supports TLSv1.3. For 64-bit applications only (XE2+). Digitally code signed. Only supports Windows Vista/Server 2008, and later, not Windows XP.
    2023-02-07 OpenSSL Binaries Win-32 1.1.1t requires ICS V8.57 or later Built with Visual Studio Build Tools 2017 Supports TLSv1.3. Use with 32-bit applications on Windows 64-bit. Digitally code signed. Only supports Windows Vista/Server 2008, and later, not Windows XP.
    Il faut avoir le VC++ redistribuable qui va bien installé (celui qui marche avec VS 2017 exemple msvc++ redistribuable 2015-2019).
    Sur un Windows 64 bits les dll 32 bits sont à mettre dans Windows\SysWow64 et les dll 64 bits dans Windows\System32

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

Discussions similaires

  1. Extraction de texte dans une page HTML
    Par ninox_ dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/05/2007, 17h29
  2. Extraction de données d'une page web
    Par morgan47 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 02/03/2007, 01h19
  3. extraction de données d'une page web en exploitant les RSS
    Par rose_des_sables dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 18/02/2007, 11h50
  4. Cacher du texte d' une page web
    Par WELCOMSMAIL dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 26/10/2006, 11h02
  5. bug dans programme d'extraction de données d'une page web
    Par youpimevla dans le forum Web & réseau
    Réponses: 11
    Dernier message: 31/08/2006, 10h02

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