La Communauté Webmaster  forum rss


  Forum-webmaster
  Technique - programmation
  PHP / MySQL
(Modérateurs: Shain, Jey, erwinol, Lilian, lauryv, ToToMaStEr)
  Recupéré code source page file_get_contents()
« Précédent Suivant »
Pages: [1] Descendre
Répondre    Aviser des réponses    Envoyer le sujet    Imprimer
  Auteur  Sujet: Recupéré code source page file_get_contents()  (Lu 2109 fois)
Recupéré code source page file_get_contents()
« sur: le 10-04-2010 a 11:08:37 »
Neo92
Membre récent
*

Hors-Ligne

Messages: 7





Voir le Profil    E-Mail
Répondre avec citation

Bonjour à tous !

J'aimerai récupéré une parti qui m'interresse sur un site a partir de cette fonction:
file_get_contents($url);

Mon script foncionne dans 70% des cas, le problème est quand le site charge avec du javascript ou du ajax une partie du site que je veux récupéré...

Je n'arrive plus a l'extraire...

Auriez vous une explication?
Je prends par exemple ce site:
http://www.jeuxvideo.fr/jeux/assassin-s-creed-2/
--> Par defaut il va charger la page pour XBOX360.

Mais imaginons que je veuille récupéré la page pour PC il faut alors que je tape:
http://www.jeuxvideo.fr/jeux/assassin-s-creed-2/#pc

Et on va voir alors que en bas a droite sur la Fiche Technique du jeu se chargé dynamiquement...

Du coup je repose ma question auriez vous une technique pour récupéré le code charger ?

Merci d'avance à tous pour votre aide

Rapporter au modérateur  

Re:Recupéré code source page file_get_contents()
« Répondre #1 sur: le 13-04-2010 a 17:18:20 »
souifi
Membre récent
*

Hors-Ligne

Messages: 25



Je suis un lama!

Voir le Profil
Répondre avec citation

le site fait des requêtes ajax sur http://www.jeuxvideo.fr/fiche/fiche_v2_ajax.php/fiche/fiche_v2_ajax.php et en POST.

il te faudra donc beaucoup de traitement...
par exemple sur ton premier file_get_contents il faudra récuperer l'id qui t'intéresse, puis effectuer une requete en post sur fiche_v2_ajax.php, analyse le site, les pages javascript pour voir les différents paramètre que tu peut envoyer par post...

Je t'ai fait un petit bout de code pour t'aiguiller, celui ci récupère la config minimum pour la plateforme pc du jeux Assassin's Creed 2.

Code:
<?php
header('Content-type: text/html; charset=utf-8');
function getFicheTechnique($url, $data = array()) {
   
   // Génère une chaîne de requête en encodage URL
   $data = http_build_query($data);

   // Crée un contexte de flux
   $context_options = array (
         'http' => array (
            'method' => 'POST',
            'header'=> "Content-type: application/x-www-form-urlencoded\r\n"
               . "Content-Length: " . strlen($data) . "\r\n",
            'content' => $data
            )
         );
   $context = stream_context_create($context_options);

   // Lit tout un fichier dans une chaîne
   $page = file_get_contents($url, false, $context);
   
   // trie du resultat
   if(preg_match('#config_minimale\'\)\.html\("<div>(.*)</div>"\)#is', $page, $pattern)) {
      // On retourne un tableau
      return explode('</div><div>',  $pattern[1]);
   }
   
}

// Exemnple pour Assassin's Creed 2 et la fiche technique PC
$url = 'http://www.jeuxvideo.fr/fiche/fiche_v2_ajax.php/fiche/fiche_v2_ajax.php';
$data = array('id'=>'12108');
echo '<h1>Assassin\'s Creed 2: Configuration minimale pour PC</h1>';
$confMinimale = getFicheTechnique($url, $data);
foreach($confMinimale as $k => $v) {
   echo $v . '<br />';
}
?>


En espérant que sa puisse t'aider, bonne chance.

« Dernière Édition: le 13-04-2010 a 17:26:20 par souifi » Rapporter au modérateur  
Re:Recupéré code source page file_get_contents()
« Répondre #2 sur: le 13-04-2010 a 20:35:16 »
Neo92
Membre récent
*

Hors-Ligne

Messages: 7





Voir le Profil    E-Mail
Répondre avec citation

Wow ! Merci beaucoup pour ce travail excellent !!

j'essaye ca tout de suite !! encore merci !!

Rapporter au modérateur  
Re:Recupéré code source page file_get_contents()
« Répondre #3 sur: le 13-04-2010 a 21:44:11 »
Neo92
Membre récent
*

Hors-Ligne

Messages: 7





Voir le Profil    E-Mail
Répondre avec citation

Petite question sauriez vous comment adapter ce script via un text area qui proposerait de tapper un jeux et de récupéré la config en fonction du jeux tapper.

Donc récupéré l'id si j'ai bien compris ?
$data = array('id'=>'12108');

Comment déterminer que c'est l'id 12108 ?

Merci d'avance pour ton aide !

Rapporter au modérateur  
Re:Recupéré code source page file_get_contents()
« Répondre #4 sur: le 13-04-2010 a 21:55:33 »
Neo92
Membre récent
*

Hors-Ligne

Messages: 7





Voir le Profil    E-Mail
Répondre avec citation

Ah je crois que j'ai trouver pour l'id c'est à partir de tab_pf['pc'] = 12108; c'est ca ?

Rapporter au modérateur  
Re:Recupéré code source page file_get_contents()
« Répondre #5 sur: le 13-04-2010 a 21:58:33 »
souifi
Membre récent
*

Hors-Ligne

Messages: 25



Je suis un lama!

Voir le Profil
Répondre avec citation

Le but était de t'aiguiller pas faire le script a ta place....
que veut tu faire exactement, quel sont les différant champs que tu veux récupérer(description , nombre de plateform...)
la config n'est que pour les jeux pc.

Rapporter au modérateur  
Re:Recupéré code source page file_get_contents()
« Répondre #6 sur: le 13-04-2010 a 22:00:03 »
Neo92
Membre récent
*

Hors-Ligne

Messages: 7





Voir le Profil    E-Mail
Répondre avec citation

Exact oui. Ce qui m'intéresse serait:

Processeur, Mémoire RAM et Carte graphique

uniquement pour les config pc effectivement

« Dernière Édition: le 13-04-2010 a 22:01:23 par Neo92 » Rapporter au modérateur  
Re:Recupéré code source page file_get_contents()
« Répondre #7 sur: le 13-04-2010 a 22:04:08 »
souifi
Membre récent
*

Hors-Ligne

Messages: 25



Je suis un lama!

Voir le Profil
Répondre avec citation

je te fait un petit truc vite fait...

Rapporter au modérateur  
Re:Recupéré code source page file_get_contents()
« Répondre #8 sur: le 13-04-2010 a 22:05:35 »
Neo92
Membre récent
*

Hors-Ligne

Messages: 7





Voir le Profil    E-Mail
Répondre avec citation

Oh super sympa t'assure !

Rapporter au modérateur  
Re:Recupéré code source page file_get_contents()
« Répondre #9 sur: le 14-04-2010 a 23:19:54 »
souifi
Membre récent
*

Hors-Ligne

Messages: 25



Je suis un lama!

Voir le Profil
Répondre avec citation

Voila, un peut bordélique et lent , mais fonctionnel...

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>...</title>
</head>

<body>
<form action="jeux.php" method="POST">
<input type="text" name='search' />
<input type="submit" />
</form><br /><br />
<?php
function formatSearch($string){
   $search = array ('@[éèêëÊË]@i','@[àâäÂÄ]@i','@[îïÎÏ]@i','@[ûùüÛÜ]@i','@[ôöÔÖ]@i','@[ç]@i','@[^a-zA-Z0-9]@');
   $replace = array ('e','a','i','u','o','c','-');
   return preg_replace($search, $replace, $string);
}

if(isset($_POST['search']) && !empty($_POST['search'])) {
   $search = formatSearch($_POST['search']);
   
   // On démare une boucle au cas ou il y aurait plusieurs pages
   while($search) {
      $page = isset($pageSuivante) ? 'http://www.jeuxvideo.fr/r/' . $search . '/jeu/' . $pageSuivante :'http://www.jeuxvideo.fr/r/' . $search . '/jeu/';
      $resultSearch = file_get_contents($page);
      
      // On reduit le bloc de recherche à ce qui nous interesse
      if(preg_match('#name=\'jeu\'(.*)colonne_widgets#Uis', $resultSearch, $pattern)) {
         $resultSearch = $pattern[1];
         
         // Pour chaque bloc de resultat
         if(preg_match_all('#conteneur_resultat(.*)<span class=\'date\'>#Uis', $resultSearch, $matches)) {
            
            foreach($matches[1] as $v) {
               
               // Si il existe une plateforme PC
               if(preg_match("#href='/jeux/(.*)/(?:\#\w+)?' class(?:.*)<b>(.*)<span(.*)support pc(?:.*)</div>#Uis", $v, $pattern)) {
                  echo '<a href="jeux.php?jeux=' . urlencode($pattern[1]) . '">' . $pattern[2] . '</a><br />';
                  $i = 1;
               }
            }
         }
      }
      
      // On récupere la pages suivante
      if(preg_match('#<div class=\'textsuiv\'>(?:.*)([0-9]\.html)(?:.*)</div>#Uis', $resultSearch, $pattern)) $pageSuivante = $pattern[1];
      // Sinon on sort de la boucle
      else break;
   }
   
   if(!isset($i)) echo 'Aucun jeux trouvé.';
}

if(isset($_GET['jeux']) && !empty($_GET['jeux'])) {
   
   // On récupere l'ID de la plateform PC
   if(preg_match("#tab_pf\['pc'\] = (\d+);#Uis", file_get_contents('http://www.jeuxvideo.fr/jeux/' . $_GET['jeux'] . '/#pc'), $pattern)) {
      
      $data = array('id' => $pattern[1]);
      $data = http_build_query($data);
   
      // Crée un contexte de flux
      $context_options = array (
            'http' => array (
               'method' => 'POST',
               'header'=> "Content-type: application/x-www-form-urlencoded\r\n"
                  . "Content-Length: " . strlen($data) . "\r\n",
               'content' => $data
               )
            );
      $context = stream_context_create($context_options);
   
      // Lit tout un fichier dans une chaîne
      $page = file_get_contents('http://www.jeuxvideo.fr/fiche/fiche_v2_ajax.php/fiche/fiche_v2_ajax.php', false, $context);
      
      // trie du resultat
      if(preg_match('#config_minimale\'\)\.html\("<div>(.*)</div>"\)#Uis', $page, $pattern)) {
         // explode parceque j'ai envie
         $confMinimale = explode('</div><div>',  $pattern[1]);
         // on affiche la config
         foreach($confMinimale as $k => $v) {
            echo $v . '<br />';
         }
      }
      else echo '"jeuxvideo.fr" ne posséde aucune information sur la configuration minimal de ce jeu.';
   }
}
?>
</body>
</html>

Rapporter au modérateur  
Re:Recupéré code source page file_get_contents()
« Répondre #10 sur: le 15-04-2010 a 00:10:39 »
Neo92
Membre récent
*

Hors-Ligne

Messages: 7





Voir le Profil    E-Mail
Répondre avec citation

Tu es mon sauveur !!! merci beaucoup pour ton aide !

Rapporter au modérateur  
Répondre    Aviser des réponses    Envoyer le sujet    Imprimer
Pages: [1] Monter
« Précédent Suivant »
Sauter à: 

Votre statut : Invité
Vous devez être membre pour participer.
 
 
Let’s Encrypt : le certificat SSL gratuit
Tester votre site internet sur différents navigateurs
[WordPress] Des problèmes avec l’administration ?
Rappel : Mettez à jour vos CMS et vos sites E-commerce
Le .fr fête ses 25 années d’existence !
Mesurer votre audience en temps réel avec BubbleStat
Porter réclamation contre Google Panda ?
Zlio n’est plus …
 
 
 
 
 

Copyright (c) Devclic 2002 - 2026 - Tous droits réservés

creation site internet strasbourg