Resultat de curl_exec($ch)

Résolu/Fermé
abcd0 Messages postés 56 Date d'inscription mercredi 3 avril 2013 Statut Membre Dernière intervention 10 juillet 2013 - 29 mai 2013 à 09:05
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 3 juin 2013 à 09:57
Bonjour,

quand je récupère le resultat de $t=curl_exec($ch); il m'affiche ce résultat:
["Facebook",["Facebook","Facebook Messenger","Facebook (entreprise)",]]
moi je voudrais récupérer ce résultat ce forme d'un tableau comme ça :
array(
[0]=>Facebook
[1]=>Facebook Messenger
[2]=>Facebook(entreprise)

)
est ce que c'est possible ça!! car j'ai essayé mais ça marche pas
merci d'avance pour votre aide

2 réponses

abcd0 Messages postés 56 Date d'inscription mercredi 3 avril 2013 Statut Membre Dernière intervention 10 juillet 2013
29 mai 2013 à 13:12
j'ai fait un explode (",") par rapport à la virgule mais ça marche pas vraiment car il ya les "" et [; je ne sais pas comment recupérer le résultat de curl_setopt directement dans un tableau simple sans afficher me terme saisi (dans mon cas le premier ["facebook",[...)
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
29 mai 2013 à 14:15
Salut abcd0,

Pour ne pas afficher mais retourner le résultat dans la variable seulement, tu ajoutes l'option suivante avant ton appel $t=curl_exec($ch)

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

Pour parser le résultat, tu pourrais utiliser une expression régulière qui matche les contenus entre guillemets.

Tu peux faire comme cela :

<?php

$t = '["Facebook",["Facebook","Facebook Messenger","Facebook (entreprise)",]]';

preg_match_all('/"([^"]*)"/', $t, $matches, PREG_SET_ORDER);

$m_count = count($matches);

echo "<p>We have $m_count elements</p>";

for ($i = 0; $i < $m_count; $i++)
{
        echo "<li>matches[$i][1] = " . $matches[$i][1] . "</li>";
}

?>

Cela donne :

We have 4 elements
matches[0][1] = Facebook
matches[1][1] = Facebook
matches[2][1] = Facebook Messenger
matches[3][1] = Facebook (entreprise)

Dal
0
abcd0 Messages postés 56 Date d'inscription mercredi 3 avril 2013 Statut Membre Dernière intervention 10 juillet 2013
29 mai 2013 à 14:47
pour enlever les caractères spéciaux ça marche merci
mais je ne sais pas est ce que je peux appliquer ce curl_setopt sur un tableau à deux dimension
j'ai essayé avec des boucles et pas de succès:(
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié par [Dal] le 29/05/2013 à 15:36
curl_setopt permet le passage de paramètres à curl, pas le retraitement de ce qu'il retourne : https://www.php.net/manual/fr/function.curl-setopt.php

L'expression régulière (dans preg_match_all) n'enlève pas les "caractères spéciaux", elle capture ce qui est entre deux paires de guillemets. C'est elle qui parse ton contenu (de façon très simpliste).

Montre à quoi correspond ton "tableau à deux dimension" en faisant un print_r :

<pre>
print_r($t);
</pre>

Autre question, quel est le format de retour de ton api, est-ce décrit quelque part ?

Une autre possibilité, si c'est un format compréhensible par Php, c'est de l'utiliser avec la fonction eval. Mais c'est dangereux du point de vue de la sécurité, car ton serveur va exécuter ce qu'on lui envoie, sauf à filtrer le contenu avant de l'envoyer à eval (avec une expression régulière qui vérifiera que le contenu qui sera passé à eval ne contient rien de suspect), et encore, personnellement, je ne le ferai pas.

La fonction eval est décrite dans la documentation Php :

https://www.php.net/manual/fr/function.eval.php

Mais son usage est en général découragé en raison des conséquences que cela peut avoir.

Disposer d'un format permettant de parser les données, du type JSON, XML, ou autre est beaucoup plus propre. Là, je ne vois pas, à première vue, à quoi correspond ce format. Il se peut qu'il existe un moyen de le parser proprement et de façon sûre.


Dal
0
abcd0 Messages postés 56 Date d'inscription mercredi 3 avril 2013 Statut Membre Dernière intervention 10 juillet 2013
29 mai 2013 à 15:53
mon code est sous cette forme:
curl_setopt($curl, CURLOPT_URL, 'http://fr.wikipedia.org/w/api.php?action=opensearch&search='.$tab[$i][$j].'&limit=100&namespace=0')."\n";
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
mon tableau est sous la forme:
array([0]=>array([0]=>table
[1]=>chaise
[2]=>buffet
...)
[1]=>array([0]=>pere
[1]=>enfant
[2]=>mère)
.
.
.
)
je voudrais récupérer pour chaque mot la liste des articles parlant sur ce mot dans wikipedia :(
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié par [Dal] le 29/05/2013 à 16:38
Si ce que tu affiche ci-dessus est le résultat de print_r, c'est du Php qui est renvoyé on dirait, et il serait directement utilisable avec eval (avec toutes les critiques que l'on peut faire à ce procédé).

J'ignore si c'est cette api que tu utilises : https://www.mediawiki.org/wiki/API:Main_page

Si c'est le cas, tu peux spécifier que le format que tu souhaites est JSON avec un argument format=json. Essaye d'introduire cet argument et vois si le format de retour est différent (il devrait se présenter entre accolades, et non entre crochets). D'ailleurs Wikimedia écrit "Even though the API supports many different output formats such as WDDX, XML, YAML and native PHP, there are plans to remove all formats excepts for JSON, so you might not want to use them."

Tu as des exemples de ce à quoi ressemble JSON là : http://json.org/example.html

Si oui, tu peux ensuite utiliser le JSON retourné avec json_decode :

https://www.php.net/manual/fr/function.json-decode.php


Dal
0
abcd0 Messages postés 56 Date d'inscription mercredi 3 avril 2013 Statut Membre Dernière intervention 10 juillet 2013
29 mai 2013 à 16:57
en faite le tableau que j'ai ecrit c'est le tableau à qui je veux appliquer curl_setopt, et je n'arrive pas à obtenir un résultat pour un tableau à deux dimensions si par exemple je specifie et je mets $tab[1][1] par exemple il m'affiche un résultat sinon il m'affiche rien quand j'écris tab[$i][$j] avec deux boucle for: et ce n'est pas mediawiki c 'est directement wikipedia
0