@jpty Bonjour, je me suis enfin remis à la conception de ce mini plugin, car les cours sont bientôt finie, u coup j’ai fais la fonction pour télécharger l’image :
public function downloadImage($url, $destinationPath) {
$filename = basename($url); // Récupère le nom du fichier à partir de l'URL
$destinationFile = $destinationPath . '/' . $filename; // Chemin complet du fichier de destination
$imageContent = file_get_contents($url); // Télécharge le contenu de l'image à partir de l'URL
if ($imageContent === false) {
log::add(__CLASS__, 'debug', "Unable to download image from URL: $url");
return false;
}
$imageSaved = file_put_contents($destinationFile, $imageContent); // Sauvegarde le contenu de l'image localement
if ($imageSaved === false) {
log::add(__CLASS__, 'debug', "Unable to save image to destination: $destinationFile");
return false;
}
log::add(__CLASS__, 'debug', "Image downloaded and saved successfully: $destinationFile");
return $destinationFile; // Retourne le chemin complet du fichier de destination
}
et je l’appelle donc à la fin de ma fonction getAPOD():
public function getAPOD() {
// Clé API de la NASA
$api_key = $this->getConfiguration('param1');
// URL de l'API de la NASA
$api_url = "https://api.nasa.gov/planetary/apod?api_key=$api_key";
// Récupération des données de l'API
$response = file_get_contents($api_url);
$data = json_decode($response, true);
// Récupération de l'explication de la photo
$explication = $data['explanation'];
$url = $data['url'];
$titre = $data['title'];
// Affichage de l'explication
//return[$explication, $url, $titre];
$eqlogic = $this->getEqLogic(); //récupère l'éqlogic de la commande $this
switch ($this->getLogicalId()) { //vérifie le logicalid de la commande
case 'refresh': // LogicalId de la commande rafraîchir que l’on a créé dans la méthode Postsave de la classe vdm .
$data = $eqlogic->getAPOD(); // Récupère les données de l'API de la NASA
$eqlogic->checkAndUpdateCmd('explanation', $data[0]); // Met à jour la commande "explication" avec l'explication de la photo
$eqlogic->checkAndUpdateCmd('url', $data[1]); // Met à jour la commande "url" avec l'URL de la photo
$eqlogic->checkAndUpdateCmd('titre', $data[2]); // Met à jour la commande "titre" avec le titre de la photo
$destinationPath = __DIR__ . "/../../image"; // Chemin de destination où l'image sera sauvegardée
$imageFile = downloadImage($url, $destinationPath);
if ($imageFile !== false) {
// Mise à jour de la commande "image" avec le chemin local de l'image
$eqlogic->checkAndUpdateCmd('image', $imageFile);
}
break;
}
cependant, aucune des commandes ne s’actualise, et l’image ne se télécharge pas non plus, je ne sais aps comment faire pour régler ce soucis, je vous mets le code en entier ci-dessous ci besoin :
<?php
/* This file is part of Jeedom.
*
* Jeedom is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Jeedom is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Jeedom. If not, see <http://www.gnu.org/licenses/>.
*/
/* * ***************************Includes********************************* */
require_once __DIR__ . '/../../../../core/php/core.inc.php';
class nasaapi extends eqLogic {
/* * *************************Attributs****************************** */
public function getAPOD() {
// Clé API de la NASA
$api_key = $this->getConfiguration('param1');
// URL de l'API de la NASA
$api_url = "https://api.nasa.gov/planetary/apod?api_key=$api_key";
// Récupération des données de l'API
$response = file_get_contents($api_url);
$data = json_decode($response, true);
// Récupération de l'explication de la photo
$explication = $data['explanation'];
$url = $data['url'];
$titre = $data['title'];
// Affichage de l'explication
//return[$explication, $url, $titre];
$eqlogic = $this->getEqLogic(); //récupère l'éqlogic de la commande $this
switch ($this->getLogicalId()) { //vérifie le logicalid de la commande
case 'refresh': // LogicalId de la commande rafraîchir que l’on a créé dans la méthode Postsave de la classe vdm .
$data = $eqlogic->getAPOD(); // Récupère les données de l'API de la NASA
$eqlogic->checkAndUpdateCmd('explanation', $data[0]); // Met à jour la commande "explication" avec l'explication de la photo
$eqlogic->checkAndUpdateCmd('url', $data[1]); // Met à jour la commande "url" avec l'URL de la photo
$eqlogic->checkAndUpdateCmd('titre', $data[2]); // Met à jour la commande "titre" avec le titre de la photo
$destinationPath = __DIR__ . "/../../image"; // Chemin de destination où l'image sera sauvegardée
$imageFile = downloadImage($url, $destinationPath);
if ($imageFile !== false) {
// Mise à jour de la commande "image" avec le chemin local de l'image
$eqlogic->checkAndUpdateCmd('image', $imageFile);
}
break;
}
}
public function downloadImage($url, $destinationPath) {
$filename = basename($url); // Récupère le nom du fichier à partir de l'URL
$destinationFile = $destinationPath . '/' . $filename; // Chemin complet du fichier de destination
$imageContent = file_get_contents($url); // Télécharge le contenu de l'image à partir de l'URL
if ($imageContent === false) {
log::add(__CLASS__, 'debug', "Unable to download image from URL: $url");
return false;
}
$imageSaved = file_put_contents($destinationFile, $imageContent); // Sauvegarde le contenu de l'image localement
if ($imageSaved === false) {
log::add(__CLASS__, 'debug', "Unable to save image to destination: $destinationFile");
return false;
}
log::add(__CLASS__, 'debug', "Image downloaded and saved successfully: $destinationFile");
return $destinationFile; // Retourne le chemin complet du fichier de destination
}
/*public function toHtml($_version = 'dashboard') {
$replace = $this->preToHtml($_version);
if (!is_array($replace)) {
return $replace;
}
$version = jeedom::versionAlias($_version);
$url = $this->getConfiguration('url');
$title = $this->getConfiguration('title');
$explanation = $this->getConfiguration('explanation');
$replace['#image#'] = $url;
$replace['#title#'] = $title;
$replace['#explanation#'] = $explanation;
if ($version == 'v4') {
$replace['#background#'] = $this->getDisplay('background', 'dashboard');
}
return $this->postToHtml($_version, template_replace($replace, getTemplate('core', $version, 'eqLogic', 'nasaapi')));// retourne notre template qui se nomme eqlogic pour le widget
}*/
/*
* Permet de définir les possibilités de personnalisation du widget (en cas d'utilisation de la fonction 'toHtml' par exemple)
* Tableau multidimensionnel - exemple: array('custom' => true, 'custom::layout' => false)
public static $_widgetPossibility = array();
*/
/*
* Permet de crypter/décrypter automatiquement des champs de configuration du plugin
* Exemple : "param1" & "param2" seront cryptés mais pas "param3"
public static $_encryptConfigKey = array('param1', 'param2');
*/
/* * ***********************Methode static*************************** */
/*
* Fonction exécutée automatiquement toutes les minutes par Jeedom
public static function cron() {}
*/
/*
* Fonction exécutée automatiquement toutes les 5 minutes par Jeedom
public static function cron5() {}
*/
/*
* Fonction exécutée automatiquement toutes les 10 minutes par Jeedom
public static function cron10() {}
*/
/*
* Fonction exécutée automatiquement toutes les 15 minutes par Jeedom
public static function cron15() {}
*/
/*
* Fonction exécutée automatiquement toutes les 30 minutes par Jeedom
public static function cron30() {}
*/
// Fonction exécutée automatiquement toutes les heures par Jeedom
public static function cronHourly() {
foreach (self::byType(__CLASS__,true) as $eqLogic) {
$eqLogic->getAPOD();
}
}
/*
* Fonction exécutée automatiquement tous les jours par Jeedom
public static function cronDaily() {}
*/
/* * *********************Méthodes d'instance************************* */
// Fonction exécutée automatiquement avant la création de l'équipement
public function preInsert() {
}
// Fonction exécutée automatiquement après la création de l'équipement
public function postInsert() {
}
// Fonction exécutée automatiquement avant la mise à jour de l'équipement
public function preUpdate() {
}
// Fonction exécutée automatiquement après la mise à jour de l'équipement
public function postUpdate() {
}
// Fonction exécutée automatiquement avant la sauvegarde (création ou mise à jour) de l'équipement
public function preSave() {
}
// Fonction exécutée automatiquement après la sauvegarde (création ou mise à jour) de l'équipement
public function postSave() {
$info = $this->getCmd(null, 'explanation');
if (!is_object($info)) {
$info = new nasaapiCmd();
$info->setName(__('Explication', __FILE__));
}
$info->setLogicalId('explanation');
$info->setEqLogic_id($this->getId());
$info->setType('info');
$info->setSubType('string');
$info->save();
$refresh = $this->getCmd(null, 'refresh');
if (!is_object($refresh)) {
$refresh = new nasaapiCmd();
$refresh->setName(__('Rafraichir', __FILE__));
}
$refresh->setEqLogic_id($this->getId());
$refresh->setLogicalId('refresh');
$refresh->setType('action');
$refresh->setSubType('other');
$refresh->save();
$title = $this->getCmd(null, 'titre');
if (!is_object($title)) {
$title = new nasaapiCmd();
$title->setName(__('Titre', __FILE__));
}
$title->setEqLogic_id($this->getId());
$title->setLogicalId('titre');
$title->setType('info');
$title->setSubType('string');
$title->save();
$urldelimage = $this->getCmd(null, 'url');
if (!is_object($urldelimage)) {
$urldelimage = new nasaapiCmd();
$urldelimage->setName(__('URL', __FILE__));
}
$urldelimage->setEqLogic_id($this->getId());
$urldelimage->setLogicalId('url');
$urldelimage->setType('info');
$urldelimage->setSubType('string');
$urldelimage->save();
$image = $this->getCmd(null, 'image');
if (!is_object($image)) {
$image = new nasaapiCmd();
$image->setName(__('Image', __FILE__));
}
$image->setEqLogic_id($this->getId());
$image->setLogicalId('image');
$image->setType('info');
$image->setSubType('string');
$image->save();
}
// Fonction exécutée automatiquement avant la suppression de l'équipement
public function preRemove() {
}
// Fonction exécutée automatiquement après la suppression de l'équipement
public function postRemove() {
}
/*
* Permet de crypter/décrypter automatiquement des champs de configuration des équipements
* Exemple avec le champ "Mot de passe" (password)
public function decrypt() {
$this->setConfiguration('password', utils::decrypt($this->getConfiguration('password')));
}
public function encrypt() {
$this->setConfiguration('password', utils::encrypt($this->getConfiguration('password')));
}
*/
/*
* Permet de modifier l'affichage du widget (également utilisable par les commandes)
public function toHtml($_version = 'dashboard') {}
*/
/*
* Permet de déclencher une action avant modification d'une variable de configuration du plugin
* Exemple avec la variable "param3"
public static function preConfig_param3( $value ) {
// do some checks or modify on $value
return $value;
}
*/
/*
* Permet de déclencher une action après modification d'une variable de configuration du plugin
* Exemple avec la variable "param3"
public static function postConfig_param3($value) {
// no return value
}
*/
/* * **********************Getteur Setteur*************************** */
}
class nasaapiCmd extends cmd {
/* * *************************Attributs****************************** */
/*
public static $_widgetPossibility = array();
*/
/* * ***********************Methode static*************************** */
/* * *********************Methode d'instance************************* */
/*
* Permet d'empêcher la suppression des commandes même si elles ne sont pas dans la nouvelle configuration de l'équipement envoyé en JS
public function dontRemoveCmd() {
return true;
}
*/
// Exécution d'une commande
public function execute($_options = array()) {
}
/*public function toHtml($_version = 'dashboard') {
$replace = $this->preToHtml($_version);
if (!is_array($replace)) {
return $replace;
}
$version = jeedom::versionAlias($_version);
$url = $this->getConfiguration('url');
$title = $this->getConfiguration('title');
$explanation = $this->getConfiguration('explanation');
$replace['#image#'] = $url;
$replace['#title#'] = $title;
$replace['#explanation#'] = $explanation;
if ($version == 'v4') {
$replace['#background#'] = $this->getDisplay('background', 'dashboard');
}
return $this->postToHtml($_version, template_replace($replace, getTemplate('core', $version, 'nasaapiwidget', 'nasaapi')));// retourne notre template qui se nomme eqlogic pour le widget
}*/
/* * **********************Getteur Setteur*************************** */
}
Si vous avez besoin de renseignement en plus, n’hésitez pas, merci d’avance.