POST sur un serveur distant puis GET le fichier généré

Petit nouveau ! | 3 Messages

24 juin 2016, 18:13

Bonjour,
j'aurais besoin de votre aide,
je souhaite récupérer les fichiers MP3 généré depuis ce moteur de synthèse vocal http://www.acapela-group.com/demo-tts/D ... orm_V2.php
Il est possible de récupérer le son généré en appuyant sur F12 (Firefox) dans l'onglet "Réseau" (Filtrez par "Médias")

J'aimerais faire une page PHP pour récupérer ce fichier MP3 automatiquement.
Avec l'extension Tamper Data j'ai réussie à comprendre qu'il y a un POST qui envoie une requête au serveur avec la voix sélectionné ainsi que le texte... ça je penses réussir à le faire sans trop de soucis.

Mais après, comment récupérer le fichier mp3, sachant qu'il sera généré sur le serveur distant (acapela) avec nom aléatoire bien évidemment ?

Voici mon code pour lancer une requête avec la voix francaise Claire et un message "Test"

Code : Tout sélectionner

<?php $url="http://www.acapela-group.com/demo-tts/DemoHTML5Form_V2.php"; $postFields=array( "MyLanguages" => "sonid15", "0" => "Leila", "1" => "Laia", "2" => "Eliska", "3" => "Mette", "4" => "Zoe", "5" => "Jasmijn", "6" => "Tyler", "7" => "Teepa", "8" => "Rhona", "9" => "Rachel", "10" => "Sharon", "11" => "Hanna", "12" => "Sanna", "13" => "Justine", "14" => "Louise", "MySelectedVoice" => "Claire", "16" => "Claudia", "17" => "Dimitri", "18" => "Fabiana", "19" => "Sakura", "20" => "Minji", "21" => "Lulu", "22" => "Bente", "23" => "Monika", "24" => "Marcia", "25" => "Celia", "26" => "Alyona", "27" => "Biera", "28" => "Ines", "29" => "Rodrigo", "30" => "Elin", "31" => "Samuel", "32" => "Kal", "33" => "Mia", "34" => "Ipek", "t" => "1", "SendToVaas" => "", "MyTextForTTS" => "Test", "Host" => "www.acapela-group.com", "User-Agent" => "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0", "Accept" => "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language" => "fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3", "Accept-Encoding" => "gzip, deflate", "DNT" => "1", "Referer" => "http://www.acapela-group.com/demo-tts/DemoHTML5Form_V2.php?", "Connection" => "keep-alive", "Content_Type" => "application/x-www-form-urlencoded" ); $options=array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => false, //True = retourne le contenu dans une chaine CURLOPT_HEADER => false, CURLOPT_FAILONERROR => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => $postFields ); $CURL=curl_init(); curl_setopt_array($CURL,$options); $content=curl_exec($CURL); if(curl_errno($CURL)){ echo "ERREUR curl_exec : ".curl_error($CURL); } curl_close($CURL); ?>
merci à vous !

Mammouth du PHP | 2703 Messages

24 juin 2016, 18:16

$content=curl_exec($CURL);
si $content contient bien le mp3 alors il suffit de sauver la chaine dans un fichier en local avec http://php.net/manual/fr/function.file-put-contents.php par exemple.

Petit nouveau ! | 3 Messages

24 juin 2016, 18:24

Non il ne contient pas le MP3, le soucis c'est que cette variable contiendra le formulaire contenu sur cette page : http://www.acapela-group.com/demo-tts/D ... orm_V2.php

en faite leur formulaire renvoi sur la même page

Merci de ta réponse

Mammouth du PHP | 2703 Messages

24 juin 2016, 18:38

la chaine contient le contenu de la page qui contient quelque chose comme :
<audio id="jp_audio_0" preload="metadata" src="http://H-IR-SSD-1.acapela-group.com/MES ... 3f17c3.mp3">
il n'y a donc qu'à extraire le champ src de la balise audio.

Petit nouveau ! | 3 Messages

24 juin 2016, 19:48

dans ma variable option j'ai changé "CURLOPT_RETURNTRANSFER" pour le passer de false à true (qui permet de retourner dans la variable sans l'afficher sur la page web mais du coup j'ai rajouté "echo $content;"

j'ai le même résultat qu'avant, mais dans le code source de la page je ne trouve pas cette balise. peut être que ma requête POST n'est pas correcte ?
Ou as tu réussi à trouvé cette balise ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

25 juin 2016, 02:08

C'est pas vraiment sérieux de pirater le service démo d'une boite de R&D franco-belge.

En plus, ils ont un produit clé en main avec des API qui fait exactement ce que tu veux :
http://www.acapela-vaas.com/?lang=fr

Contacte les plutôt que d'essayer d'aspirer le contenu généré par leur moteur de démo.
Quand tout le reste a échoué, lisez le mode d'emploi...