Подтвердить что ты не робот

Google Translate TTS API заблокирован

Google внедрил капчу, чтобы заблокировать доступ людей к API TTS translate https://translate.google.com/translate_tts?ie=UTF-8&q=test&tl=zh-TW. Я использовал его в своем мобильном приложении. Теперь он ничего не возвращает. Как обойти капчу?

4b9b3361

Ответ 1

Добавьте квалификатор '& client = tw-ob' в конец вашего запроса. https://translate.google.com/translate_tts?ie=UTF-8&q=test&tl=zh-TW&client=tw-ob

Этот ответ больше не работает последовательно. Ваш IP-адрес будет временно заблокирован Google, если вы слишком сильно злоупотребляете этим.

Ответ 2

есть 3 основных вопроса:

  • вы должны включить "клиент" в строку запроса (работает клиент = t).
  • (если вы пытаетесь получить его с помощью AJAX), Referer HTTP-запроса должен быть https://translate.google.com/
  • "tk" изменяется для каждого запроса, и он должен быть заполнен соответствующим хешем: tk = hash (q, TKK), где q - текст, который должен быть TTSed, а TKK является var в глобальной области при загрузке translate.google.com: (введите "window.TKK" в консоли). см. хеш-функцию в нижней части этого ответа (calcHash).

:

function generateGoogleTTSLink(q, tl, tkk) {
    var tk = calcHash(q, tkk);
    return `https://translate.google.com/translate_tts?ie=UTF-8&total=1&idx=0&client=t&ttsspeed=1&tl=${tl}&tk=${tk}&q=${q}&textlen=${q.length}`;
}

generateGoogleTTSLink('ciao', 'it', '410353.1336369826');
// see definition of "calcHash" in the bottom of this comment.

Ответ 3

Во-первых, чтобы избежать перекодирования, вы должны установить правильный пользовательский агент, например: "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv: 46.0) Gecko/20100101 Firefox/46.0"
< ш > Затем, чтобы не быть заблокированным, вы должны предоставить правильный токен (параметр "tk" get) для каждого отдельного запроса.
В Интернете вы можете найти много разных сценариев, которые пытаются вычислить токен после большого количества обратного проектирования... но каждый раз, когда большая G меняет алгоритм, вы застряли снова, поэтому гораздо проще получить ваш токен только наблюдая в глубоких похожих запросах на перевод страницы (с вашим текстом в URL-адресе).
Вы можете прочитать время маркера по времени grepping "tk =" из вывода этого простого кода с помощью phantomjs:

"use strict";
var page = require('webpage').create();
var system = require('system');
var args = system.args;
if (args.length != 2) { console.log("usage: "+args[0]+" text");  phantom.exit(1); }
page.onConsoleMessage = function(msg) {     console.log(msg); };
page.onResourceRequested = function(request) {   console.log('Request ' + JSON.stringify(request, undefined, 4)); };
page.open("https://translate.google.it/?hl=it&tab=wT#fr/it/"+args[1],     function(status) {
if (status === "success")    {             phantom.exit(0);           } 
else {      phantom.exit(1);    }
});

поэтому в конце вы можете получить свою речь с чем-то вроде:
wget -U "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv: 46.0) Gecko/20100101 Firefox/46.0" " http://translate.google.com/translate_tts?ie=UTF-8&tl=it&tk=52269.458629&q=ciao&client=t" -O ciao.mp3
(токен, вероятно, основан на времени, поэтому эта ссылка может не работать завтра)

Ответ 4

Вы также можете попробовать этот формат:

  1. pass q = формат urlencode вашего языка (в JavaScript вы можете использовать функцию encodeURI(), а PHP имеет функцию rawurlencode())

  2. pass tl = краткое имя языка (предположим, bangla = bn)

Теперь попробуйте следующее:

https://translate.google.com.vn/translate_tts?ie=UTF-8&q=%E0%A6%A2%E0%A6%BE%E0%A6%95%E0%A6%BE+&tl=bn&client= ТВт-О.Б.