[RESOLU] exploiter les données d'une aPI

Eléphanteau du PHP | 12 Messages

07 oct. 2013, 15:26

Bonjour à tous, et merci de prendre le temps de lire mon topic.

J'aimerais pour me faciliter la vie faire une petite interface web simpliste qui me permettrais d'exploiter les données de l'API de mailjet. (un prestataire de service d'emailling)

Voila j'aimerais faire un simple tableau qui contiendrais tous les domaines et toute les adresses que j'héberge et que je puisse avoir le compte d'email envoyés par domaine et par email.

Cette API met à notre disposition un certain nombre de méthode qui nous permettent d'envoyer des requêtes (cachées) pour répondre à notre besoin mais voilà aucune ne correspond à mon besoin.

Voila un petit exemple de comment marche l'API et du retur que l'on a :
<?php 

require_once('php-mailjet.class-mailjet-0.1.php');

$smtp = new Mailjet();

$methode = 'userSenderlist';

$option = array();

$type = 'GET';

$therequest = $smtp->sendRequest($methode,$option,$type);

if($therequest === true){ 

$outgoing = $smtp->_response; 
?>
<pre>
<?php
print_r($outgoing);
?>
</pre>
<?php

} 
else{ 
	echo "erreur de récupération des données";
}

?> 
Et voici la réponse de la méthode que l'on a appelée :
stdClass Object
(
    [status] => OK
    [senders] => Array
        (
            [0] => stdClass Object
                (
                    [id] => 2454881869
                    [email] => *@****.fr
                    [label] => *****
                    [enabled] => 1
                    [email_type] => undefined
                    [status] => active
                    [type] => domain
                    [domain] => ******.fr
                )
        )
J'ai volontairement masqué les données en rapport avec le client dans un soucis de confidentialité :D Mais ceci n'est pas bloquant dans la compréhension de mon problème.

Donc j'aimerais savoir comment puis-je procéder pour exploiter ses données sous la forme que je veux c'est a dire un tableau avec domaine email et le nombre d'email envoyés.

Il existe des méthode qui comptent les email mais aucune ne renvois exactement les données dont j'ai besoin :/

J'ai besoin de votre aide :D

Eléphant du PHP | 116 Messages

07 oct. 2013, 15:56

Salut,

Cet exemple te permet de créer un objet "fictif/vide" :
$object = new StdClass;
$object->foo = 'bar';
echo $object->foo;
Du coup, pour récupérer les valeurs de ton tableau :

$outgoing->statuts devrait valoir OK, et $outgoing->senders devrait être un array.

Et qui dit array dit boucle de lecture ! Alors tu boucles !

A plus tard !
@+,
Computarelier

Eléphanteau du PHP | 12 Messages

07 oct. 2013, 16:03

Cet exemple te permet de créer un objet "fictif/vide"
Je ne comprend pas bien pourquoi j'aurais besoin de créer un objet fictif/vide

Et comment boucler pour remplir un tableau avec des données si l'on ne connait pas les champs qu'elle renvois, on voit juste un label qui ne nous dit en rien que c'est comme cela qu'ils se nomment ne BDD.

Eléphant du PHP | 116 Messages

07 oct. 2013, 18:42

Salut,

Non, tu n'as pas besoin de créer de stdClass. Mais mon exemple a l'avantage de te montrer une fois qu'on a une classe de ce genre, comment on l'exploite ! Teste mon petit bout de code et fait un print_r sur l'objet : même affichage.
Du coup, pour récupérer les valeurs de ton tableau :

$outgoing->statuts devrait valoir OK, et $outgoing->senders devrait être un array.
Et pour boucler bah tu fais comme tu veux : un while, un for en fonction des besoins !

A bientôt,
@+,
Computarelier

Eléphanteau du PHP | 12 Messages

08 oct. 2013, 09:16

Ah oui ! Je vois ce que vous avez voulu me faire comprendre ! :D Je vais éssayer de tester ça dans la matinée si j'ai le temps, je vous tiens au courant de mon avancé, merci !

Eléphanteau du PHP | 12 Messages

08 oct. 2013, 15:18

Voilà j'ai essayer de mettre en application tes conseils :
if($therequest === true){ 

$outgoing = $smtp->_response;

$result = $outgoing->senders; 


for($i=0;$i<sizeof($result);$i++)  
    { 
    echo $result[$i].'<br>'; 
    } 

} 
else{ 
	echo "erreur de récupération des données";
}
Et la ça me renvois comme message d'erreur : Catchable fatal error: Object of class stdClass could not be converted to string in /home/projetsm/www/mailjet/index.php on line 24

Et la je me retrouve à nouveau dans une impasse :(

Eléphant du PHP | 116 Messages

08 oct. 2013, 15:32

C'est normal. Regarde la forme du print_r que tu as mis dans ton premier message.

Si tu fais un print_r sur $resultats tu devrais voir que c'est un array, avec une seule entrée (index 0, donc). Et cette entrée c'est un stdClass. Du coup, pour l'exploiter tu peux faire :
//Tant que i < sizeof($reesultats) $i++
// echo $resultat[$i][id], echo echo $resultat[$i][type] etc...
Tu veux partir du principe que tu connais pas l'objet donné et tu veux l'explorer ? Alors :
foreach($objet as $atribut=>$methode){
    echo $atribut.'=>'.$methode;
}
Bon courage :-)
@+,
Computarelier

Eléphanteau du PHP | 12 Messages

08 oct. 2013, 16:43

J'ai testé votre premier piste avec le while résultat : Fatal error: Cannot use object of type stdClass as array in /home/projetsm/www/mailjet/index.php on line 24

Du coup j'ai donc cherché sur le net et quelqu'un avait le même problème que moi avec l'objet std et on lui conseillé d'utilisé foreach ce que j'ai donc fait :
$smtp = new Mailjet();

$methode = 'userSenderlist';

$option = array();

$type = 'GET';

$therequest = $smtp->sendRequest($methode,$option,$type);

if($therequest === true)
{ 

$outgoing = $smtp->_response;

foreach( $outgoing->senders as $index=>$valeur)  
    { 
	    echo $valeur[domain].'<br>';
    } 

} 
else{ 
	echo "erreur de récupération des données";
}

?> 
Même résultat, je ne comprend pas pourtant j'exploite un Array avec senders pourquoi il me dit que qu'il n'en est pas un ...

Eléphanteau du PHP | 12 Messages

09 oct. 2013, 12:00

Effectivement ce n'était qu'un Array d'OBJET et qui dis objet dit :
echo $valeur->domain.'<br>';
Enfin voila quoi beaucoup de recherche pour une si petite chose :(

Merci computarlier de m'avoir mis sur la piste, à bientôt !