[RESOLU][php][xml] recuperer le xml convenablement

Bonjour la zone,

[Ma life]Joueur de eve online, il vient d’y avoir une grosse mise à jour sur le jeu, et ils ont mis en place une API pour récupérer des informations du jeu sans avoir le client du jeu. et j’aimerais bien récupérer tout cela[/Ma life]

Problème :
On contacte un serveur, en passant en paramètre POST plusieurs informations.
Celui-ci nous renvoi un xml des informations.

Environnement :
php 4, serveur appelé : IIS

ce que j’ai fait :
[codebox]function httpPostRequest($host, $path, $arrPostvars, $port=80, $referer="")
{
$arrEncodedPairs = array();
$res = «  »;

foreach ($arrPostvars as $var => $value)
$arrEncodedPairs[] = rawurlencode($var)."=".rawurlencode($value);
$postData = implode("&", $arrEncodedPairs);

$request = « POST $path HTTP/1.1\n ».
« Host: $host\n ».
(($referer) ? « Referer: $referer\n » : «  »).
« Content-type: application/x-www-form-urlencoded\n ».
« Content-length: « .strlen($postData). »\n ».
« Connection: close\n\n ».
$postData."\n";

// Some debug for you my friend :slight_smile:
print(« 

Request:\n ».htmlentities($request)."
");

if ($fp = fsockopen($host, $port))
{
if (fputs($fp, $request))
{
while(! feof($fp))
{
$res .= fgets($fp, 1024);
}
fclose($fp);
return $res;
}
}
}
$caractID=‹ 901938792 ›;
$userID=‹ 1231285 ›;
$apikey=‹ 16CkaZUFSYZEnfVMymXMs0nng8vcrZXX5y91wM2Tl4espQaWhtFtUfFLrJg5ql1o ›;
$host1=‹ api.eve-online.com ›;
$path1=’/char/CharacterSheet.xml.aspx’;
$arrPostvars1=array(
‹ characterID › => $caractID,
‹ userid › => $userID,
‹ apikey › => $apikey
);
$port1=80;
$referer1="";

$resultat=httpPostRequest($host1, $path1, $arrPostvars1, $port1=80, $referer1="");

echo $resultat; [/codebox]
Affichage de ce code : vous pouvez voir l’affichage ici test eve api

mais quand on teste en direct l’api avec le lien suivant il ne ressort pas la même chose.

Ce qui me parait logique pour l’instant, mais pourquoi en direct il ne m’affiche que le xml alors qu’avec le httprequest il me renvoi aussi les informations de connexion au serveur. bon encore c’est pas le plus gênant .
Car dans le code source de l’affichage php, dans la partie xml qui est renvoyé, au lieu de me fermer les balise xml directement, il me rajoute plein de a la fin du fichier.
Et la je comprend pas comment cela se fait que les 2 cas renvoient des informations différentes…

Deuxième partie [affichage]:
La deuxième partie, moins importante, ce serait de savoir comment faire avec un fichier xml pour qu’il s’affiche dans une page. j’ai entendu parler d’un feuille de style mais ce n’est pas un css. je vais regarder en détails mais si quelqu’un à l’information. B)

Merci d’avance

Ton code sort l’entête http de la requête, c’est normal que ça n’affiche pas que le document xml. C’est une requête. Quand tu envoies la requête chez Eve il la traite et te sort le doc xml et voilà. Donc toi, dans ton code, tu dois juste isoler le doc xml.

Pour le style, tu peux appliquer une feuille de style à ton document xml sans problème. Si tu veux le transformer en html (et ajouter des balises de mise en page) tu dois chercher du côté d’xsl. C’est un language basé sur xml permettant de transformer des jeux de balises d’un document en d’autres balises dans un autre document (en gros).

en effet c’est un feuille de style xsl.
le xml
[codebox]

<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE librairie [

]>

<?xml-stylesheet type="text/xsl" href="./pattern.xsl"?> La tragédie Cathare Georges Bordonove Napoléon T3 Max Gallo Le Second Empire Pierre Miquel La ligne verte Stephen King Histoires fantastiques Edgard A. Poe HTML 4 & XML Ralph Steyer 3D Studio 4 Emmanuel Forsans Illustrator 7.0 Mathieu Lavant La grammaire anglaise S. Berland-Délépine Philosophie Tles F G H Gérard Durozoi

[/codebox]
le xsl associé pattern.xsl
[codebox]

<?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:stylesheet version=“1.0” xmlns:xsl=“http://www.w3.org/1999/XSL/Transform”>
<xsl:output method=“html” encoding=“ISO-8859-1”/>
<xsl:template match="/">



    <xsl:apply-templates select=“librairie”/>



</xsl:template>

<xsl:template match=“librairie”>

  • <xsl:apply-templates select=“categorie/@nom”/>

  • </xsl:template>
    </xsl:stylesheet>
    [/codebox]

    Bon j’ai un peu avancé maintenant il me ressort un code source correct mais, je comprend pas pourquoi il me rajoute un 0 à la fin …

    En fait il rajoute 2 code, 13bc au début et 0 à la fin, donc je suppose que c’est un code utilisé pour quelque chose, mais pourquoi cela s’affiche, c’est en rapport avec l’entête http de la requête ?

    touours au même endroit
    et aussi le fichier test.xml avec le code récupéré qui provoque donc une erreur à cause du zéro

    EDIT : apparemment le premier code change, j’ai vu aussi “1c8”

    J’ai trouvé une solution mais bon je trouve pas ça très propre, je fais de la découpe pour récupérer ce qu’il me faut, j’aurais mieux voulu avoir direct le xml propre mais bon au moins je récupère les infos.
    mais j’ai toujours pas compris pourquoi il me renvoie des code bizarre avant et après le xml