PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 HTML, xHTML CSS » Plusieurs menus identiques sur même page » 25-12-2019 19:25:32

stany
Réponses : 0

Bonjour,

je souhaite dupliquer un menu CSS/HTML (https://codepen.io/lbebber/pen/LELBEo) dans différentes sections d'une même page.

Quelle est la meilleure solution pour un novice?

Merci

#2 Re : Forum Général PHP » [RESOLU] file_get_contents et user_agent » 18-09-2015 15:24:48

Pour résoudre mon problème, je l'ai contourné en créant les mp3.
Je perds la flexibilité du TTS en ligne mais ça marche.

Cordialement

#3 Re : Forum Général PHP » [RESOLU] file_get_contents et user_agent » 18-09-2015 15:24:48

J'avance encore un peu.... enfin je crois.
D'après mes trouvailles, une commande cURL fonctionnerait:

curl 'http://translate.google.com/translate_tts?ie=UTF-8&q=Hello&tl=en&client=t' -H ''Referer: http://translate.google.com/' -H 'User-Agent: stagefright/1.2 (Linux;Android 5.0)' > google_tts.mp3

Donc il y a une histoire de User-Agent et de Referer.

Comment réaliser ceci en Php?

Merci

#4 Re : Forum Général PHP » [RESOLU] file_get_contents et user_agent » 18-09-2015 15:24:48

J'ai avancé mais dans une autre direction.
Le code qui fonctionnait est qui proposait de télécharger un mp3 était:

$mp3[$i] = file_get_contents('http://translate.google.com/translate_tts?q=bonjour&tl=fr');

Comme expliqué précédemment, un captcha bloque le code.
Au détour d'un autre forum sur le TTS, il y a une parade en ajoutant "client=t" dans le code, soit:

http://translate.google.com/translate_tts?client=t&q=bonjour&tl=fr

En tapant ce lien dans une barre d'adresse, la lecture du fichier est automatique et ne propose pas de l'enregistrer.
Et en faisant la modif dans le code Php, ça ne marche pas non plus. La commande "file_get_contents" ne doit pas être la bonne?

Comment puis-je, récupérer et enregistrer le fichier ainsi lu?

#5 Re : Forum Général PHP » [RESOLU] file_get_contents et user_agent » 18-09-2015 15:24:48

Je comprends le principe mais pas du tout comment faire.
Sous chrome j'ai 6 cookies:

Nom :    PHPSESSID
Contenu :    cda53bc3c0f93dfc73390fb6429faca0
Domaine :    text2speech.us
Chemin :    /
Envoyer pour :    Toutes sortes de connexions
Accessible aux scripts :    Oui

Nom :    __utma
Contenu :    169556132.150862348.1441220442.1441220442.1441220442.1
Domaine :    .text2speech.us
Chemin :    /
Envoyer pour :    Toutes sortes de connexions
Accessible aux scripts :    Oui

Nom :    __utmb
Contenu :    169556132.1.10.1441220441
Domaine :    .text2speech.us
Chemin :    /
Envoyer pour :    Toutes sortes de connexions
Accessible aux scripts :    Oui

Nom :    __utmc
Contenu :    169556132
Domaine :    .text2speech.us
Chemin :    /
Envoyer pour :    Toutes sortes de connexions
Accessible aux scripts :    Oui

Nom :    __utmt
Contenu :    1
Domaine :    .text2speech.us
Chemin :    /
Envoyer pour :    Toutes sortes de connexions
Accessible aux scripts :    Oui

Nom :    __utmz
Contenu :    169556132.1441220441.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)
Domaine :    .text2speech.us
Chemin :    /
Envoyer pour :    Toutes sortes de connexions
Accessible aux scripts :    Oui

#6 Re : Forum Général PHP » [RESOLU] file_get_contents et user_agent » 18-09-2015 15:24:48

Ca ne marche pas.
Je dirais même que c'est pire.
Car sans cette ligne, je reçois un fichier mp3 mais qui fait 0 ko (tout comme avec l'instruction Google).
Et en faisant votre modif, je reçois plus rien en retour.

Même résultat

J'ai corrigé car j'avais fait une erreur de syntaxe.


Idem avec 

$mp3 = fopen("http://text2speech.us", "r");

Idem avec


$opts = array(
  'http'=>array(
  'method'=>"GET",
  'header'=>"Accept-language: en\r\n" .
        "Cookie: foo=bar\r\n"
  )
);
$context = stream_context_create($opts);
// ...
$mp3[$i] = file_get_contents('http://text2speech.us/mp3.php?t=Bonjour&lf=fr', false, $context);
 

#7 Forum Général PHP » [RESOLU] file_get_contents et user_agent » 18-09-2015 15:24:48

stany
Réponses : 7

Bonjour,

je suis débutant-autodidacte pour essayer de résoudre ce propblème:
Mon objectif initial est de récupérer un mp3 créé en ligne pour faire du TTS (text to speech).
La solution d'origine était celle de Google (http://translate.google.com/translate_t … jour&tl=fr)


  protected function TTSToMp3($words,$lang)
  {
    // Directory
    $folder = "audio/".$lang;

    // Replace the non-alphanumeric characters
    // The spaces in the sentence are replaced with the Plus symbol
    $words = urlencode($words);

    // Name of the MP3 file generated using the MD5 hash
    $file = md5($words);

    // If folder doesn't exists, create it
    if (!file_exists($folder))
      mkdir($folder, 0755, true);

    // Save the MP3 file in this folder with the .mp3 extension
    $file = $folder."/TTS-".$file.".mp3";

    // If the MP3 file exists, do not create a new request
    if (!file_exists($file))
    {
      // Google Translate API cannot handle strings > 100 characters
      $words = $this->CutString($words,100);

      ini_set('user_agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0');
      $mp3 = "";
      for ($i = 0; $i < count($words); $i++)
        $mp3[$i] = file_get_contents('http://translate.google.com/translate_tts?q='.$words[$i].'&tl='.$lang);

      file_put_contents($file, $mp3);
    }
    return $file;
  }
 

Depuis peu, Google demande un Captcha pour cette fonction, devenant inexploitable ... je pense.

J'ai recherché une alternative (semblable et gratuite) et j'ai trouvé: http://text2speech.us/
En fouillant un peu, j'ai trouvé qu'en tapant "http://text2speech.us/mp3.php?t=bonjour&lf=fr" dans la barre d'adresse, j'obtiens un mp3.
J'en déduit que j'ai trouvé l'alternative à Google Translate.

J'ai modifié le code ci-dessus


// $mp3[$i] = file_get_contents('http://translate.google.com/translate_tts?q='.$words[$i].'&tl='.$lang);
    $mp3[$i] = file_get_contents('http://text2speech.us/mp3.php?t='.$words[$i].'&lf='.$lang);
 

Cela ne marche pas.

Je me suis aperçu que si je tape dans la barre d'adresse "http://text2speech.us/mp3.php?t=bonjour&lf=fr" juste après l'ouverture de mon navigateur, le site me renvoi l'erreur:
Notice: Undefined index: UserId in /home/text2speech/public_html/mp3.php on line 44
Warning: Cannot modify header information - headers already sent by (output started at /home/text2speech/public_html/mp3.php:44) in /home/text2speech/public_html/mp3.php on line 96

Maintenant, si j'ouvre mon navigateur, que je vais sur le site "http://text2speech.us" alors ensuite "http://text2speech.us/mp3.php?t=bonjour&lf=fr" fonctionne très bien.

Je suppose que le problème vient du "user_agent" ou quelque chose du genre qui m'identifie sur le site.

Mais là, ça dépasse largement mes compétences.

Pouvez-vous m'aider?

Merci

Pied de page des forums

Propulsé par FluxBB