Le XSPF , c’est une liste de documents multimedia, ici MP3, au format XML.
Cette contribution ne fournit que cette liste à destination d’un player comme Musicplayer pour la jouer, ou tout autre utilitaire.
La liste est constituée de tous les documents mp3 joints à un article.
Cela produit un .xspf , l’url est utilisable à la place d’un fichier .xspf comme dans :
playlist_url=[(#URL_SITE_SPIP|urlencode)]%2Fxspf.php3%3Fid_article%3D[(#ENV{id_article})]”
name=”xspf_player” allowscriptaccess=”sameDomain” type=”application/x-shockwave-flash”
quality=”high” pluginspage=”http://www.macromedia.com/go/getflashplayer”
align=”center” width=”<?php echo [(#ENV{largeur})] – 20; ?>” height=”153″ />
(lignes volontairement coupées pour faciliter la lecture)
Voilà donc la constitution d’un xspf simple de tous les documents mp3 associés à un article.
Il référence la version 0 de XSPF pour un maximum de compatibilité.
C’est du LGPL pour 1.8.x.
Créez un xspf.php3 à la racine comme :
-
<?php
-
$fond = “xspf”;
-
$delais = 24 * 3600;
-
$flag_preserver = true;
-
function ascii($texte) {
-
return translitteration($texte);
-
}
-
include (“inc-public.php3”);
-
?>
Notes :
$fond précise que nous appelons le fond du même nom “xspf” , soit xspf.html
$delai 1 jour
$flag_preserver à true pour ne pas avoir le menu admin
la fonction ascii() est un filtre pour les titres , que tous les caractères soient 7-bit 🙁
elle utilise translitteration() qui est dans le noyau de spip.
Il référence donc dans le dossier squelette, un xspf.html :
-
<BOUCLE_article_principal(ARTICLES) {id_article}>
-
<?php
-
header(‘Content-type: application/xspf+xml’);
-
echo ‘<?xml version=”1.0″ encoding=”#CHARSET”?>’ . “\n”;
-
$def = ‘[(#LOGO_ARTICLE_RUBRIQUE||extraire_attribut{src})]’;
-
if (!$def) {
-
$def = ‘IMG/jpg/jukebox.jpg’;
-
}
-
?>
-
<playlist version=”0″ xmlns = “http://xspf.org/ns/0/”>
-
<title>[(#NOM_SITE_SPIP|ascii)]: [(#TITRE|ascii)]</title>
-
<B_morceaux>
-
<trackList>
-
<BOUCLE_morceaux(DOCUMENTS){id_article}{mode=document}{extension==mp3$}{par num titre}{par id_document}>
-
<?php
-
$img = ‘[(#LOGO_DOCUMENT||extraire_attribut{src})]’;
-
if ($img == ‘IMG/icones/mp3-dist.png’) {
-
$img = $def;
-
}
-
?>
-
<track>
-
<location>[(#URL_DOCUMENT|url_absolue)]</location>
-
<image>[(#URL_SITE_SPIP)]/<?php echo $img; ?></image>
-
<annotation>[(#TITRE|supprimer_numero|texte_backend)]</annotation>
-
</track>
-
</BOUCLE_morceaux>
-
</trackList>
-
</B_morceaux>
-
</playlist>
-
</BOUCLE_article_principal>
-
<:aucun_article:>
-
<//B_article_principal>
Les 2 premières lignes fixent le format produit. Le header est important pour les navigateurs sensibles.
Ensuite, $def essaye de récupérer une image défaut , oui , une image est associée à chaque morceau , donc ce sera $def si un document mp3 n’a pas de vignette.
Le défaut est le logo de l’article , s’il n’y en a pas , c’est bétonné ’IMG/jpg/jukebox.jpg’
C’est assez court , beaucoup d’intrusion de php , ça ne sert à rient sans un player comme Musicplayer
Il y a des exemples d’utilisation chez Léon Larchet
J’ai entendu dire que boOz préparait des choses du même genre , et peut-être une même liste préparée “on the fly” en javascript
2Pistes2
Il serait possible de constituer un XSPF beaucoup plus complet, avec les durées , auteurs , titres … mais ça serait beucoup plus lourd puisqu’il faudrait accéder à chaque document pour récupérer ces données dans les ID3 tags ou même les frames. Contactez-moi si besoin.
Voyez aussi getid3
je pense étendre cette contrib pour éventuellement balayer une rubrique aussi , c’est à dire fabriquer la même liste avec tous les mp3 joints aux articles d’une rubrique.