Advertisement
LenweSaralonde

Récupération des évènements Warcraft People

Mar 30th, 2012
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.44 KB | None | 0 0
  1. <?php
  2.     // Configuration
  3.  
  4.     // Chemin vers le fichier cache
  5.     define('WP_CALENDAR_CACHE_FILE', 'wp_calendar.json');
  6.  
  7.     // URL du calendrier au format JSON
  8.     define('WP_CALENDAR_DATA_URL', 'http://www.warcraftpeople.com/calendar?export=json&lang=fr');
  9.  
  10.     // Durée de vie du cache, en secondes
  11.     define('WP_CALENDAR_CACHE_TTL', 300);
  12.  
  13.     /**
  14.      * Fonction de récupération des données du calendrier Warcraft People
  15.      * @return array
  16.      */
  17.     function getWpCalendarData()
  18.     {
  19.         // Si le fichier cache n'existe pas ou est expiré
  20.         if (!file_exists(WP_CALENDAR_CACHE_FILE) || (filemtime(WP_CALENDAR_CACHE_FILE) + WP_CALENDAR_CACHE_TTL) < time())
  21.         {
  22.             // Récupération des données JSON à partir du site
  23.             $calendarJsonData = @file_get_contents(WP_CALENDAR_DATA_URL);
  24.             $calendarData = @json_decode($calendarJsonData);
  25.  
  26.             // Les données n'ont pas pu être récupérées (le site est peut-être down)
  27.             // On réutilise celles du cache
  28.             if (empty($calendarData))
  29.             {
  30.                 $calendarJsonData = @file_get_contents(WP_CALENDAR_CACHE_FILE);
  31.                 $calendarData = @json_decode($calendarJsonData);
  32.             }
  33.  
  34.             // Si les données sont valides, on les met en cache
  35.             if (!empty($calendarData))
  36.                 file_put_contents(WP_CALENDAR_CACHE_FILE, $calendarJsonData);
  37.         }
  38.         // Récupération des données en cache
  39.         else
  40.         {
  41.             $calendarData = @json_decode(@file_get_contents(WP_CALENDAR_CACHE_FILE));
  42.             if (empty($calendarData))
  43.                 $calendarData = array();
  44.         }
  45.  
  46.         return $calendarData;
  47.     }
  48.  
  49.     // Définition de l'heure locale
  50.     date_default_timezone_set('Europe/Paris');
  51.  
  52.     echo '<?xml version="1.0" encoding="utf-8"?>';
  53. ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  54. <html lang="fr" xml:lang="fr">
  55.     <head>
  56.         <title>Test calendrier</title>
  57.         <meta http-equiv="Content-Type" content="txt/html; charset=utf-8" />
  58.     </head>
  59.  
  60.     <body>
  61.         <h1>Calendrier des évènements</h1>
  62.         Fuseau horaire : <?php echo date_default_timezone_get(); ?>
  63.  
  64.         <?php
  65.             // Exemple de code affichant les évènements du jour et ceux à venir
  66.             // Les dates sont affichées à l'heure locale
  67.  
  68.             // Date du jour représenté sur un entier au format AAAAMMJJ (facilite les comparaisons)
  69.             $todayDate = date('Ymd');
  70.  
  71.             foreach(getWpCalendarData() as $event)
  72.             {
  73.                 // Timestamp de l'event
  74.                 $eventTime = $event->timestamp;
  75.  
  76.                 // Date de l'event représentée sur un entier au format AAAAMMJJ
  77.                 $eventDate = date('Ymd', $eventTime);
  78.  
  79.                 // L'event a eu lieu avant aujourd'hui : on l(ignore
  80.                 if ($eventDate < $todayDate)
  81.                     continue;
  82.  
  83.                 // Affichage de l'évènement
  84.  
  85.                 // Liste des organisateurs, avec lien vers leur fiche armurerie, si applicable
  86.                 $strOrganizers = array();
  87.                 foreach($event->organizers as $organizerRow)
  88.                 {
  89.                     if (!empty($organizerRow->url))
  90.                         $strOrganizers[] = '<a href="' . $organizerRow->url .'" target="_blank">' . $organizerRow->name . '</a>';
  91.                     else
  92.                         $strOrganizers[] = $organizerRow->name;
  93.                 }
  94.  
  95.                 // Titre et URL de l'event
  96.                 echo '<h2><a href="' . $event->url . '" target="_blank">' . $event->title . '</a></h2>';
  97.  
  98.                 // Date de l'évènement et durée
  99.                 if ($eventDate == $todayDate)
  100.                     $strEventDate = 'Aujourd\'hui ' . date('H:i', $event->timestamp);
  101.                 else if ($eventDate == $todayDate + 1)
  102.                     $strEventDate = 'Demain ' . date('H:i', $event->timestamp);
  103.                 else
  104.                     $strEventDate = date('d/m/Y H:i', $event->timestamp);
  105.  
  106.                 $durationHours   = str_pad(floor($event->duration / 3600),    2, '0', STR_PAD_LEFT); // duration est exprimé en secondes
  107.                 $durationMinutes = str_pad(floor($event->duration / 60) % 60, 2, '0', STR_PAD_LEFT);
  108.  
  109.                 echo "<h3>$strEventDate$durationHours:$durationMinutes</h3>";
  110.  
  111.                 // Type d'évènement
  112.                 echo $event->event_type_name; // Le type d'évènement est déjà localisé !
  113.  
  114.                 // Liste des organisateurs, avec lien vers leur fiche armurerie, si applicable
  115.                 $strOrganizers = array();
  116.                 foreach($event->organizers as $organizerRow)
  117.                 {
  118.                     if (!empty($organizerRow->url))
  119.                         $strOrganizers[] = '<a href="' . $organizerRow->url .'" target="_blank">' . $organizerRow->name . '</a>';
  120.                     else
  121.                         $strOrganizers[] = $organizerRow->name;
  122.                 }
  123.  
  124.                 if (!empty($strOrganizers))
  125.                     echo ', organisé par ' . implode(', ', $strOrganizers);
  126.  
  127.                 echo '<br />';
  128.  
  129.                 // Si c'est un évènement en jeu, on affiche les infos spécifiques
  130.                 if ($event->in_game_event)
  131.                 {
  132.                     // Royaume
  133.                     echo 'Royaume ' . $event->realm . ' &ndash; ';
  134.  
  135.                     // Factions
  136.                     switch ($event->factions)
  137.                     {
  138.                         case 1  : echo 'Alliance'; break;
  139.                         case 2  : echo 'Horde'; break;
  140.                         case 3  : echo 'Alliance et Horde'; break;
  141.                         default : echo 'Aucune';
  142.                     }
  143.  
  144.                     echo '<br />';
  145.                 }
  146.  
  147.                 // Lieu de l'évènement
  148.                 if (!empty($event->location))
  149.                     echo 'Lieu : ' . $event->location . '<br />';
  150.  
  151.                 // Image de l'évènement (définie par les rédacteurs, format 320x240)
  152.                 if (!empty($event->picture))
  153.                     echo '<a href="' . $event->url . '" target="_blank"><img src="' . $event->picture . '" style="float: left; margin: 0 10px 10px 0" /></a>';
  154.  
  155.                 // Texte de l'évènement, en HTML avec mise en forme complète (images, vidéos, smilies...). Pas recommandé
  156.                 //echo $event->description_html;
  157.  
  158.                 // Texte de l'évènement, en HTML sans mise en forme
  159.                 echo $event->description_text;
  160.  
  161.                 echo '<hr style="clear: both" />';
  162.             }
  163.         ?>
  164.     </body>
  165. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement