170 lines
7.0 KiB
PHP
170 lines
7.0 KiB
PHP
<?php
|
|
// Inclusion de la bibliothèque getID3
|
|
require_once('getid3/getid3.php');
|
|
|
|
// Configuration du podcast
|
|
$config = [
|
|
'title' => 'Divan dit vent',
|
|
'description' => 'Installez-vous confortablement et laissez-vous emporter par les discussions animées du Divan dit vent. Le podcast audio de l\'association Camélia Studio vous invite à explorer les mondes fantastiques de la japanimation et bien plus encore. Plongez dans des critiques passionnées des dernières séries et films d\'animation, tout en découvrant des interviews exclusives avec des experts et des passionnés des différentes facettes de la culture. Avec chaque épisode, embarquez pour un voyage au pays de la créativité et de l\'imagination, où les voix des artistes et des fans se mêlent pour créer une symphonie culturelle captivante.',
|
|
'website' => 'https://camelia-studio.org/branches/divan-dit-vent/',
|
|
'author' => 'Camélia Studio',
|
|
'email' => 'contact.c.a@camelia-studio.org',
|
|
'category' => 'Animation & Interviews',
|
|
'copyright' => date('Y'),
|
|
'language' => 'fr-fr',
|
|
'image_url' => 'https://camelia-studio.org/branches/divan-dit-vent/img/logo.png',
|
|
'mp3_directory' => '/var/www/camelia-studio.org/branches/divan-dit-vent/mp3/',
|
|
'mp3_web_path' => 'https://camelia-studio.org/branches/divan-dit-vent/mp3/'
|
|
];
|
|
|
|
// Entêtes pour le XML
|
|
header('Content-Type: application/xml; charset=utf-8');
|
|
|
|
// Fonction pour obtenir les métadonnées d'un fichier MP3
|
|
function getMp3Metadata($file) {
|
|
$getID3 = new getID3();
|
|
$fileInfo = $getID3->analyze($file);
|
|
getid3_lib::CopyTagsToComments($fileInfo);
|
|
|
|
$metadata = [
|
|
'title' => '',
|
|
'artist' => '',
|
|
'album' => '',
|
|
'duration' => '',
|
|
'description' => ''
|
|
];
|
|
|
|
// Récupération du titre
|
|
if (!empty($fileInfo['comments']['title'][0])) {
|
|
$metadata['title'] = $fileInfo['comments']['title'][0];
|
|
} else {
|
|
// Utiliser le nom du fichier si pas de titre
|
|
$metadata['title'] = pathinfo($file, PATHINFO_FILENAME);
|
|
}
|
|
|
|
// Récupération de l'artiste
|
|
if (!empty($fileInfo['comments']['artist'][0])) {
|
|
$metadata['artist'] = $fileInfo['comments']['artist'][0];
|
|
}
|
|
|
|
// Récupération de la description depuis le commentaire
|
|
if (!empty($fileInfo['comments']['comment'][0])) {
|
|
$metadata['description'] = $fileInfo['comments']['comment'][0];
|
|
}
|
|
|
|
// Formatage de la durée
|
|
if (!empty($fileInfo['playtime_seconds'])) {
|
|
$duration = $fileInfo['playtime_seconds'];
|
|
$metadata['duration'] = sprintf('%02d:%02d:%02d',
|
|
($duration/3600),
|
|
($duration/60%60),
|
|
$duration%60
|
|
);
|
|
}
|
|
|
|
return $metadata;
|
|
}
|
|
|
|
// Ancienne fonction pour la compatibilité si getID3 n'est pas disponible
|
|
function getMp3Duration($file) {
|
|
$mp3file = fopen($file, "rb");
|
|
$block = fread($mp3file, 100);
|
|
$mp3info = array();
|
|
|
|
if (substr($block, 0, 3) == "ID3") {
|
|
// Fichier avec ID3v2
|
|
fseek($mp3file, 6);
|
|
$block = fread($mp3file, 4);
|
|
$header_size = unpack('N', $block);
|
|
fseek($mp3file, $header_size[1] + 10);
|
|
}
|
|
|
|
do {
|
|
$block = fread($mp3file, 10);
|
|
if (feof($mp3file)) break;
|
|
|
|
if (substr($block, 0, 1) == chr(255)) {
|
|
$byte = ord(substr($block, 1, 1));
|
|
if ($byte >= 224) {
|
|
$mp3info['version'] = ($byte & 24) >> 3;
|
|
$mp3info['layer'] = ($byte & 6) >> 1;
|
|
$mp3info['bitrate'] = ord(substr($block, 2, 1)) >> 4;
|
|
$mp3info['sampling_rate'] = (ord(substr($block, 2, 1)) & 15) >> 2;
|
|
break;
|
|
}
|
|
}
|
|
} while (true);
|
|
|
|
fclose($mp3file);
|
|
|
|
// Calcul approximatif de la durée
|
|
$duration = (filesize($file) * 8) / (($mp3info['bitrate'] + 1) * 1000);
|
|
return sprintf('%02d:%02d:%02d', ($duration/3600), ($duration/60%60), $duration%60);
|
|
}
|
|
|
|
// Création du XML
|
|
echo '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
|
|
echo '<?xml-stylesheet type="text/xml" href="podcast.xml"?>' . "\n";
|
|
?>
|
|
<rss version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">
|
|
<channel>
|
|
<title><?php echo htmlspecialchars($config['title']); ?></title>
|
|
<description><?php echo htmlspecialchars($config['description']); ?></description>
|
|
<link><?php echo htmlspecialchars($config['website']); ?></link>
|
|
<language><?php echo htmlspecialchars($config['language']); ?></language>
|
|
<copyright>Copyright <?php echo htmlspecialchars($config['copyright']); ?></copyright>
|
|
|
|
<itunes:subtitle><?php echo htmlspecialchars($config['description']); ?></itunes:subtitle>
|
|
<itunes:author><?php echo htmlspecialchars($config['author']); ?></itunes:author>
|
|
<itunes:summary><?php echo htmlspecialchars($config['description']); ?></itunes:summary>
|
|
<itunes:owner>
|
|
<itunes:name><?php echo htmlspecialchars($config['author']); ?></itunes:name>
|
|
<itunes:email><?php echo htmlspecialchars($config['email']); ?></itunes:email>
|
|
</itunes:owner>
|
|
<itunes:image href="<?php echo htmlspecialchars($config['image_url']); ?>"/>
|
|
<itunes:category text="<?php echo htmlspecialchars($config['category']); ?>"/>
|
|
|
|
<?php
|
|
// Scan du dossier MP3
|
|
$mp3_files = glob($config['mp3_directory'] . '*.mp3');
|
|
|
|
usort($mp3_files, function($a, $b) {
|
|
return filemtime($b) - filemtime($a);
|
|
});
|
|
|
|
foreach ($mp3_files as $mp3_file) {
|
|
$filename = basename($mp3_file);
|
|
$file_url = $config['mp3_web_path'] . rawurlencode($filename);
|
|
$file_size = filesize($mp3_file);
|
|
|
|
// Récupération des métadonnées
|
|
try {
|
|
$metadata = getMp3Metadata($mp3_file);
|
|
$title = $metadata['title'];
|
|
$duration = $metadata['duration'];
|
|
$description = $metadata['description'];
|
|
} catch (Exception $e) {
|
|
// Fallback si getID3 n'est pas disponible
|
|
$title = pathinfo($filename, PATHINFO_FILENAME);
|
|
$duration = getMp3Duration($mp3_file);
|
|
$description = "Épisode : " . $title;
|
|
}
|
|
|
|
$pub_date = date('r', filemtime($mp3_file));
|
|
?>
|
|
<item>
|
|
<title><?php echo htmlspecialchars($title); ?></title>
|
|
<description>Épisode : <?php echo htmlspecialchars($title); ?></description>
|
|
<pubDate><?php echo $pub_date; ?></pubDate>
|
|
<enclosure
|
|
url="<?php echo htmlspecialchars($file_url); ?>"
|
|
length="<?php echo $file_size; ?>"
|
|
type="audio/mpeg"/>
|
|
<guid><?php echo htmlspecialchars($file_url); ?></guid>
|
|
<itunes:duration><?php echo $duration; ?></itunes:duration>
|
|
<itunes:summary>Épisode : <?php echo htmlspecialchars($title); ?></itunes:summary>
|
|
</item>
|
|
<?php } ?>
|
|
|
|
</channel>
|
|
</rss>
|