<?php define ("IMPORT_MODE", 'ajout'); // N'ajoute que les nouveaux programme, fonctionnement habituel // define ("IMPORT_MODE", 'remplace'); // remplace les vieux programmes par les programmes importés, utile pour débuguer une nouvelle importation. $timer_start = time(); include_once ("connexion.php"); include_once ("template.inc"); define ("XML_FILENAME", "epg.xml"); $template_programme = new template("."); $template_programme->set_file("page_programmes", "programme.template.html"); $template_programme->set_block("page_programmes", "block_programme", "block_programme_result"); // ######################################## // # Importation des données dans la base # // ######################################## if (!file_exists(XML_FILENAME)) die ("Le fichier n'existe pas"); if (!$xmltv = simplexml_load_file(XML_FILENAME)) die("Erreur à l'importation du fichier"); // Chargement des chaînes // mysql_query("delete from epg_channel;"); // Nouvelle version : on efface plus les chaînes existantes $nbChaines = 0; foreach ($xmltv->channel as $channel) { $display_name = $channel->children(); // Magouille pour récupérer le nom de la chaîne, car on ne peut pas faire $channel->display-name à cause du tiret. $icon_src = $channel->icon["src"]; $id = single_id($channel["id"]); $channel_display_name[$id] = strtoupper($display_name); $channel_icon_src[$id] = $icon_src; $deja_existant = mysql_query("select * from epg_channel where cha_id = $id;"); if (!mysql_num_rows($deja_existant)) { mysql_myquery("insert into epg_channel values ($id,\"{$channel["id"]}\",\"$display_name\",\"$icon_src\");") or die("erreur sql"); echo "Une nouvelle chaîne, <b>$display_name</b>, a été rajoutée.<br>"; } $nbChaines++; } echo "$nbChaines chaînes importées...<br>"; // Chargement des programmes mysql_myquery("delete from epg_programme where pro_stop < ".(time()-24*3600*7)." and pro_videotheque = 0;"); mysql_myquery("delete from epg_distribution where dist_programme_id not in (select pro_id from epg_programme);"); $nbProgrammes = 0; $nbProgrammesIgnores = 0; foreach ($xmltv->programme as $programme) { // Réinitialisation des valeurs d'un programme sur l'autre. unset ($categories); unset ($descriptions); unset ($acteurs); $stars = -1; $nationalite = ""; $langue_originale=""; $langue = ""; $title=""; $subtitle=""; $realisateur="null"; // Récupération des attributs et des éléments. $start = $programme["start"]; $stop = $programme["stop"]; $showview = $programme["showview"]; $channel_id = single_id($programme["channel"]); $categorie_lang = $programme->categorie["lang"]; // inutilisé foreach($programme->children() as $attribut => $valeur) switch ($attribut) { case 'title' : $title=corrige($valeur); break; case 'category' : $categories[] = corrige($valeur); if (strtoupper($valeur)=="FILM") $test_is_film=true; break; case 'sub-title' : $subtitle = corrige($valeur); break; case 'desc' : $descriptions[] = corrige($valeur); break; case 'star-rating' : $stars = substr($valeur->value, 0, 1); break; case 'credits' : foreach ($valeur->actor as $actor) $acteurs[]=corrige($actor); $realisateur = "\"".corrige($valeur->director)."\""; break; echo "L'élement <b>$attribut</b> n'est pas pris en compte dans le traitement.<br>"; } // Gestion des heures de début, de fin, durée. $start = substr($start, 0, 8)." ".substr($start, 8, 2).":".substr($start, 10,2); // pour la compatibilité avec une version initiale de PHP 5 $stop = substr($stop , 0, 8)." ".substr($stop , 8, 2).":".substr($stop , 10,2); // pour la compatibilité avec une version initiale de PHP 5 $start_timestamp = strtotime($start); //"20060101054500 +0100" $stop_timestamp = strtotime($stop); $duree = ($stop_timestamp - $start_timestamp) / 60; // Arrangement des descriptions => description courte, critique... $description = $descriptions[0]; $critique = null; if (!empty($descriptions[1])) $description_courte = $descriptions[1]; else $description_courte = null; if (ereg("(.+)oeCritique : (.+)", $descriptions[0], $temp)) { $description = $temp[1]; $critique = $temp[2] ; } elseif (ereg("(.+)Critique : (.+)", $descriptions[0], $temp)) { $description = $temp[1]; $critique = $temp[2] ; } // Arrangement catégorie/sous-catégorie. $categorie = $categories[0]; $souscategorie = $categories[1]; $existe_set = mysql_myquery("select pro_id from epg_programme where pro_channel_id = $channel_id and pro_start = $start_timestamp;"); if (mysql_num_rows($existe_set)) if (IMPORT_MODE == 'ajout') $nbProgrammesIgnores++; elseif (IMPORT_MODE == 'remplace') mysql_myquery("delete from epg_programme where pro_channel_id = $channel_id and pro_start = $start_timestamp;"); if ((!mysql_num_rows($existe_set)) || (IMPORT_MODE == 'remplace')) { mysql_myquery(" insert into epg_programme ( pro_id, pro_channel_id, pro_titre, pro_sous_titre, pro_start, pro_stop, pro_duree, pro_categorie, pro_sous_categorie, pro_showview, pro_description, pro_critique, pro_description_courte, pro_star_rating, pro_nationalite, pro_langue_origine, pro_langue, pro_realisateur) values ( null, $channel_id, \"$title\", \"$subtitle\", $start_timestamp, $stop_timestamp, $duree, \"$categorie\", \"$souscategorie\", \"$showview\", \"".addslashes($description)."\", \"".addslashes($critique)."\", \"".addslashes($description_courte)."\", $stars, \"$nationalite\", \"$langue_origine\", \"$langue\", $realisateur);"); $pro_id = mysql_insert_id (); if (count($acteurs)) foreach($acteurs as $acteur) { $acteurs_set = mysql_myquery("select * from epg_acteur where act_nom=\"".addslashes($acteur)."\";"); if ($acteurmysql = mysql_fetch_array($acteurs_set)) $acteur_id = $acteurmysql["act_id"]; else { mysql_myquery("insert into epg_acteur (act_nom) values(\"".addslashes($acteur)."\");"); $acteur_id = mysql_insert_id(); } mysql_myquery("insert into epg_distribution values($pro_id, $acteur_id);"); } $nbProgrammes ++; // echo "<font color=green>$title a été inséré</font><br>"; } } echo "$nbProgrammes nouveaux programmes ont été importés...<br>"; echo "$nbProgrammesIgnores programmes déjà existants ont été ignorés...<br>"; echo "Importation réussie en ".(time()-$timer_start)." secondes."; mysql_myquery ("delete from epg_channel where cha_display_name='canalplus';"); function single_id($id_original) // Transforme C123.telepoche.com en 123, qui est utilisé comme id de la chaîne. { eregi("C([0-9]+).telepoche.com",$id_original, $temp); return $temp[1]; } // Corrige les textes importés depuis le site de télépoche, avant insertion dans la base de données function corrige($s) { // Interprétation correcte des accents. $s = utf8_decode($s); // Supprime le bug : apostrophe remplacée par â (exemple : lâage de glace). $s = str_replace ("âa", "'a", $s); $s = str_replace ("âe", "'e", $s); $s = str_replace ("âi", "'i", $s); $s = str_replace ("âo", "'o", $s); $s = str_replace ("âu", "'u", $s); $s = str_replace ("âA", "'A", $s); $s = str_replace ("âE", "'E", $s); $s = str_replace ("âI", "'I", $s); $s = str_replace ("âO", "'O", $s); $s = str_replace ("âU", "'U", $s); $s = str_replace ("âh", "'h", $s); $s = str_replace ("âH", "'H", $s); $s = str_replace ("ââ", "'â", $s); $s = str_replace ("âî", "'î", $s); $s = str_replace ("âé", "'é", $s); $s = str_replace ("âè", "'è", $s); $s = str_replace ("âê", "'ê", $s); $s = str_replace ("âà", "'à", $s); // Supprime le bug : apostrophe remplacée par ¿ (exemple : Rédacteur en chef d¿un magazine ). $s = str_replace ("¿", "'", $s); // Interpréétation correcte d'autres caractères spéciaux $s = str_replace ("[#339#]", "oe", $s); $s = str_replace ("[#37#]", "%", $s); // Supprime le bug : oe rajouté en fin de description if (eregi("(.*)oe$", $s, $resultat)) $s = $resultat[1]; return $s; } ?>