javascript - Kuinka saada todennustunnus Google Cloud Translation API:lle selaimessa (Chrome-laajennus)
Yritän tehdä Chrome-laajennusta, joka käyttää Google Cloud Translation -API:a. Seurasin monia ohjeita eri sivuilla Google Translate -dokumentaatiossa ja Chrome-laajennusten kehittämistä koskevissa ohjeissa, mutta en silti osaa selvittää, miten API:ta voi oikeastaan käyttää selaimen sisällä.
Suurin saavutus, johon olen päässyt, oli seuraamalla osaa pikaoppaasta, jossa luot palvelutilin, saat palvelutilin avaintiedoston (ladattuna .json-tiedostona), asennat ja alustat Google SDK:n, asetat GOOGLE_APPLICATION_CREDENTIALS-ympäristömuuttujan palvelutilin JSON-avaintiedoston polkuun ja teet sitten curl-pyynnön käyttämällä gcloud auth application-default print-access-token saadaksesi käyttöoikeustunnuksen, joka syötetään osaksi pyyntöotsikkoa: "Authorization: Bearer (token tässä)". Sain näin onnistuneesti haettua käännöksen.
Mutta laajennuksen ympäristössä et voi suorittaa komentoja kuten gcloud, joten se ei toimi. Pystyin manuaalisesti hakemaan käyttöoikeustunnuksen käyttämällä gcloud-komentoa ja liittämään sen sitten JavaScript-koodiini osana pyyntöotsikkoa (esim. xmlHttpRequest.setRequestHeader('Authorization', 'Bearer ya29.c.Elr6BRuTfOtherRandomLetters');). Mutta tuo käyttöoikeustunnus vanhenee 60 minuutin kuluttua, joten se ei toimi kestävällä tavalla.
Yritin myös käyttää identity.getAuthToken -metodia (päivitettyäni asiat manifest.json-tiedostossa dokumentaation ohjeiden mukaisesti), mutta se ei toiminut. Palvelutilin client ID:n käyttäminen client_id -kentässä oauth2 alla manifest.json-tiedostossa johti identity.getAuthToken -metodista virheeseen "Invalid client ID". Toisaalta, kun loin OAuth2 Client ID:n Google Consolessa ja käytin myoauth2clientid.apps.googleusercontent.com client_id-kentässä oauth2 alla ja ["https://www.googleapis.com/auth/cloud-translation", "https://www.googleapis.com/auth/cloud-platform"] scopes-kentässä oauth2 alla, tuloksena oli identity.getAuthToken -metodista virhe "OAuth2 not granted or revoked".
API-avaimen luominen Google Console -sivulta ja sen käyttäminen suoraan käännöskyselyni key -parametrina ei toiminut edes: sain virheilmoituksen "Pyyntöstä puuttuu voimassa oleva API-avain."
Olen todella hukassa täällä. Kaikki apu olisi mahtavaa.
Vastaus #1
Minä (ensimmäistä kertaa lähettäjä) kävin myös läpi samat vaiheet kuin sinä, mutta @magicnumberin vastauksen avulla keksin ratkaisun kääntää tekstiä (mistä tahansa kielestä englanniksi) Chrome-laajennuksessani käyttämällä API-avainta sen sijaan, että käyttäisin palvelutilin avaintiedostoa.
Luo ensin käännösfunktio (käytin tässä Async -> Await -kuviota):
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;
}
Sitten kutsu asynkronista funktiota, joka palauttaa lupauksen, esimerkiksi:
query="כלב" //Hebrew word for dog 🐶
translate(query, "YOURVALIDAPIKEYGOESHERE")
.then(response => console.log(response.data))
.catch(reason => console.log(reason.message));
Vastaus Google-käännös-API:sta pitäisi näyttää tältä:
{
"data": {
"translations": [
{
"translatedText": "Dog",
"detectedSourceLanguage": "iw"
}
]
}
}
Lopuksi, välttääkseni Sisällön suojauskäytännön rikkomista, minun tapauksessani minun piti lisätä käännös-API:n verkkotunnus lupavaihdostani laajennukseni manifest.json-tiedostoon:
"permissions": ["https://translation.googleapis.com/language/translate/v2/*"],
Vastaus #2
Kävin läpi samat vaiheet kuin sinä enkä myöskään voi luottaa gcloudiin todennuksessa.
Se, mikä vei minut ohi "Pyyntöltä puuttuu kelvollinen API-avain" -virheen, oli käyttää kyselysyntaksia, joka on kuvattu täällä https://codelabs.developers.google.com/codelabs/cloud-translation-intro/index.html#5
Oma tapauksessani käytin:
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"
