exploiter donnée api

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : exploiter donnée api

Re: exploiter donnée api

par albator59 » 05 nov. 2013, 10:40

Non toujours pas j'ai un peu modifié le code en mettant tout dans une seule classe, j'arrive à récupérer le compte d'email mais il ne prend pas en paramètre l'ensemble des noms de domaines pour pouvoir afficher le nombre d'email envoyé de chaque ..

Voici mon code :
<?php 

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

class Domaine extends Mailjet
{
	private $smtp;


    private $methodeDomaine = 'userDomainlist';
	private $methodeSend = 'reportEmailstatistics';

	private $option = array();
	// private $optionSend = array(1 =>"NULL", 2 => "NULL", from_domain => "medialta.com", 4 => "NULL", 5 => "NULL", 6 => "NULL", 7 => "NULL", 8 => "NULL", 9 => "NULL", 10 => "NULL");

	private $type = 'GET';

	public function __construct()
	{
		$this->smtp = new Mailjet();
		$this->option = new Mailjet();
	}

	public function NomDomaine()
	{
		$therequest = $this->smtp->sendRequest($this->methodeDomaine,$this->option,$this->type);

		if($therequest === true)
		{ 

			$outgoingDomaine = $this->smtp->_response;

			foreach( $outgoingDomaine->domains as $valeur)  
			    { 
				    echo '<tr><td>'.$valeur->domain.'</td></tr>';
			    }
			
			$this->id_domaine = array($valeur->domain);
			return $this->id_domaine;
		} 
		else{ 
			echo "Erreur de r&eacute;cup&eacute;ration des donn&eacute;es";
		}

	}

	public function TotalMailSend()
	{	

		$therequest = $this->smtp->sendRequest($this->methodeSend,$this->optionSend,$this->type);

		if($therequest === true)
		{
			$outgoingMailSend = $this->smtp->_response;

			foreach( $this->NomDomaine() as $valeur)  
			    { 
				    echo '<td>'.$outgoingMailSend->stats->cnt_messages.'</td>';
			    } 
		} 
		else
		{ 
			echo "Erreur de r&eacute;cup&eacute;ration des donn&eacute;es";
		}
	}

	public function Tableau()
	{
		$ndd = $this->NomDomaine();
		print_r($this->id_domaine);
		foreach ($ndd as $value) 
		{
			$this->optionSend = array(1 =>"NULL", 2 => "NULL", from_domain => $this->id_domaine, 4 => "NULL", 5 => "NULL", 6 => "NULL", 7 => "NULL", 8 => "NULL", 9 => "NULL", 10 => "NULL");
			$this->TotalMailSend($this->optionSend);
		}

	}
}
?> 
Quelqu'un à une idée ?

Re: exploiter donnée api

par Invité » 29 oct. 2013, 11:18

Bonjour,

Moi aussi j'aimerais faire quelque chose de semblable avec mailjet vous avez réussi à faire ce que vous vouliez ?

Cordialement Jean,

Re: exploiter donnée api

par albator59 » 16 oct. 2013, 11:37

Bonjour à toi,
que ta question est mal formulée : reformule-la différemment ;
Pas de soucis je vais faire cela :

Ayant un peu avancé par rapport à il y a 4 jours, j'ai trouver les méthodes qui théoriquement doivent me permettre de faire ce que j'ai besoin du coup je l'ai ai un peu travaillé voici maintenant mon code :
<?php 

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

class MailSendDomaine extends Mailjet
{
	private $smtp;

    private $methode = 'reportEmailstatistics';

    //je lui passe le nom des domaines en paramètre pour qu'il compte le nombre d'E-mail envoyé par dommaine 
	private $option = array();

	private $type = 'GET';

	public function __construct()
	{
		$this->smtp = new Mailjet();
		$this->option = new Mailjet();

	}

	public function TotalMailSend()
	{
		$this->option = array(1 =>"NULL",2 => "NULL", 3 => $id_domaine);
		$therequest = $this->smtp->sendRequest($this->methode,$this->option,$this->type);
		if($therequest === true)
		{ 

		$outgoingMailSend = $this->smtp->_response;

		foreach( $outgoingMailSend->stats as $valeur)  
		    { 
			    echo '<td>'.$valeur->cnt_messages.'</td>';
		    } 
		} 
		else{ 
			echo "Erreur de r&eacute;cup&eacute;ration des donn&eacute;es";
		}
	}
}
?> 
<?php 

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

class Domaine extends Mailjet
{
	private $smtp;

    private $methode = 'userDomainlist';

	private $option = array();

	private $type = 'GET';

	public function __construct()
	{
		$this->smtp = new Mailjet();
		$this->oMailSend = new MailSendDomaine();
	}

	public function NomDomaine()
	{
		$therequest = $this->smtp->sendRequest($this->methode,$this->option,$this->type);

		if($therequest === true)
		{ 

		$outgoingDomaine = $this->smtp->_response;

		$id_domaine = $this->outgoingDomaine->domains;

		var_dump($id_domaine);

		foreach( $outgoingDomaine->domains as $valeur)  
		    { 
			    echo '<tr><td>'.$valeur->domain.'</td></tr>';
			    
			    $this->oMailSend->TotalMailSend();
		    } 

		} 
		else{ 
			echo "Erreur de r&eacute;cup&eacute;ration des donn&eacute;es";
		}
	}
}
?> 
Je vous soulagerais du code HTML c'est un simple tableau avec instanciation d'une classe et un appel de méthode.

ET ça c'est la classe de l'api :
<?php

/**
 * Mailjet Public API
 *
 * @package		API v0.1
 * @author		Mailjet
 * @link		http://api.mailjet.com/
 *
 */

class Mailjet
{
	var $version = '0.1';

	# Choose your weapon : php, json, xml, serialize, html, csv
	var $output = 'json'; 
    
	# Connect thru https protocol
	var $secure = true;
	
	# Mode debug ? 0 none / 1 errors only / 2 all
	var $debug = 2;

	# Edit with your Mailjet Infos
	var $apiKey = 'VOUS N'EN AVEZ PAS BESOIN  '; 
	var $secretKey = 'VOUS N'EN AVEZ PAS BESOIN  ';  


	// Constructor function
	public function __construct($apiKey = false, $secretKey = false)
	{
		if( $apiKey ) $this->apiKey =$apiKey;
		if( $secretKey ) $this->secretKey =$secretKey;
		$this->apiUrl = (($this->secure) ? 'https' : 'http').'://api.mailjet.com/'.$this->version.''; 
	}
    
	public function __call($method,$args) {

    	# params
    	$params = (sizeof($args) > 0) ? $args[0] : array();

    	# request method
    	$request = isset($params["method"]) ? strtoupper($params["method"]) : 'GET';

    	# unset useless params
    	if(isset($params["method"])) unset($params["method"]);

		# Make request
		$result = $this->sendRequest($method,$params,$request);

		# Return result
		$return = ($result === true) ? $this->_response : false;
		
		if( $this->debug == 2 || ( $this->debug == 1 && $return == false ) ){
			$this->debug();
		}
		
		return $return;
	}
    
	public function requestUrlBuilder($method,$params=array(),$request) {



		$query_string = array('output'=>'output='.$this->output);


    	foreach($params as $key=>$value) {
	    	if($request == "GET" || in_array($key,array('apikey','output'))) $query_string[$key] = $key.'='.urlencode($value);
	    	if($key == "output") $this->output = $value;
    	}
    
    	$this->call_url = $this->apiUrl.'/'.$method.'/?'.join('&',$query_string);
    	
    	return $this->call_url;

	}
    
	public function sendRequest($method = false,$params=array(),$request="GET") {
		# Method
		$this->_method = $method;
		$this->_request = $request;

		# Build request URL
		$url = $this->requestUrlBuilder($method,$params,$request);

		# Set up and execute the curl process  
		$curl_handle = curl_init();  
		curl_setopt($curl_handle, CURLOPT_URL, $url);  
		curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);  
		curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, FALSE); 
		curl_setopt($curl_handle, CURLOPT_SSL_VERIFYHOST, 2); 
		curl_setopt($curl_handle, CURLOPT_USERPWD, $this->apiKey.':'.$this->secretKey);

		$this->_request_post = false;
		if($request == 'POST') :
			curl_setopt($curl_handle, CURLOPT_POST, count($params));
			curl_setopt($curl_handle, CURLOPT_POSTFIELDS, http_build_query($params, '', '&'));
			$this->_request_post = $params; 
		endif;


		$buffer = curl_exec($curl_handle);  
		
		if($this->debug>2) var_dump($buffer);

		# Response code
		$this->_response_code = curl_getinfo($curl_handle,CURLINFO_HTTP_CODE);

		# Close curl process
		curl_close($curl_handle);  

		# RESPONSE 
		$this->_response = ($this->output == 'json') ? json_decode($buffer) : $buffer;

		return ($this->_response_code == 200) ? true : false;
	
	}



	public function debug() {
		echo '<style type="text/css">';
		echo '

		#debugger {width: 100%; font-family: arial;}
		#debugger table {padding: 0; margin: 0 0 20px; width: 100%; font-size: 11px; text-align: left;border-collapse: collapse;}
		#debugger th, #debugger td {padding: 2px 4px;}
		#debugger tr.h {background: #999; color: #fff;}
		#debugger tr.Success {background:#90c306; color: #fff;}
		#debugger tr.Error {background:#c30029 ; color: #fff;}
		#debugger tr.Not-modified {background:orange ; color: #fff;}
		#debugger th {width: 20%; vertical-align:top; padding-bottom: 8px;}

		';
		echo '</style>';

		echo '<div id="debugger">';

		if(isset($this->_response_code)) :

			if($this->_response_code == 200) :

				echo '<table>';
				echo '<tr class="Success"><th>Success</th><td></td></tr>';
				echo '<tr><th>Status code</th><td>'.$this->_response_code.'</td></tr>';

				if(isset($this->_response)) :
					echo '<tr><th>Response</th><td><pre>'.utf8_decode(print_r($this->_response,1)).'</pre></td></tr>';
				endif;

				echo '</table>';

			elseif($this->_response_code == 304) :

				echo '<table>';
				echo '<tr class="Not-modified"><th>Error</th><td></td></tr>';
				echo '<tr><th>Error no</th><td>'.$this->_response_code.'</td></tr>';
				echo '<tr><th>Message</th><td>Not Modified</td></tr>';
				echo '</table>';

			else :

				echo '<table>';
				echo '<tr class="Error"><th>Error</th><td></td></tr>';
				echo '<tr><th>Error no</th><td>'.$this->_response_code.'</td></tr>';
				if(isset($this->_response)) :
					if( is_array($this->_response) OR  is_object($this->_response) ):
						echo '<tr><th>Status</th><td><pre>'.print_r($this->_response,true).'</pre></td></tr>';
					else:
						echo '<tr><th>Status</th><td><pre>'.$this->_response.'</pre></td></tr>';
					endif;
				endif;
				echo '</table>';

			endif;

		endif;

		$call_url = parse_url($this->call_url);

		echo '<table>';
		echo '<tr class="h"><th>API config</th><td></td></tr>';
		echo '<tr><th>Protocole</th><td>'.$call_url['scheme'].'</td></tr>';
		echo '<tr><th>Host</th><td>'.$call_url['host'].'</td></tr>';
		echo '<tr><th>Version</th><td>'.$this->version.'</td></tr>';
		echo '</table>';

		echo '<table>';
		echo '<tr class="h"><th>Call infos</th><td></td></tr>';
		echo '<tr><th>Method</th><td>'.$this->_method.'</td></tr>';
		echo '<tr><th>Request type</th><td>'.$this->_request.'</td></tr>';
		echo '<tr><th>Get Arguments</th><td>';

		$args = explode("&",$call_url['query']);
		foreach($args as $arg) {
			$arg = explode("=",$arg);
			echo ''.$arg[0].' = <span style="color:#ff6e56;">'.$arg[1].'</span><br/>';
		}
		
		echo '</td></tr>';
		
		if($this->_request_post){
			echo '<tr><th>Post Arguments</th><td>';
		
			foreach($this->_request_post as $k=>$v) {
				echo $k.' = <span style="color:#ff6e56;">'.$v.'</span><br/>';
			}
	
			echo '</td></tr>';
		}

		echo '<tr><th>Call url</th><td>'.$this->call_url.'</td></tr>';
		echo '</table>';

		echo '</div>';
	}
}
Voici la doc des méthodes que j'utilisent (ne prenez pas peur il y a juste quelques lignes sur ce quelle fait ce qu'elle retourne et ses éventuels argument :

https://fr.mailjet.com/docs/api/report/emailstatistics

Et maintenant voici le problème c'est que $id_domaine est nul du coup la méthode qui compte les message en prenant en paramètre le nom du domaine bah elle ne le comprend pas et ça ne fonctionne pas, une idée de comment le récupérer et l'envoyer en paramètre de reportEmailSend ? ?

Donc voila je ne demande pas que l'on fasse le travail à ma place j'aimerais juste que l'on pointe du doigt mes grossière erreurs et que l'on me donne d'éventuelles pistes ou alors que l'on me dise franchement que vous ne pouvez pas m'aidez par manque de temps d'envie ou de compétence, je n'en voudrais à personne sachant que c'est pour moi un loisir et ça me permet juste de progresser.
que personne ne connaît la réponse ici : faire un "up" ne te donnera pas davantage de résultats ;
Je sais que je ne suis pas excusable pour cette pratique mais il se peut que des personnes soient passées à coté du sujet sans forcément le voir.
que la réponse demandée exige un travail important que personne ne va faire à ta place ;
Dans ce cas pourquoi ne pas me le dire :D

En tout cas je m'excuse encore pour cette pratique interdite ça sera la dernière .

J'espère avoir répondu à vos interrogations!

Cordialement.

Re: exploiter donnée api

par moogli » 16 oct. 2013, 10:28

Modération :
Les "up" sont interdits sur PHPFrance.

Si tu n'as pas obtenu de réponse, c'est (au choix) :
- que ta question est mal formulée : reformule-la différemment ;
- que personne ne connaît la réponse ici : faire un "up" ne te donnera pas davantage de résultats ;
- que la réponse demandée exige un travail important que personne ne va faire à ta place ;
- que trop peu de temps s'est écoulé depuis ton précédent message pour qu'un membre ait pu y répondre.

Merci de prendre le temps de lire les règlements.


en dehors de cela, on ne connais pas forcément ta librairie.
Peux être qu'elle ne peux pas faire ce que tu souhaite ?
as tu posé la question au développeur de cette librairie ?

@+

Re: exploiter donnée api

par Invité » 16 oct. 2013, 09:10

Petit up les amis car j'ai progresser mais c'est pas ça du tout encore !

exploiter donnée api

par albator59 » 11 oct. 2013, 12:45

Bonjour,

J'aimerais réaliser une petite interface web simpliste issu d'une aPI (mailjet) pour me simplifier la vie avec la gestion de mon compte d'emailling du style :

Image

J'arrive à récupérer le nom de domaine voila comment je procède :
<?php 
 
require_once('php-mailjet.class-mailjet-0.1.php');
 
class Domaine extends Mailjet
{
	private $smtp;
 
    private $methode = 'userDomainlist';
 
	private $option = array();
 
	private $type = 'GET';
 
	public function __construct()
	{
		$this->smtp = new Mailjet();
	}
 
	public function NomDomaine()
	{
		$therequest = $this->smtp->sendRequest($this->methode,$this->option,$this->type);
 
		if($therequest === true)
		{ 
 
		$outgoing = $this->smtp->_response;
 
		foreach( $outgoing->domains as $valeur)  
		    { 
			    echo '<tr><td>'.$valeur->domain.'</td></tr>';
		    } 
 
		} 
		else{ 
			echo "Erreur de r&eacute;cup&eacute;ration des donn&eacute;es";
		}
	}
}
?>
<?php 
 
require_once('php-mailjet.class-mailjet-0.1.php');
 
class Domaine extends Mailjet
{
	private $smtp;
 
    private $methode = 'userDomainlist';
 
	private $option = array();
 
	private $type = 'GET';
 
	public function __construct()
	{
		$this->smtp = new Mailjet();
	}
 
	public function NomDomaine()
	{
		$therequest = $this->smtp->sendRequest($this->methode,$this->option,$this->type);
 
		if($therequest === true)
		{ 
 
		$outgoing = $this->smtp->_response;
 
		foreach( $outgoing->domains as $valeur)  
		    { 
			    echo '<tr><td>'.$valeur->domain.'</td></tr>';
		    } 
 
		} 
		else{ 
			echo "Erreur de r&eacute;cup&eacute;ration des donn&eacute;es";
		}
	}
}
?>
J'ai trouver une méthode qui compte les messages envoyé et on peut lui spécifié un filtre avec l'id du domaine que l'on veut et moi j'aimerais que pour chaque ligne je récupére cet id et qu'il puisse m'afficher le nombre d'email envoyé depuis ce domaine mais je n'arrive pas à trouver l'algo ..

I need help :roll: