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 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 3 juin 2013 à 09:57
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 3 juin 2013 à 09:57
A voir également:
- Curl_exec result
- Lexer result - Télécharger - Sport
- Not in a hypervisor partition (hvp=0) (verr_nem_not_available). vt-x is disabled in the bios for all cpu modes (verr_vmx_msr_all_vmx_disabled). result code: e_fail (0x80004005) component: consolewrap interface: iconsole {6ac83d89-6ee7-4e33-8ae6-b257b2e81be8} - Forum VirtualBox
- The system time is invalid. this may be a result of a loss in battery power ✓ - Forum PC portable
- Result code: e_invalidarg (0x80070057) - Forum VirtualBox
- Virtualbox-Erreur ✓ - Forum VirtualBox
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
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",[...)
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
29 mai 2013 à 14:15
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)
Pour parser le résultat, tu pourrais utiliser une expression régulière qui matche les contenus entre guillemets.
Tu peux faire comme cela :
Cela donne :
Dal
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
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
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:(
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:(
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié par [Dal] le 29/05/2013 à 15:36
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 :
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
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
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
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 :(
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 :(
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié par [Dal] le 29/05/2013 à 16:38
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
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
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
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