Ceci est possible en utilisant l'en-tête HTTP "Content-range". Cet en-tête dit "s'il vous plaît donnez-moi les octets d'ici à ici et ignorez le reste". Si le serveur Web est configuré pour les traiter (Apache est par exemple), alors vous obtenez une réponse 206 avec un corps de seulement ces octets.
Vous devez créer une petite application proxy qui fait office de passerelle entre l'écouteur et Amazon.
Pour voir si votre hôte répondra essayez ceci à partir de la ligne de commande:
curl -v -I http://www.mfiles.co.uk/mp3-downloads/01-Tartaros%20of%20light.mp3
Lorsque l'URL est l'un des vôtres.Si vous êtes chanceux, vous verrez:
Accept-Ranges: bytes
Content-Length: 5284483
Cela signifie que le serveur accepte les l'en-tête Content-gamme et la longueur du fichier est 5284483 octets.
Soit la demande du premier tiers du fichier:
curl -H'Range: bytes=0-1761494' http://www.mfiles.co.uk/mp3-downloads/01-Tartaros%20of%20light.mp3 > /tmp/test1.mp3
Vous devriez maintenant être en mesure de jouer /tmp/test1.mp3 et entendre le premier tiers de la piste.
L'étape suivante consiste à créer une application proxy. Une bonne approche serait d'utiliser https://github.com/aniero/rack-streaming-proxy mais vous auriez probablement besoin de forker le projet pour envoyer l'en-tête 'Range: bytes = 0-1761494'. Sinon, jetez un oeil à Sinatra. Un bonus ici est que parce que vous utilisez le serveur distant par proxy, vous pouvez masquer l'URL réelle du fichier en ayant une simple table de base de données avec un ID pour chaque fichier. Je suggère d'écrire un petit script qui stocke également la longueur en octets de chaque fichier, de sorte que vous n'avez pas à calculer la plage pour chaque demande.
Ainsi, un GET à "/ preview/12345" serait proxy "http://amazon.com/my_long_url" et vous donner seulement le premier tiers du fichier. En plus de cela, vous pouvez mettre Varnish devant votre propre serveur, ce qui cache ces fichiers MP3 partiels et signifie que vous n'avez pas à revenir constamment sur Amazon pour obtenir les fichiers.
Ouais .. Comme si quelque chose allait arrêter l'utilisateur * avancé * pour utiliser wget ou corriger le script dans Firebug pour obtenir le clip complet. De plus, si les fichiers sont suffisamment gros pour faire des aperçus, vous allez tout transmettre au client et en éliminer immédiatement 99%. – yurymik