Autor Zpráva
Murphy
Profil *
Ahoj. Potřebuji zprovoznit překlady jednoho webu pomocí Google Translatoru (API v2 - placená verze). Prokousal jsem se dokumentací na stránkách Googlu a skončil jsem u tohoto scriptu:

<div id="xyz">Ahoj světe!</div>

<script>
    function translate() {
        gapi.client.setApiKey('API_KEY');
        var restRequest = gapi.client.request({
            'path'  : 'https://www.googleapis.com/language/translate/v2',
            'params': {
                'format': 'html',
                'source': 'cs',
                'target': 'en',
                'q'     : document.getElementById('xyz').innerHTML
            }
        });
        restRequest.execute(function(response) {
            console.log(response);
        });
    }
</script>
<script src="https://apis.google.com/js/client.js?onload=translate"></script>

Toto je samozřejmě jen testovací script, který má přeložit text 'Ahoj světě!', který se nachází v DIVu nad ním, ovšem ve Firebugu mi to stále hlásí:

"NetworkError: 404 Not Found - https://content.googleapis.com/https%3A//www.googleapis.com/language/translate/v2?format=html&source=cs&target=en&q=Ahoj%20sv%C4%9Bte!&key=API_KEY"

Už si skutečně nevím rady. Zkoušel jsem asi 100 + 1 možnost a nefunguje nic. Rád bych nakonec docílil takové funkčnosti, kdy pomocí tohoto scriptu buu moci přeložit vždy celou vygenerovanou stránku. Neměl by někdo radu, jak na to? Co je zde špatně?


Ještě mě napadlo, jestli není problém v tom, že web, který toto bue využívat nepoužívá https, ale jenom http?


Ten kód je převzat odsud: https://developers.google.com/api-client-library/javascript/dev/dev_jscript#Option2usegapiclientrequest
aDAm
Profil
ehm to ta chybová hláška není dost jednoznačná?? Co takhle si zadat správně tu cestu "path" a nervat tam celou url?
Murphy
Profil *
Hm :-) Jasný. Stačí tedy jenom

...
'path'  : '/language/translate/v2',
...



Tohle by tedy bylo, ale když do parametru 'q' vložím:

'q' : document.getElementsByTagName('body').innerHTML

tak to znovu vyhazuje chybu a to konkrétně: "A network error occurre...could not be completed."

Není problém v tom, že se snažím přeložit celý BODY element, že? :-) Pokud by to byl problém a tohle je špatný postup, jak to udělat, znáte prosím nějaký lepší postup, kterým by se to provést dalo?


Oprava, zapomněl jsem na index, tedy

'q' : document.getElementsByTagName('body')[0].innerHTML



Chyba tedy stále přetrvává.
aDAm
Profil
Tak jestli je to velikostí body můžeš zjistit tak že zkusíš přeložit jen třeba jeden element.
Murphy
Profil *
Je to tedy výzva. Nevím. Buď Google na něco v té dokumentaci zapomněl a nebo si já prostě nedokážu poradit a něco mi stále uniká (a myslím, že pravděpodobnější bude asi ta druhá možnost). Zkusil jsem to trochu jinak, než v tom příkladě výše.

    <script>
        function appendResult(response) {
            console.log(response);
            // document.getElementsByTagName('body')[0].innerHTML = response.data.translations[0].translatedText;
        }
        function makeRequest() {
            // var url = '/language/translate/v2?source=cs&target=en&format=html&q=' + document.getElementsByTagName('body')[0].innerHTML;
            var request = gapi.client.request(url);
            request.execute(function(response) {
                appendResult(response);
            });
        }
        function load() {
            gapi.client.setApiKey(API_KEY);
            gapi.client.load('translate', 'v2', makeRequest);
        }
    </script>
    <script src="https://apis.google.com/js/client.js?onload=load"></script

V tomto případě se tedy vezme obsah elementu <body> a pošle se translatoru. Ten už chyby nehlásí, ovšem vrácený obsah se skládá pouze z prázdných html elementů, tedy text stránky úplně chybí. :-) Tady už skutečně nevím o co se jedná. V developerské konzoli na stránkách Googlu jsem nastavil všechny limity na celkem vysokou úroveň a prostě to odmítá spolupracovat.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: