Code : Tout sélectionner
object(SimpleXMLElement)[1]
public 'title' => string 'Forty What?' (length=11)
public 'from' => string 'Joe' (length=3)
public 'to' => string 'Jane' (length=4)
public 'body' => string '
I know that's the answer -- but what's the question?
' (length=57)
Code : Tout sélectionner
SimpleXMLElement Object ( [title] => Forty What? [from] => Joe [to] => Jane [body] => I know that's the answer -- but what's the question? )echo 'extraction du body'.'<br />';
$xml->body;
echo 'extraction du title'.'<br />';
$xml->title;
J'ai uniquement les messages echo, mais pas l'information de l'objet.<?php
// definition des variables
$uri = "http://www.pandorabots.com/pandora/talk-xml";
$botid = 'bb9d8db85e36d4b9'; // ce bot s'appelle ssm2017 et il me sert de test ( ne vous attendez pas à ce qu'il vous parle de shakespeare )
$input = 'salut';
$custid = '';
// construction de la chaine à poster
$post = "botid=$botid&input=$input&custid=$custid";
// ouverture d'un "buffer" ( mettre les donnees en cache )
ob_start();
// definition des options de curl
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $uri); // uri où aller
// curl_setopt($ch, CURLOPT_HEADER, 0); // ajout
curl_setopt($ch, CURLOPT_TIMEOUT, 9); // arret au bout de 9 secondes si aucune reponse
curl_setopt($ch, CURLOPT_POST, TRUE); // oui monsieur, on envoie des donnees en POST
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); // les donnees à envoyer
curl_setopt($ch, CURLOPT_POSTFIELDSIZE, strlen($post)); // la quantite de donnees à envoyer ( optionnel )
// execution de curl
curl_exec($ch);
// recuperation du contenu du cache
$string = ob_get_contents();
// affichage du message d'erreur si il y en a un
if (curl_errno($ch)) {
echo "Error: " . curl_error($ch);
return; // on se casse, on a plus rien à faire ici, ca deconne :)
}
// arret de curl
curl_close($ch);
// vidage du cache
ob_end_clean();
// convertion du resultat en objet xml
$xml = simplexml_load_string($string);
// utilisation d'une requete "xpath" pour "pointer" l'element "that"
$result = $xml->xpath('/result/that');
// balayage des reponses
while(list( , $node) = each($result)) {
// affichage du/des resultat(s)
echo 'that = ',$node,"\n";
}
?>
Le script me donne le message d'erreur : Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 2: parser error : Extra content at the end of the document in F:\Program Files\EasyPHP5.2.10\www\bot.php on line 42
$url = 'http://www.pandorabots.com/pandora/talk-xml';
$query = array('botid' => 'c515e91c1e36b68b',
'input' => 'salut',
'custid' => '');
$context = stream_context_create(array('http' => array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => http_build_query($query))));
libxml_set_streams_context($context);
$xml = simplexml_load_file($url);
var_dump($xml);<html>
<head>
<title>Bot mctarek</title>
</head>
<body>
<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="hidden" name="botid" value="bb9d8db85e36d4b9"/>
<input type="hidden" name="custid" value=""/>
<input name="input" type="text" value=""/>
<input name="submit" type="submit"/>
</form>
</body>
</html>
[php]
<?php
// var_dump($_POST);
// exit;
$url = 'http://www.pandorabots.com/pandora/talk-xml';
$query = array('botid' => 'bb9d8db85e36d4b9',
'input' => @$_POST['input'],
'custid' => '');
$context = stream_context_create(array('http' => array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => http_build_query($query)))
);
libxml_set_streams_context($context);
$xml = simplexml_load_file($url);
var_dump($xml);
echo '<br />';
foreach($xml as $cle=>$valeur)
{
echo $cle.'>'.$valeur.'<br />'; // affiche uniquement input et that - comment récupérer custid?
}
// echo $xml->input;
// echo $xml->that;
?>
[/PHP]
Code : Tout sélectionner
$xml = simplexml_load_file($url);Code : Tout sélectionner
libxml_set_streams_context($context); Code : Tout sélectionner
simplexml_load_file($url);
cURL est utilisé par ignorance des contextes de stream. C'est utilise pour certain cas mais ici non, d'ailleurs si tu regardes bien cURL ne fais que mettre le contenu de la page dans une variable qui est ensuite lu par simpleXML, alors qu'en stream on lit directement l'URL.Merci. Mon problème étant à 100% résolu, je me demande pourquoi ne pas avoir continué avec CURL
comme dans le premier script. En fait, j'essaie de comprendre la portée pratique de Curl comme je viens
de comprendre la portée pratique de simplexml.
mctarek
$url = "http://www.pandorabots.com/pandora/talk-xml";
$query = array('botid' => 'c515e91c1e36b68b',
'input' => 'salut',
'custid' => '');
$ch = curl_init();
curl_setopt_array($ch, array(CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query($query)));
$string = curl_exec($ch);
curl_close($ch);
$xml = simplexml_load_string($string);
var_dump($xml);