Helloo,
Il y a quelques jours, je crois avoir vu passer un message sur le plugin horoscope qui ne fonctionnait plus.
Je n’arrive plus à le retrouver alors je crée ce nouveau post pour proposer une nouvelle correction.
Dans le fichier \core\class\horoscope.class.php, il faut effectuer les modifications suivantes :
public static function getHoroscopeForSigne_Day($signe_zodiaque, $name, $horo_type)
{
$horoscope['signe'] = $signe_zodiaque;
if ($horo_type == 'astro_jour' || $horo_type == 'astro_jour_hebdo') {
$signe_clean = strtolower($signe_zodiaque);
$url = "https://www.astroo.com/horoscopes/horoscope_" . $signe_clean . ".php";
$options = [
'http' => [
'method' => 'GET',
'header' => "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36\r\n"
]
];
$context = stream_context_create($options);
log::add('horoscope', 'debug', '│┌── :fg-info:' . __('Info requête directe pour l\'horoscope du jour', __FILE__) . ':/fg: ──');
log::add('horoscope', 'debug', '││ :fg-info:URL : :/fg:' . $url);
$html = file_get_contents($url, false, $context);
if ($html === FALSE) {
log::add('horoscope', 'debug', '││:fg-danger:' . __('Erreur de chargement du site Astroo', __FILE__) . ':/fg:');
return false;
}
try {
$html = html_entity_decode($html, ENT_QUOTES, 'UTF-8');
preg_match('/class="tegb" style="font:18px[^>]*>(.*?)<\/p>/si', $html, $matches);
$horoscope['date'] = date('Y-m-d');
if (isset($matches[1])) {
$texte = trim(strip_tags($matches[1]));
$texte_nettoye = preg_replace('/Cette semaine\s*\.\.\.\s*$/i', '', $texte);
$horoscope['horoscope'] = trim($texte_nettoye);
log::add('horoscope', 'debug', '││ :fg-info:' . __('Texte récupéré avec succès pour', __FILE__) . ':/fg: : ' . $signe_zodiaque);
} else {
log::add('horoscope', 'error', '││ :fg-danger:' . __('Structure HTML modifiée ou signe introuvable', __FILE__) . ':/fg:');
$horoscope['horoscope'] = __('Données indisponibles', __FILE__);
}
} catch (Exception $exc) {
log::add('horoscope', 'error', __('Erreur pour la récupération des données pour l\'horoscope du jour sur le site internet pour', __FILE__) . ' ' . $name . ' : ' . $exc->getMessage());
}
log::add('horoscope', 'debug', '│└─────────');
}
if ($horo_type == 'astro_hebdo' || $horo_type == 'astro_jour_hebdo') {
$horoscope = self::getHoroscopeForSigne_Hebdo($signe_zodiaque, $name, $horoscope);
}
return $horoscope;
}
et dans la fonction getHoroscopeForSigne_hebdo :
$options = \[
'http' => \[
'method' => 'GET',
'header' => "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36\\r\\n"
\]
\];
Je vous laisse valider. Après quelques tests rapides, ça fonctionne correctement chez moi.
Autre détail :
j’avais des erreurs sur la récupération de l’image par défaut qui n’existe pas dans l’arborescence du plugin. Il faudrait donc la rajouter.
/plugins/horoscope/core/img/default.png 404 (Not Found)