Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- // Configuration
- // Chemin vers le fichier cache
- define('WP_CALENDAR_CACHE_FILE', 'wp_calendar.json');
- // URL du calendrier au format JSON
- define('WP_CALENDAR_DATA_URL', 'http://www.warcraftpeople.com/calendar?export=json&lang=fr');
- // Durée de vie du cache, en secondes
- define('WP_CALENDAR_CACHE_TTL', 300);
- /**
- * Fonction de récupération des données du calendrier Warcraft People
- * @return array
- */
- function getWpCalendarData()
- {
- // Si le fichier cache n'existe pas ou est expiré
- if (!file_exists(WP_CALENDAR_CACHE_FILE) || (filemtime(WP_CALENDAR_CACHE_FILE) + WP_CALENDAR_CACHE_TTL) < time())
- {
- // Récupération des données JSON à partir du site
- $calendarJsonData = @file_get_contents(WP_CALENDAR_DATA_URL);
- $calendarData = @json_decode($calendarJsonData);
- // Les données n'ont pas pu être récupérées (le site est peut-être down)
- // On réutilise celles du cache
- if (empty($calendarData))
- {
- $calendarJsonData = @file_get_contents(WP_CALENDAR_CACHE_FILE);
- $calendarData = @json_decode($calendarJsonData);
- }
- // Si les données sont valides, on les met en cache
- if (!empty($calendarData))
- file_put_contents(WP_CALENDAR_CACHE_FILE, $calendarJsonData);
- }
- // Récupération des données en cache
- else
- {
- $calendarData = @json_decode(@file_get_contents(WP_CALENDAR_CACHE_FILE));
- if (empty($calendarData))
- $calendarData = array();
- }
- return $calendarData;
- }
- // Définition de l'heure locale
- date_default_timezone_set('Europe/Paris');
- echo '<?xml version="1.0" encoding="utf-8"?>';
- ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
- <html lang="fr" xml:lang="fr">
- <head>
- <title>Test calendrier</title>
- <meta http-equiv="Content-Type" content="txt/html; charset=utf-8" />
- </head>
- <body>
- <h1>Calendrier des évènements</h1>
- Fuseau horaire : <?php echo date_default_timezone_get(); ?>
- <?php
- // Exemple de code affichant les évènements du jour et ceux à venir
- // Les dates sont affichées à l'heure locale
- // Date du jour représenté sur un entier au format AAAAMMJJ (facilite les comparaisons)
- $todayDate = date('Ymd');
- foreach(getWpCalendarData() as $event)
- {
- // Timestamp de l'event
- $eventTime = $event->timestamp;
- // Date de l'event représentée sur un entier au format AAAAMMJJ
- $eventDate = date('Ymd', $eventTime);
- // L'event a eu lieu avant aujourd'hui : on l(ignore
- if ($eventDate < $todayDate)
- continue;
- // Affichage de l'évènement
- // Liste des organisateurs, avec lien vers leur fiche armurerie, si applicable
- $strOrganizers = array();
- foreach($event->organizers as $organizerRow)
- {
- if (!empty($organizerRow->url))
- $strOrganizers[] = '<a href="' . $organizerRow->url .'" target="_blank">' . $organizerRow->name . '</a>';
- else
- $strOrganizers[] = $organizerRow->name;
- }
- // Titre et URL de l'event
- echo '<h2><a href="' . $event->url . '" target="_blank">' . $event->title . '</a></h2>';
- // Date de l'évènement et durée
- if ($eventDate == $todayDate)
- $strEventDate = 'Aujourd\'hui ' . date('H:i', $event->timestamp);
- else if ($eventDate == $todayDate + 1)
- $strEventDate = 'Demain ' . date('H:i', $event->timestamp);
- else
- $strEventDate = date('d/m/Y H:i', $event->timestamp);
- $durationHours = str_pad(floor($event->duration / 3600), 2, '0', STR_PAD_LEFT); // duration est exprimé en secondes
- $durationMinutes = str_pad(floor($event->duration / 60) % 60, 2, '0', STR_PAD_LEFT);
- echo "<h3>$strEventDate – $durationHours:$durationMinutes</h3>";
- // Type d'évènement
- echo $event->event_type_name; // Le type d'évènement est déjà localisé !
- // Liste des organisateurs, avec lien vers leur fiche armurerie, si applicable
- $strOrganizers = array();
- foreach($event->organizers as $organizerRow)
- {
- if (!empty($organizerRow->url))
- $strOrganizers[] = '<a href="' . $organizerRow->url .'" target="_blank">' . $organizerRow->name . '</a>';
- else
- $strOrganizers[] = $organizerRow->name;
- }
- if (!empty($strOrganizers))
- echo ', organisé par ' . implode(', ', $strOrganizers);
- echo '<br />';
- // Si c'est un évènement en jeu, on affiche les infos spécifiques
- if ($event->in_game_event)
- {
- // Royaume
- echo 'Royaume ' . $event->realm . ' – ';
- // Factions
- switch ($event->factions)
- {
- case 1 : echo 'Alliance'; break;
- case 2 : echo 'Horde'; break;
- case 3 : echo 'Alliance et Horde'; break;
- default : echo 'Aucune';
- }
- echo '<br />';
- }
- // Lieu de l'évènement
- if (!empty($event->location))
- echo 'Lieu : ' . $event->location . '<br />';
- // Image de l'évènement (définie par les rédacteurs, format 320x240)
- if (!empty($event->picture))
- echo '<a href="' . $event->url . '" target="_blank"><img src="' . $event->picture . '" style="float: left; margin: 0 10px 10px 0" /></a>';
- // Texte de l'évènement, en HTML avec mise en forme complète (images, vidéos, smilies...). Pas recommandé
- //echo $event->description_html;
- // Texte de l'évènement, en HTML sans mise en forme
- echo $event->description_text;
- echo '<hr style="clear: both" />';
- }
- ?>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement