[Résolu] Récupérer une page JSON distante

Bonjour,

Je souhaite récupérer une page web distante qui renvoie du JSON.

Je partais sur la fonction recuperer_page, mais
https://programmer.spip.net/+-recuperer_page-+?lang=fr

me dit que c’est remplacé depuis Spip 4 par recuperer_url, mais n’est pas très loquace.

J’ai quand même la source de la fonction :

mais GIT me dit

ecrire/inc/distant.php n’existait pas sur « master »

Donc où trouver une doc ?

Et il faut que j’envoie un entête Accept: application/json pour recevoir du JSON, où est-ce que je précise cet entête HTTP ?

Merci

Trouvé du code ici

mais je pense que ce n’est pas le code officiel.

La Doc pour questions :

/**
 * Récupère le contenu d'une URL
 * au besoin encode son contenu dans le charset local
 *
 * @uses init_http()
 * @uses recuperer_entetes_complets()
 * @uses recuperer_body()
 * @uses transcoder_page()
 * @uses prepare_donnees_post()
 *
 * @param string $url
 * @param array $options
 *   bool transcoder : true si on veut transcoder la page dans le charset du site
 *   string methode : Type de requête HTTP à faire (HEAD, GET, POST, PUT, DELETE)
 *   int taille_max : Arrêter le contenu au-delà (0 = seulement les entetes ==> requête HEAD). Par defaut taille_max = 1Mo ou 16Mo si copie dans un fichier
 *   array headers : tableau associatif d'entetes https a envoyer
 *   string|array datas : Pour envoyer des donnees (array) et/ou entetes au complet, avec saut de ligne entre headers et donnees ( string @see prepare_donnees_post()) (force la methode POST si donnees non vide)
 *   string boundary : boundary pour formater les datas au format array
 *   bool refuser_gz : Pour forcer le refus de la compression (cas des serveurs orthographiques)
 *   int if_modified_since : Un timestamp unix pour arrêter la récuperation si la page distante n'a pas été modifiée depuis une date donnée
 *   string uri_referer : Pour préciser un référer différent
 *   string file : nom du fichier dans lequel copier le contenu
 *   int follow_location : nombre de redirections a suivre (0 pour ne rien suivre)
 *   string version_http : version du protocole HTTP a utiliser (par defaut defini par la constante _INC_DISTANT_VERSION_HTTP)
 * @return array|bool
 *   false si echec
 *   array sinon :
 *     int status : le status de la page
 *     string headers : les entetes de la page
 *     string page : le contenu de la page (vide si copie dans un fichier)
 *     int last_modified : timestamp de derniere modification
 *     string location : url de redirection envoyee par la page
 *     string url : url reelle de la page recuperee
 *     int length : taille du contenu ou du fichier récupéré
 *     int content_length : (optionnel) taille annoncée par le serveur distant dans ses headers (si annoncée)
 *
 *     string file : nom du fichier si enregistre dans un fichier
 */

function recuperer_url($url, $options = []) {

Quand on spécifie un nom de fichier ‹ file › => ‹ reponse.json › ,
dans quel dossier est stocké le fichier ?
Ou bien faut-il spécifier un chemin accessible ?

Ce serait bien qu’il retourne le chemin complet dans la réponse « file ».

Merci

Qu’entends-tu par « récupérer » une page, que souhaites-tu faire avec ?

Si c’est pour en afficher le contenu, tu peux voir avec une boucle DATA (voir lien exemple en bas de page) :

Bonjour,

Faire une tâche cron qui appelle recuperer_url pour traiter le contenu.

Exemple de base :

include_spip('inc/distant');

$res = recuperer_url($url_json);
// si on a recu correctement le json
if ($res['status'] == 200 and $res['length']) {
        $json = json_decode($res['page'], true);
        // $json contient les données du json, à toi de jouer...
}