Tester compte Xbox / Récupérer iframe

Résolu/Fermé
jiantox Messages postés 1081 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 26 janvier 2019 - 14 sept. 2016 à 12:04
jiantox Messages postés 1081 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 26 janvier 2019 - 16 sept. 2016 à 08:58
Bonjour,

j'essaie de développer un système permettant de tester l'existence d'un compte Xbox.

J'ai fais un script pour tester l'existence d'un compte PSN et ça a été beaucoup plus simple : Chez sony, il crée une image contenant les infos du compte. On a juste donc à tester si l'image existe.
Chez microsoft ils utilisent des iframes, et que le compte existe ou pas, l'iframe existe elle.
J'ai en revanche remarqué que si le compte existe la div id="Gamerscore" est à 0 ou plus alors que s'il n'existe pas elle est à "--". C'est donc sur ce point que je voudrais faire ma vérification.

Actuellement j'affiche les iframes directement avec ceci :
<iframe src="https://gamercard.xbox.com/fr-FR/'.$v['xbox'].'.card" >[...]</iframe>

On vois donc lorsqu'on se rend et qu'on examine cette page, que son score est à 0 (le compte existe) :
https://gamercard.xbox.com/fr-FR/trucmachin.card

En revanche celui-ci c'est "--" : https://gamercard.xbox.com/fr-FR/zerzdfzefzef.card il n'existe pas.

Comment faire pour aller, en php, récupérer le contenu de la div "Gamerscore" de cette page et le tester, avant d'afficher ou non l'iframe ?

En esperant avoir été assez clair :D Merci d'avance !

5 réponses

ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
14 sept. 2016 à 12:20
Salut,

tu peux essayer de parser ton code avec ça :
https://simplehtmldom.sourceforge.io/
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
Modifié par Pitet le 14/09/2016 à 12:36
Salut,

Un début d'idée avec DOMDocument :
$doc = new DOMDocument();
$doc->loadHTML(file_get_contents('https://gamercard.xbox.com/fr-FR/zerzdfzefzef.card'));

$elementGamerscore = $doc->getElementById('Gamerscore');

if ($elementGamerscore) {
    echo $elementGamerscore->nodeValue;
}


Bonne journée,
0
Utilisateur anonyme
14 sept. 2016 à 19:50
Ici le file_get_contents ne peux pas marcher à cause du SSL.
0
Utilisateur anonyme
14 sept. 2016 à 12:42
Tu as juste à récupérer la page donner par l'iframe avec curl, puis tu fais du DOM Parsing avec DOMDocument pour récupérer le contenu de la div avec l'id Gamerscore pour récupérer le score et voir si c'est un nombre avec is_numeric.

Tu obtiens un truc comme ça:

<?php 
$user = "trucmachin"; // Existe
$user = "sdqsdqsdqjnsqdkjsd"; // N'existe pas
$content = get_web_page("https://gamercard.xbox.com/fr-FR/$user.card")['content'];
$dom = new DomDocument();
@$dom->loadHTML($content);
$gamerscore = $dom->getElementById("Gamerscore");
var_dump(is_numeric($gamerscore->nodeValue));

function get_web_page( $url )
{
    $options = array(
        CURLOPT_RETURNTRANSFER => true,     // Retourne la page
        CURLOPT_HEADER         => false,    // Ne retourne pas l'en-tête
        CURLOPT_FOLLOWLOCATION => true,     // Suis les redirection
        CURLOPT_ENCODING       => "",       // Encodage
        CURLOPT_USERAGENT      => "spider", // Qui sui-je
        CURLOPT_AUTOREFERER    => true,     // Mettre un "referer"
        CURLOPT_CONNECTTIMEOUT => 120,      // Temps pour déconnexion
        CURLOPT_TIMEOUT        => 120,      // Temps max pour la réponse
        CURLOPT_MAXREDIRS      => 10,		// Stop après 10 redirections
        CURLOPT_SSL_VERIFYPEER => false,    // Ne vérifie pas le SSL      
    );

    $ch      = curl_init( $url );
    curl_setopt_array( $ch, $options );
    $content = curl_exec( $ch );
    $err     = curl_errno( $ch );
    $errmsg  = curl_error( $ch );
    $header  = curl_getinfo( $ch );
    curl_close( $ch );

    $header['errno']   = $err;
    $header['errmsg']  = $errmsg;
    $header['content'] = $content;
    return $header;
}
?>
0
jiantox Messages postés 1081 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 26 janvier 2019 114
14 sept. 2016 à 17:31
Merci à tous pour vos réponses, j'essaie ça dès demain et je vous tiens au courant :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jiantox Messages postés 1081 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 26 janvier 2019 114
16 sept. 2016 à 08:58
Bonjour,

je viens de mettre en place le petit script de Pitet (avec un http au lieu du https) et ça marche parfaitement !

$doc = new DOMDocument();
$doc->loadHTML(file_get_contents('http://gamercard.xbox.com/fr-FR/'.$_POST['xbox'].'.card'));

$elementGamerscore = $doc->getElementById('Gamerscore');
if ($elementGamerscore) {
$score = $elementGamerscore->nodeValue;
if ($score == '--') { // message d'erreur }
else { // validation }
}


Merci beaucoup !
0