explication d'un bloc php

Eléphanteau du PHP | 22 Messages

24 mai 2015, 17:29

Bonjour,
Je travaille sur un site sportif et pour cela j'utilise une API
Dans l'utilisation de cette API, j'ai un bloc en php qui me permet d'appeler les données fournies par cette API.
Ce bolc fonctionne mais en fait mon problème réside plutôt dans sa comprehension : je ne comprend pas ce qui se passe dans ce bloc !
Quelqu'en pourrai m'expliquer ce qui se passe, pourquoi par exemple on utilise $stream_context, et pourquoi on passe par plusieurs variables, au lieu d'en utiliser une seule.
Merci de votre aide !

define('CLEF','761f3154031441f79f501473b03ee97e');
	define('URL','http://api.football-data.org/alpha/soccerseasons/355/fixtures');

    // Cette partie permet d'appeler une adresse de l'API
    // On appel une adresse qui permet de recuperer le classement
	
        $reqPrefs['http']['method'] = 'GET';
        // clef gratuite a récupérer à l'adresse suivante http://www.football-data.org/register
        $reqPrefs['http']['header'] = 'X-Auth-Token: '.CLEF;
        $stream_context = stream_context_create($reqPrefs);
        $response = file_get_contents(URL, false, $stream_context);
        // reponse sous forme d'objet
        $fixtures = json_decode($response);

Mammouth du PHP | 688 Messages

24 mai 2015, 18:00

http://api.football-data.org/alpha/socc ... 5/fixtures
retourne du json, sans rien avoir à passer en plus.

il faudrait connaitre en détail l'api pour savoir ce que cela change de rajouter un X-Auth-Token; un moyen de ne pas se faire bloquer pour un nombre trop élevé de requetes, un moyen de personaliser le contenu ?
si cela ne change rien, alors on peut mettre :
$response = file_get_contents(URL);

Eléphanteau du PHP | 22 Messages

24 mai 2015, 21:59

mais du coup ca fait quoi exactement $response = file_get_contents(URL, false, $stream_context); ?
pouvez vous m'expliquer ce qui se passe à chaque ligne pour que je puisse comprendre le code svp ?
Merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 mai 2015, 23:05

define('CLEF','761f3154031441f79f501473b03ee97e'); // définie une constante
define('URL','http://api.football-data.org/alpha/soccerseasons/355/fixtures'); // définie une constante

$reqPrefs['http']['method'] = 'GET';  // renseigne l'index 'method' du tableau $reqPrefs['http'], avec la valeur 'GET'
$reqPrefs['http']['header'] = 'X-Auth-Token: '.CLEF; // renseigne l'index 'header' du tableau $reqPrefs['http'], avec la valeur 'X-Auth-Token: ' et la constante CLEF  
$stream_context = stream_context_create($reqPrefs); // prépare la récupération du flux avec les paramètres précédents
$response = file_get_contents(URL, false, $stream_context); // se connecte au site distant et  récupère le code retourné par flux
$fixtures = json_decode($response);        // transforme le flux reponse (en supposant que ce soit du json) pour en faire un tableau php indexé
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 22 Messages

24 mai 2015, 23:26

Merci beaucoup ! :-)

Eléphanteau du PHP | 22 Messages

25 mai 2015, 18:42

il y a un truck que je ne comprend pas : pourquoi on ne ferait pas :
$reqPrefs['http']['method'] = 'GET';
$fixtures = json_decode (file_get_contents (URL, false, stream_context_create ('X-Auth-Token: '.CLEF) ) )
? estce que c'est la meme chose?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

25 mai 2015, 21:33

C'est quasiment la même chose oui (à quelques erreurs php près ;)). Tu pourrais effectivement tout résumer dans une seule instruction :
$fixtures = json_decode(
	file_get_contents('http://api.football-data.org/alpha/soccerseasons/355/fixtures'
		, false
		, stream_context_create(
			array(
				'http' => array(
					'method' => 'GET'
					, 'header' => 'X-Auth-Token: 761f3154031441f79f501473b03ee97e'
				)
			)
		)
	)
);
Le fait de le faire étape par étape te permet de contrôler ton code plus facilement (notamment quand tu debug, c'est plus facile de trouver les erreurs éventuelles) et éventuellement pouvoir réutiliser certains résultats intermédiaires (les constantes et variables peuvent être réutilisées à différents endroit de ton code). Et surtout, ça rend le code plus facile à lire et à comprendre quand il est composé de courtes instructions simples, plutôt que d'une seule et grosse ligne de code :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 22 Messages

26 mai 2015, 11:28

d'accord j'ai compris !
Merci de m'avoir aidé