Ah mais oui ça existe, d'ailleurs si quelque chose ne trouve pas son chemin jusque ma boite mail, ça peut vouloir dire que cette chose n'est pas vraiment intéressante pour moi.
Euh, sinon, avoir une API c'est bien sympa, mais
-quand on veut coder des logiciels ou services clients, il faut implémenter une gestion de chaque API de chaque fournisseur que l'on veut avoir dans son client
-quand on est un fournisseur, il faut que des gens codent spécifiquement pour votre API, une fois que celle-ci est en ligne.
Pour résoudre à tout jamais ce grave problème, il y a WDMEP.
WDMEP est un protocole, une couche d'abstraction pour qu'un client puisse interagir avec n'importe quelle API supportant WDMEP, et qu'une API puisse interagir avec n'importe quel client supportant WDMEP.
WDMEP est super simple, basé sur les couches de transport standard (http, magnet, ftp, n'importe quoi pourvu que ça supporte les URI).... 100% extensible, tout est "free form", n'importe quel type de media, format de media, format de données est supporté, passé, présent, futur.
L'intention de WDMEP est de fournir un protocole pour échanger des média numériques et les meta-données afférentes.
Un exemple d'utilisation :
imaginez qu'il y ait un client graphique pour WDMEP permettant de parcourir les bibliothèque de média des fournisseurs supportant le protocole (j'envisage d'en coder un)... Imaginez qu'il y ait quelques fournisseurs de contenu supportant WDMEP (sites de musique, sites de vidéo, webradios, webtv, annuaires de web(radio/tv)s, site d'ebook, sites d'images/photos, etc, etc....) (pour le moment, à ma connaissance, il y a que Wumzle Radio, mais j'envisage de coder des passerelles en ligne pour convertir les données des APIs de Dogmazic, Jamendo, YouTube, Last.fm, etc etc vers le format WDMEP dynamiquement)...
Et donc, depuis un unique logiciel client, vous aurez accès à l'intégralité des média disponibles chez l'ensemble de ces fournisseurs, dans une interface unifiée... Une bibliothèque en ligne de millions de référence, instantanément sous la main, ça peut être pas mal.
Un autre exemple d'utilisation : au sein de votre réseau domestique, vos ordinateurs, périphérique plus ou moins portables, etc, etc, peuvent utiliser WDMEP pour échanger média et données.
Pour plus d'information sur WDMEP et un exemple d'implémentation, je vous renvoie à
http://www.nicolaschartoire.com/2012/07 ... rever.html
Basiquement :
Chaque fournisseur doit avoir un fichier dit 'fichier hub' en ligne. C'est un simple fichier texte. Entre autre :
-il liste les services disponibles pour ce fournisseur, qui permettent de trouver les adresses des média et leur meta-données.
-il liste aussi, via la directive "peer" et la directive "bridge", les adresses d'autres hub dus à d'autres fournisseurs (peer), ou de passerelles au format WDMEP permettant d'accéder aux données de fournisseurs n'implémentant pas WDMEP (bridge). Aussi, vous n'avez besoin de connaitre l'adresse que d'un hub initial, ensuite ce hub vous en fournira d'autres, etc, etc.
Un simple exemple de fichier hub :
Vous avez une radio qui émet au format mp3 et vous voulez qu'elle soit accessible aux clients WDEMP. Les données spécifiques à votre serveur sont :
-vous proposez de l'audio
-c'est un flux en direct, disons que son adresse est
http://maradio.com/flux.mp3
-il est au format mp3
-il y a une playlist m3u en ligne, dison
http://maradio.com/tunein.m3u
-vous avez un site, son adresse c'est
http://maradio.com
-le nom de votre site, c'est "Ma Radio"
-vous connaissez l'existence d'un autre hub,
http://shangri-l.dyndns.org/audio/wumzleradio/api/hub
votre fichier hub est un simple fichier texte qui va ressembler à ça :
Code : Tout sélectionner
wdmep 1.0
hub http://maradio.com/l_adresse_de_votre_fichier_hub.txt
peer http://shangri-l.dyndns.org/audio/wumzleradio/api/hub
media audio
mediaformat audio id MyAudio container mpeg
mediaformat audio id MyAudio audiostream mpeg-2
features name website stream
format name text
format website html4.0
format stream direct m3u1.0
text_name_audio Ma Radio
html4.0_website_audio http://maradio.com
:MyAudio:
direct_stream_audio http://maradio.com/flux.mp3
m3u1.0_stream_audio http://maradio.com/tunein.m3u
Le fichier hub permet de définir
-des "media" : par exemple "audio", "video", "text", "hypertext", "image"... Les media sont free-form, n'importe quoi peut être ajouté. Ils représentent les catégories de média que le fournisseur propose.
-des "mediaformat" : pour chacun de vos media, vous pouvez spécifier autant de format que vous souhaitez, dans lesquels ils sont disponible. Notez que seuls peuvent être listés les formats dans lesquels l'intégrale des media disponible est effectivement en ligne.
-des "transcodeformat" : d'autres formats supportés, mais via un transcodage à la volée
-des "features" : les fonctionnalités de votre site. Par exemple la liste de "features" de Wumzle est :
name : des noms pour le site et ses sous-sections
website : les adresses des sites
auth : un mécanisme d'authentification basique (utilisant les fonctionnalité sous-jacentes de la couche de transport) pour vous permettre l'accès à certains contenus réservés à certains utilisateurs)
stream : des flux en direct (flux de webradio par exemple)
nowplaying : savoir ce qui est joué en ce moment sur un flux
artistlist : la liste des artistes du site
library : la bibliothèque complète des contenus disponibles à la demande
podcast : des podcasts
webpage : des pages webs (page de morceau, page d'artiste...)
userspecificstream : des flux en direct, mais personnalisés (deux personne au même moment ne verront pas le même contenu, c'est user-specific)
listadultcontent : pour savoir quels média sont réservés aux adultes
mediaurl : pour obtenir l'url directe de tel ou tel fichier media
universaltranscoder : un service de transcodage à la volée de fichier ou de flux, pas uniquement de Wumzle, mais n'importe quel flux en ligne.
Notez que Wumzle propose vraiment beaucoup de "features", car c'est à la fois une webradio, une webTV, un service d'audio et de vidéo à la demande.... La plupart des fournisseurs proposeront beaucoup moins de features.
-des "format", pour chaque "feature"
par exemple, "format name text" indique que les infos de la feature "name" sont disponibles au format texte ; "format library librarieswdmepjson1.0 m3u1.0" indique que la feature "library" est disponible dans les format librarieswdmepjson version 1.0 et au format liste m3u version 1.0
Ensuite, basiquement, on indique simplement les urls auxquelles les clients doivent ce connecter pour obtenir les données, pour chaque combinaison "format-feature-mediaformat" supportée.
Par exemple, toujours pour Wumzle :
m3u1.0_stream_audio
http://85.25.106.184/ices.ogg.m3u
indique que le "stream" (flux en direct), pour l'"audio", peut être trouvé au format "m3u1.0" à l'adresse
http://85.25.106.184/ices.ogg.m3u
On peut également spécifier, si l'adresse accepte les paramètres dynamique, différents "filter" permettant d'affiner sa sélection :
rss2.0_podcast_audio artist_filter
http://shangri-l.dyndns.org/wumzleradio ... RL_ENCODED
indque que le "podcast", au format "rss2.0", pour le media "audio", peut être filtré par artist ("artist_filter") en passant le nom de l'artiste encodé dans l'url ("$ARTIST_URL_ENCODED")
C'est juste une présentation rapide, si vous voulez des infos, lisez le fichier hub WDMEP pour Wumzle, qui s'auto-explique assez bien, il est en ligne ici :
http://shangri-l.dyndns.org/audio/wumzleradio/api/hub/
Une petite note sur le "format" (dans le sens WDMEP, comprendre format de données) librarieswdmepjson1.0 qui est utilisé par Wumzle pour founir les meta-données de sa bibliotèque musicale : voici un exemple simple, en PHP, pour exporter des données dans ce format
Code : Tout sélectionner
<?php
//on définit une premère chanson
$data['http://monserrveur.net/chanson1.ogg']['tags']['voribiscomment']['artist'][0]='Me In The Bath';
$data['http://monserrveur.net/chanson1.ogg']['tags']['voribiscomment']['title'][0]='Geek Head';
//on définit une deuxième chanson
$data['http://monserrveur.net/chanson2.ogg']['tags']['voribiscomment']['artist'][0]='Still Living Creature';
$data['http://monserrveur.net/chanson2.ogg']['tags']['voribiscomment']['title'][0]='What Is New Nigel';
//on envoie les données au client
header("content-type: application/json");
echo json_encode($data);
?>
Une utilisation un peu plus aboutie, qui utilise la bibliothèque libre php-getid3 pour récupérer directement les métadonnées dans les tags des fichiers et envoie tout ça au format libraireswdmepjson 1.0, avec possibilité de filter par artiste, par album ou par titre de chanson, au choix :
Code : Tout sélectionner
<?
session_start();
require_once('/usr/share/php-getid3/getid3.php');
$result='';
$hostame='www.monsite.com';
$audiopath='/la/ou/est/mon/audio/';
$storepath='/var/www'.$audiopath;
if (isset($_SESSION[$_GET['song']])){
header("content-type: application/json");
echo json_encode($_SESSION[$_GET['song']]);
die();}
$ind=0;
$tableau[0]='';
if ($handle = opendir($storepath)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
$tableau[$ind]=$file;
$ind++;
}
}
closedir($handle);
}
shuffle($tableau);
for ($ind=0;$tableau[$ind]!=null&&$tableau[$ind]!='';$ind++){
$getID3 = new getID3;
$info = $getID3->analyze($storepath.$tableau[$ind]);
$running=false;
if(!isset($_GET['song'])&&!isset($_GET['artist'])&&!isset($_GET['album'])){$running=true;}
if (isset($_GET['song'])&&$_GET['song']==$info['tags']['vorbiscomment']['title'][0]){$running=true;}
if (isset($_GET['artist'])&&$_GET['artist']==$info['tags']['vorbiscomment']['artist'][0]){$running=true;}
if (isset($_GET['album'])&&$_GET['album']==$info['tags']['vorbiscomment']['album'][0]){$running=true;}
if($running){
$result['http://'.$hostname.$audiopath.$tableau[$ind]]=$info;
}
}
header("content-type: application/json");
echo json_encode($result);
$_SESSION[$_GET['song']]=$result;
?>