שני קודים שיצרתי עם קלוד, אשמח לשמוע אם תהיה למישהו תועלת מהם ואיך:
קוד PHP:
<?php
$lang = 'iw';
$text = 'שלום עולם';
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://translate.google.com/_/TranslateWebserverUi/data/batchexecute',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => http_build_query([
'f.req' => json_encode([
[
[
'jQ1olc',
json_encode([
$text,
$lang,
null,
json_encode(null),
]),
null,
'generic',
]
]
]),
]),
]);
$response = curl_exec($curl);
curl_close($curl);
if ($response && preg_match('#//OE[^\\\\]+#', $response, $matches)) {
file_put_contents('test.mp3', base64_decode($matches[0]));
}
else {
echo "error\n";
}
קוד Node.js:
const fs = require('fs').promises;
async function gtranslate_tts(text, lang) {
let data = [[[
'jQ1olc',
JSON.stringify([
text,
lang,
null,
"null",
]),
null,
'generic',
]]];
let response = await fetch('https://translate.google.com/_/TranslateWebserverUi/data/batchexecute', {
method: "POST",
body: new URLSearchParams([["f.req", JSON.stringify(data)]]),
});
if (!response.ok) {
throw new Error(`Response status: ${response.status}`);
}
let resptext = await response.text();
let mp3b64 = resptext.match(/\/\/OE[^\\]+/);
if (!mp3b64) {
throw new Error("mp3 not found in response");
}
return Buffer.from(mp3b64[0], 'base64');
}
async function main() {
let res = await gtranslate_tts("שלום עולם", "iw");
await fs.writeFile("test.mp3", res);
}
main();