Titre: Recupéré code source page file_get_contents()
Posté par: Neo92 le le 10-04-2010 a 11:08:37
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 ;) |
Titre: Re:Recupéré code source page file_get_contents()
Posté par: souifi le le 13-04-2010 a 17:18:20
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. |
Titre: Re:Recupéré code source page file_get_contents()
Posté par: Neo92 le le 13-04-2010 a 20:35:16
Wow ! Merci beaucoup pour ce travail excellent !!
j'essaye ca tout de suite !! encore merci !! |
Titre: Re:Recupéré code source page file_get_contents()
Posté par: Neo92 le le 13-04-2010 a 21:44:11
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 ! |
Titre: Re:Recupéré code source page file_get_contents()
Posté par: Neo92 le le 13-04-2010 a 21:55:33
| Ah je crois que j'ai trouver pour l'id c'est à partir de tab_pf['pc'] = 12108; c'est ca ? |
Titre: Re:Recupéré code source page file_get_contents()
Posté par: souifi le le 13-04-2010 a 21:58:33
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. |
Titre: Re:Recupéré code source page file_get_contents()
Posté par: Neo92 le le 13-04-2010 a 22:00:03
Exact oui. Ce qui m'intéresse serait:
Processeur, Mémoire RAM et Carte graphique
uniquement pour les config pc effectivement |
Titre: Re:Recupéré code source page file_get_contents()
Posté par: souifi le le 13-04-2010 a 22:04:08
| je te fait un petit truc vite fait... |
Titre: Re:Recupéré code source page file_get_contents()
Posté par: Neo92 le le 13-04-2010 a 22:05:35
| Oh super sympa t'assure ! |
Titre: Re:Recupéré code source page file_get_contents()
Posté par: souifi le le 14-04-2010 a 23:19:54
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> |
|
|
Titre: Re:Recupéré code source page file_get_contents()
Posté par: Neo92 le le 15-04-2010 a 00:10:39
| Tu es mon sauveur !!! merci beaucoup pour ton aide ! |
Forum-webmaster | Actionné par YaBB SE
© 2001-2003, YaBB SE Dev Team. Tous droits réservés.
|