Jak pouzit Microsoft Translation API v android aplikaci?

Programování pro mobilní telefony, hodinky, Android, iOS, Windows Phone

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod DevPetr 28. 12. 2017 22:25

Zdravim vsechny.

Chtel bych vytvorit prekladac z Anglictiny do Cestiny s pouzitim Microsoft Translation API v mem Android Studiu pro muj android. Melo by to umet prelozit zadany text, nebo slovo s pouzitim mikrofonu obema smery(Anglicko-Cesky, Cesko-Anglicky). Zaregistroval jsem se na Microsoft Azure a ziskal jsem Translator Text API Key a Translator Speech API Key. Bohuzel jsem vsak nenasel ani jeden priklad jak to pouzit pri vyvoji aplikace pro android nejlepe v android studio. Priklady co jsem nasel pouzivaji Translate.setClientId("MY ID") a Translate.setClientSecret("MY SECRET KEY"), ale tyhle informace se uz nepouzivaji a ani jsem je nemel moznost ziskat. Muzete mi prosim poslat priklad (kod) jak takovou aplikaci vytvorit?
Predem moc dekuji.
DevPetr
Kolemjdoucí

Odeslat příspěvekod Nargon 29. 12. 2017 09:36

V principu je to snadné. Je použit celkem běžný oauth systém přihlašování.
Musíš tvůj "key" použít pro přihlášení na login server, to ti vygeneruje "token". Následně musíš všechny requesty na překlad zasílat s tímto tokenem.

Příkladů je celkem dost, například tyhle MS oficiální: https://github.com/MicrosoftTranslator
Bohužel nic přímo pro android studio, ale myslím že oba python příklady jsou dobře čitelné a obsahují jen naprosté minimum bez zbytečného balastu kolem. Pokud umíš programovat tak by ti nemělo dělat problém ten princip adaptovat a použít v android studiu. A jestli programovat neumíš, tak doporučuji začít na něčem jednodušším, kde se programovat naučíš.
Desktop: Ryzen 7 1800X (3.95GHz, 1.35V), Asus Crosshair VI Hero, 16GB DDR4 Ram (3200MHz), 128GB SSD + 3TB HDD, Nvidia GTX 1080
Notebook: Asus UL50VT 15.6" (SU7300@1.7GHz, 4GB ram, 500GB HDD, Intel GMA 4500MHD + nVidia G210M, dlouha vydrz cca 7+ hod)
Nargon
Moderátor

Odeslat příspěvekod DevPetr 29. 12. 2017 10:20

Dik za prispevek. Mezi Python a Java ktera se pouziva pro Android je velky rozdil dokonce i mezi Java a Java pro Android. Napriklad uz tim jake veci importovat, jak zachazet s promennou a Class. Ja nemam tuseni o Python takze si nemuzu udelat predstavu jak by to vypadalo.
Nasel jsem jednoduchy priklad na https://stackoverflow.com/questions/130 ... or-android
nebo https://mycodeandlife.wordpress.com/201 ... lator-app/
. Tam ale pouzivaji Client ID and Client Secret fields a ja mam jen Translator Text API subscription key. Ve stare verzi API pouzivali 2 fields a v nove verzi uz jen ten subscription key.
DevPetr
Kolemjdoucí

Odeslat příspěvekod Nargon 29. 12. 2017 21:55

Já jsem tím myslel že tam můžeš krásně vyčíst ten "princip" jak to má komunikovat. To samotné "přepsání" principu do kódu pro android už musíš zvládnout sám, protože tam není žádný špek nebo zvláštnost. Jediný předpoklad je že ovládáš programování pro android a jsi schopen tu aplikaci napsat. Nikoliv že použiješ klávesovou zkratku Control-Cizí (Ctrl+C), Control-Vlastní (Ctrl+V), pak to zkompiluješ a myslíš si že máš hotovo, ale absolutně netušíš proč to funguje.

Viz např tenhle kousek z autorizace:
Kód: Vybrat vše
            token_service_url = 'https://api.cognitive.microsoft.com/sts/v1.0/issueToken'
            request_headers = {'Ocp-Apim-Subscription-Key': self.client_secret}
            response = requests.post(token_service_url, headers=request_headers)
            self.token = response.content
            self.reuse_token_until = datetime.utcnow() + timedelta(minutes=5)

Tj, máš tam https adresu, kam musíš zaslat obyčejný HTTP POST a do HTTP Headru vložit header s názvem "Ocp-Apim-Subscription-Key" a hodnotou, která je ten tvůj klíč který máš. V odpovědi dostaneš kód tokenu. Ten pak použiješ při samotném překladu jako autorizaci. Pak je tam taky informace že ten token má trvanlivost 5 minut a po 5ti minutách si stejným způsobem musíš zažádat o nový token.

To jaké věci importovat pro komunikaci, tj nějakou třídu pro zaslání HTTP requestu a přečtení odpovědi, by jsi měl znát. Nebo alespoň jako programátor by jsi měl být schopen si to dohledat z dokumentace. Stejně tak by jsi měl vědět jak tím vyslat GET nebo POST dotaz a jak tam vložit http header atd... To je "obecná" věc, která nemá vůbec žádnou spojitost s překladem. To je základ obyčejné http komunikace pro stahování webových stránek. Stejně tak co použít aby jsi zjistil aktuální čas a dokázal k tomu přičíst 5 minut, aby jsi věděl kdy ten token vyprší, to jsou taky obecné základy programování, které s překladem nemají vůbec nic společného. Tohle by jsi měl znát a bez nějakých velkých problémů

Pokud ti tento "základ" v programování chybí a neovládáš ho tak začni s ním. Prostě něco jednoduchého. Například primitivní aplikace s několika tlačítky. Jedno tlačítko ti zobrazí například nápis "nazdar". Druhé tlačítko ti místo textu nazdar zobrazí číslo, a každým stiskem toho tlačítka se to číslo bude o 1 zvětšovat. Pak např další tlačítko které ti zobrazí aktuální čas z okamžiku stisku tlačítka. Pak čtvrté tlačítko, které ti zobrazí aktuální čas a zapne automatický refresh, tj aniž by jsi cokoliv mačkal tak každou vteřinu se na tom čase zobrazí o 1s více apod. Tohle jsou takové základní blbůstky, které k ničemu nejsou, jen tě mají naučit programovat pro android. Když to budeš umět tak si můžeš přidat další tlačítko, které například stáhne jednoduchý text z webu, např z adresy: https://pastebin.com/raw/tTd3tDWV a zobrazí ho. A takhle dál a dál se učit programovat. Až když umíš takovéto jednoduché základy tak má smysl jít dál na něco složitějšího.
Je blbost začínat na celkem složité věci, jako že to má komunikovat přes internet po http protokolu a že to má nahrávat zvuk apod. Když nemáš základy na kterých by jsi mohl stavět tak se ti to nepodaří. To je jako kdyby jsi chtěl vyhrát Rallye Paříž-Dakar, ale ještě jsi neuměl auto ani nastartovat a nevěděl do který díry se leje benzín/nafta.
Nemluvě o tom že když se na podobných prkotinách naučíš programovat tak ti nejspíš nebude dělat problém ani pochopit to API k překladači a zvládneš to napsat bez cizí pomoci.
Desktop: Ryzen 7 1800X (3.95GHz, 1.35V), Asus Crosshair VI Hero, 16GB DDR4 Ram (3200MHz), 128GB SSD + 3TB HDD, Nvidia GTX 1080
Notebook: Asus UL50VT 15.6" (SU7300@1.7GHz, 4GB ram, 500GB HDD, Intel GMA 4500MHD + nVidia G210M, dlouha vydrz cca 7+ hod)
Nargon
Moderátor


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 2 návštevníků