Weboldal keresés

javascript - Hogyan szerezzünk hitelesítési tokent a Google Cloud Translation API-hoz böngészőben (Chrome bővítmény)


Próbálok készíteni egy Chrome-bővítményt, amely a Google Cloud Translation API-t használja. Követtem rengeteg utasítást sok különböző oldalon a Google Translate és a Chrome-bővítmények fejlesztésére vonatkozó dokumentációban, de még mindig nem tudom, hogyan lehet ténylegesen használni az API-t a böngészőből.

A legtovább az jutottam el, hogy követtem a Gyorsindítási útmutató egy részét, ahol létrehozunk egy szolgáltatásfiókot, megszerezzük a szolgáltatásfiók kulcsfájlját (letöltve .json fájlként), telepítjük és inicializáljuk a Google SDK-t, beállítjuk a GOOGLE_APPLICATION_CREDENTIALS környezeti változót a szolgáltatásfiók JSON kulcsfájljának útvonalára, majd végrehajtunk egy curl kérést a gcloud auth application-default print-access-token használatával, hogy hozzáférési tokent kapjunk, amelyet a kérés fejlécében adunk meg: "Authorization: Bearer (ide kerül a token)". Így sikeresen lekértem egy fordítást.

De egy bővítmény környezetében nem tudsz olyan parancsokat futtatni, mint a gcloud, így az nem működik. Sikerült manuálisan lekérni egy hozzáférési tokent a gcloud parancs segítségével, majd beillesztenem azt a javascript kódomba a kérés fejlécének részeként (pl. xmlHttpRequest.setRequestHeader('Authorization', 'Bearer ya29.c.Elr6BRuTfOtherRandomLetters');). De ez a hozzáférési token 60 perc után lejár, így ez nem működik fenntarthatóan.

Próbáltam az identity.getAuthToken metódust is használni (miután frissítettem a manifest.json-t úgy, ahogy a dokumentáció mondja), de ez nem működött. Ha a szolgáltatói fiókom kliensazonosítóját (client_id) használtam az oauth2 alatt a manifest.json-ben, az identity.getAuthToken "Érvénytelen kliensazonosító" hibát adott. Másrészt, ha a Google Konzolból generált OAuth2 kliensazonosítót használtam, és myoauth2clientid.apps.googleusercontent.com-t állítottam be client_id-ként az oauth2 alatt, valamint ["https://www.googleapis.com/auth/cloud-translation", "https://www.googleapis.com/auth/cloud-platform"]-ot a scopes alatt az oauth2-ben, akkor az identity.getAuthToken "OAuth2 nincs engedélyezve vagy visszavonva" hibát adott.

Az API-kulcs létrehozása a Google Console oldalon, és annak közvetlen használata a key paraméterként a fordítási lekérdezésemben, mégsem működött: egy „A kéréshez érvényes API-kulcs hiányzik.” hibát kaptam.

Igazán tanácstalan vagyok itt. Bármi segítség nagyszerű lenne.

Válasz #1

Én (először posztoló) is ugyanazokon a lépéseken mentem keresztül, mint te, de @magicnumber válaszának segítségével találtam ki egy megoldást, hogy szöveget (bármely nyelvről angolra) fordítsak a Chrome-bővítményemben API-kulcs használatával a szolgáltatásfiók kulcsfájl helyett.

Először hozz létre egy fordító függvényt (itt az Async -> Await mintát használtam):

 async function translate(strSourceText,strApiKey)
  {
    var url = `https://translation.googleapis.com/language/translate/v2?key=${strApiKey}`
    let response = await fetch(url, {
      method: 'POST',
      headers : { 
        'Content-Type': 'application/json',
       },
       body: JSON.stringify({
         target: "en",
         format: "text",
         q: strSourceText
       }),
    }); 
    let data = await response.json()
    return data;
  }

Ezután hívd meg az aszinkron függvényt, amely egy ígéretet (promise) fog visszaadni, pl.:

query="כלב" //Hebrew word for dog 🐶

translate(query,  "YOURVALIDAPIKEYGOESHERE")
  .then(response => console.log(response.data))
  .catch(reason => console.log(reason.message));

A Google Fordító API válaszának így kell kinéznie:

{
  "data": {
    "translations": [
      {
        "translatedText": "Dog",
        "detectedSourceLanguage": "iw"
      }
    ]
  }
}

Végül, hogy elkerüljem a Tartalombiztonsági Házirend megsértését, az én esetemben hozzá kellett adnom a fordítási API domainjét a jogosultsági kulcsomhoz a kiterjesztésem manifest.json fájljában:

"permissions": ["https://translation.googleapis.com/language/translate/v2/*"],

Válasz #2

Ugyanazokat a lépéseket követtem, mint te, és én sem tudok a gcloud-ra támaszkodni az autentikációhoz.

Amitől túljutottam a "A kérés érvényes API kulcsot hiányol" hibán, az az volt, hogy az itt leírt lekérdezési szintaxist használtam: https://codelabs.developers.google.com/codelabs/cloud-translation-intro/index.html#5

Az én esetemben a következőt használtam:

curl -s -X POST -H "Content-Type: application/json" \
    --data "{
  'q': 'The Great Pyramid of Giza (also known as the Pyramid of Khufu or the
        Pyramid of Cheops) is the oldest and largest of the three pyramids in
        the Giza pyramid complex.',
  'source': 'en',
  'target': 'es',
  'format': 'text'
}" "https://translation.googleapis.com/language/translate/v2?key=YOURVALIDAPIKEYHERE"