Recuperer donnée sur site web.

Recuperer donnée sur site web. - HTML/CSS - Programmation

Marsh Posté le 21-12-2009 à 10:25:39    

Bonjour a toutes et a tous.
J'explique se que je veux faire.
Je voudrais savoir s’il est possible de récupérer des morceaux de texte d'une page web (en php) automatiquement, pour que celle ci se mette a jour sur mon site quand elle change ?
Ex: sur cette page (http://forum.hardware.fr/hfr/profil-600700.htm), est t'il possible de récupérer le Nombre de messages postés (donc pour l'instant le chiffre 1) pour ensuite le mettre sur un site , et que celui ci mette a jour se chiffre a chaque foi que je poste un message ?
 
J'espère que quelqu'un ma comprit.
Si quelqu'un peut m'expliquer si c'est possible ou pas. Et si sa l'est comment faire pour récupérer cette donné.
 
(J'espère mettre mi dans la bonne sous-catégorie)
 
            Merci

Reply

Marsh Posté le 21-12-2009 à 10:25:39   

Reply

Marsh Posté le 21-12-2009 à 10:53:43    

Oui, mais je ne crois pas qu'on puisse le faire en Javascript, ou pas facilement, ou seulement dans certaines cirsconstances. En tous cas, c'est tout à fait faisable en python (et c'est d'ailleurs l'un des intérêts de ce langage gratuit).

Reply

Marsh Posté le 21-12-2009 à 14:02:18    

Du moment que l'information recherchée est toujours au même endroit, tu peux utiliser libcurl pour aller interroger, en php notamment, le contenu d'une page, puis récupérer une ligne précise. La remettre dans une variable pour la réafficher chez toi ne sera pas le plus compliqué ;-)


---------------
Question sur la programmation ? DevWeb it!
Reply

Marsh Posté le 21-12-2009 à 14:11:32    

Je vais tester merci


Message édité par socom le 21-12-2009 à 14:52:13
Reply

Marsh Posté le 21-12-2009 à 14:19:32    

4 lignes de php suffisent pour ça :
 

Code :
  1. $url = "tonurl";
  2. $file=file_get_contents($url);
  3. $pattern = '/UneRegExp/';
  4. preg_match_all($pattern, $file, $donnees);


 
Et tu obtiens ce que tu souhaites dans la variable $donnees, en utilisant l'expression régulière adéquat.
 
Après c'est peut être aussi simple avec la librairie curl je ne sais pas ^^

Reply

Marsh Posté le 21-12-2009 à 14:57:02    

darkgloom a écrit :

4 lignes de php suffisent pour ça :

 
Code :
  1. $url = "tonurl";
  2. $file=file_get_contents($url);
  3. $pattern = '/UneRegExp/';
  4. preg_match_all($pattern, $file, $donnees);
 

Et tu obtiens ce que tu souhaites dans la variable $donnees,
en utilisant l'expression régulière adéquat.

 

Après c'est peut être aussi simple avec la librairie curl je ne sais pas ^^

 


Je comprend pas trop se que tu dit (se qui est en rouge)
Désoler je suis vraiment mauvais.


Message édité par socom le 21-12-2009 à 14:59:05
Reply

Marsh Posté le 21-12-2009 à 15:22:16    

http://www.commentcamarche.net/con [...] hpreg.php3
 
En gros il faut que tu lises le code source de la page où tu veux récupérer l'information et que tu la délimites par la regexp.
Exemple, pour récupérer le nombre de message postés dans le lien que tu as fourni :
 

Code :
  1. $url = "http://forum.hardware.fr/hfr/profil-600700.htm";
  2. $file=file_get_contents($url);
  3. $pattern = '/\<td class="profilCase3"\>([0-9]+)\<\/td\>/';
  4. preg_match_all($pattern, $file, $data);


 

Reply

Marsh Posté le 21-12-2009 à 16:20:01    

pour faire ca faut utilisé DomDocument (+ xpath), surtout pas les regex

 

http://php.net/manual/fr/class.domdocument.php


Message édité par stealth35 le 21-12-2009 à 16:21:03
Reply

Marsh Posté le 21-12-2009 à 17:06:36    

Donc avec l'exemple du nombre de message.
En créent un fichier test.php

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2.         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html>
  4. <head>
  5. <title>PHP Test</title>
  6. </head>
  7. <body>
  8. <?php
  9. $url = "http://forum.hardware.fr/hfr/profil-600700.htm";
  10. $file=file_get_contents($url);
  11. $pattern = '/\<td class="profilCase3"\>([0-9]+)\<\/td\>/';
  12. preg_match_all($pattern, $file, $data);
  13. ?>
  14. </body>
  15. </html>


 
Sa me met se message dans la page web:

Code :
  1. ([0-9]+)\<\/td\>/'; preg_match_all($pattern, $file, $data); ?>


 
J'ai lut les document DomDocument (+ xpath), j'ai essayer de comprendre comment utilisé DomDocument (+ xpath), mais je suis mieux avancer après cette lecture.
 
RegExp ou pas RegExp, qui a raison, qui a tord ?

Reply

Marsh Posté le 21-12-2009 à 17:10:56    

dans le sens ou DomDocument est fait pour manipuler ce genre de donné, c'est ce qu'il faut utilisé.
 
je vais te poster un exemple

Reply

Marsh Posté le 21-12-2009 à 17:10:56   

Reply

Marsh Posté le 21-12-2009 à 17:20:42    

Code :
  1. $dom = new DomDocument();
  2. $dom->loadHTMLFile('http://forum.hardware.fr/hfr/profil-600700.htm');
  3.     
  4. $xpath         = new DOMXpath($dom);
  5. $element     = $xpath->query("//td[@class='profilCase3']" )->item(10);
  6.  
  7. echo $element->textContent;


Message édité par stealth35 le 21-12-2009 à 17:28:44
Reply

Marsh Posté le 21-12-2009 à 17:33:06    

Voila le code du fichier test.php

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2.         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html>
  4. <head>
  5. <title>PHP Test</title>
  6. </head>
  7. <body>
  8. <?php
  9.       $dom = new DomDocument();
  10.       $dom->loadHTMLFile('http://forum.hardware.fr/hfr/profil-600700.htm'); 
  11.      
  12.       $xpath = new DOMXpath($dom);
  13.       $elements = $xpath->query("//td[@class='profilCase3']" );
  14.          
  15.       foreach($elements as $item)
  16.       {
  17.           echo $item->textContent . PHP_EOL;
  18.       }
  19. ?>
  20. </body>
  21. </html>


 
Mais sa ne m'arche toujour pas.

Code :
  1. loadHTMLFile('http://forum.hardware.fr/hfr/profil-600700.htm'); $xpath = new DOMXpath($dom); $elements = $xpath->query("//td[@class='profilCase3']" ); foreach($elements as $item) { echo $item->textContent . PHP_EOL; } ?>

Reply

Marsh Posté le 21-12-2009 à 17:34:33    

ton php est pas activé ca vient pas du code...
ps: j'ai edit le code pour qu'il te retourne l'info que tu voulais


Message édité par stealth35 le 21-12-2009 à 17:35:34
Reply

Marsh Posté le 21-12-2009 à 17:38:59    

Pourtant avec m'importe quel autre page php sa marche, je voi pas pourquoi sa marche pas avec elle.
Je cherche.

Reply

Marsh Posté le 21-12-2009 à 17:41:11    

bizar...

Reply

Marsh Posté le 21-12-2009 à 17:44:41    

Le problème doit être régler mais je peut pas tester imediatement.
Peut tu m'expliquer comment tu a trouver    "//td[@class='profilCase3']"

Reply

Marsh Posté le 21-12-2009 à 17:46:53    

c'est du xpath, ca marche un peu comme le CSS,
tu prends tout les 'TD' qui on un attribut 'class' qui contient 'profilCase3'

 

http://fr.wikipedia.org/wiki/XPath
http://www.w3.org/TR/xpath


Message édité par stealth35 le 21-12-2009 à 17:47:27
Reply

Marsh Posté le 21-12-2009 à 17:48:51    

Ok
Voici se que ton code me donne dans la page web

Code :
  1. socom Vous n'avez pas accès à cette information   Monde » Europe » France » Isère   NA Membre 7 07/11/2007 21-12-2009 à  17:44     Envoyer un message privé à socom Accéder à la liste de tous ses messages


 
Y'aurai pas un moyen pour grader juste le 7 (nombre de message au moment ou j'ai copier le message)

Reply

Marsh Posté le 21-12-2009 à 17:51:03    

si si, je t'ai mis en haut que j'avai edité le code :
 

Code :
  1. $dom = new DomDocument();
  2.    $dom->loadHTMLFile('http://forum.hardware.fr/hfr/profil-600700.htm');
  3.        
  4.    $xpath         = new DOMXpath($dom);
  5.    $element     = $xpath->query("//td[@class='profilCase3']" )->item(10);
  6.    
  7.    echo $element->textContent;


 
et met l'encodage de ta page en utf-8

Reply

Marsh Posté le 21-12-2009 à 17:57:10    

Excuse moi j'avais oublier de mettre le code a jour.
 
Est'il possible de faire pareil avec une page php ?
L'adresse web est sous cette forme http://nomdusite.fr/index.php?page [...] ??_membres
Et quand je regarde le code source, je ne voix pas le texte que je veut mettre sur mon site.
 
P.S. J'ai les autorisations de l'auteur du site pour copier les texte.

Reply

Marsh Posté le 21-12-2009 à 18:02:06    

oui mais la requete sera differente suivant la page
montre un exemple de la page que tu veux parser

Reply

Marsh Posté le 21-12-2009 à 18:09:57    

En faite, il y a bien la phrase dans le code source.

Code :
  1. <tr>
  2.  <td>1</td>                            C'est le numero de la phrase
  3.  <td>...</td>                           Auteur de la phrase
  4.  <td>texte de je veut extraire</td>                         Phrase
  5.  <td><img src="http://???.nomdusite.fr/.../....png" alt="Hors ligne" title="Hors ligne"> <a href="index.php?page=...&amp;op=...&amp;id=70"><img src="http://???.nomdusite.fr/.../.....png" alt="..." title="..."></a>
  6.  <a href="index.php?page=...&amp;...=..."><img src="http://???.nomdusite.fr/.../.....png" alt=""></a></td>
  7.  </tr>


 
Voila le code de la page

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/.../xhtml" xml:lang="fr">
  3. <head>
  4. <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
  5. <meta http-equiv="pragma" content="no-cache" />
  6. <title>Nom du site</title>
  7. (...) j'ai supprimer la mise en page des different menu
  8. <br />
  9. <div class="corps_haut_grand"></div>
  10. <div class="corps_contenu_grand">
  11. <div class="texte">
  12. <span class="titre">Phrase du Jour " Thomas "</span>
  13. <img src="http://???.nomdusite.fr/.../???.png" alt="" /><br />
  14.  <table>
  15.   <tr class="tr_titre_grand">
  16.    <th style="text-align: left;">#</th>
  17.    <th style="text-align: left;">Pseudo</th>
  18.    <th style="text-align: left;">Phrase</th>
  19.    <th style="text-align: left;">Date d'inscription</th>
  20.    <th style="text-align: left;">Infos</th>
  21.   </tr>
  22.  <tr>
  23.  <td>Phrase n1</td>
  24.  <td>Nom de l'auteur</td>
  25.  <td>Phrase que je veux copier</td>
  26.  <td>??/??/2009</td>
  27.  <td><img src="http://???.nomdusite.fr/.../???.png" alt="Hors ligne" title="Hors ligne" /> <a href="index.php?page=...&amp;op=...&amp;id=70" /><img src="http://???.nomdusite.fr/.../???.png" alt="Envoyer un message à Thomas" title="Envoyer un message à Thomas" /></a>
  28.  <a href="index.php?page=...&amp;...=Thomas"><img src="http://???.nomdusite.fr/.../???.png" alt="" /></a></td>
  29.  </tr>
  30.  <tr>
  31.  <td>2</td>
  32.  <td>...</td>
  33.  (...) pareil que les 6 ligne presedente pour chacune des phrase
  34.   <tr class="tr_pied_grand">
  35.    <th colspan="7">&nbsp;</th>
  36.   </tr>
  37.  </table>
  38. </div>
  39. </div>
  40. <div class="corps_bas_grand"></div> <div class="footer_haut" style="height: 15px;"></div>
  41. <div class="footer_contenu">
  42.  <div id="texte_footer">
  43.  &copy; Nom du site 2009 - <a href="http://www.???.fr" onclick="window.open(this.href); return false;">Tous droits réservés</a><br />
  44.    Date serveur : 21/12 18:24:59
  45.  </div>
  46. </div>
  47. <div class="footer_bas"></div>
  48. </div>
  49. <div id="pub"><script type="text/javascript" src="http://???.???.com/mySlot.jsp?id=..."></script></div>
  50. </div>
  51. </body>
  52. </html>


 
 
Est ce que quelqu'un veut m'adapter le code pour se site.
Merci


Message édité par socom le 21-12-2009 à 20:18:43
Reply

Marsh Posté le 22-12-2009 à 09:46:20    

Je pense qu'en cherchant un peu avec toutes les ressources que tu as déjà eu, tu dois pouvoir adapter un code...


---------------
Question sur la programmation ? DevWeb it!
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed