Mākaʻikaʻi API Unuhi Google

Ma ke ʻano he ʻāpana o kāna Google Cloud, hāʻawi ʻo Google i ka API Unuhi Google me kahi ʻano kumu kūʻai e pili ana i ka hoʻohana. Aia kekahi API undocumented i hiki ke hoʻohana ʻia me ke kī ʻole , akā hōʻole ʻole e hana ma hope o kekahi mau noi. Ke hoʻohana nei i ka hana unuhi pūnaewele o Google Chrome, ʻike ʻia hiki ke unuhi ʻia nā ʻaoʻao i ka maikaʻi maikaʻi loa me ka ʻole o ka palena palena ʻole.


ʻIke ʻia ua hoʻohana ʻia ke kime nmt holomua ma aneʻi. Akā ʻo wai ka API a Google Chrome e hoʻohana ai i loko e unuhi i ka ʻike a hiki i kēia API ke kuhikuhi pololei ʻia - ʻoiai ma ka ʻaoʻao kikowaena? No ke kālailai ʻana i nā kalepa pūnaewele, ʻo nā mea pono e like me Wireshark a i ʻole Telerik Fiddler , kahi e hiki ai ke kālailai i nā kaʻa i hoʻopā ʻia ʻia. Akā hāʻawi ʻo Chrome i nā noi i hoʻouna ʻia no ka unuhi ʻaoʻao me ka uku ʻole: Hiki ke ʻike maʻalahi ʻia iā lākou me ka hoʻohana ʻana iā Chrome DevTools:

Inā hoʻokō ʻoe i kahi unuhi, a laila hopu i ka noi POST koʻikoʻi e https://translate.googleapis.com ma o "Copy> Copy as cURL (bash)" a hoʻokō ʻia ia i kahi mea hana e like me Postman , no ka laʻana, hiki iā ʻoe ke hoʻouna hou i ka noi me ka ʻole o nā pilikia.:

ʻIke ʻia ka manaʻo o nā palena URL:

Waiwai laʻanaManaʻo
makahiki3Anotation mode (e hoʻopili i ka hoʻihoʻi hoʻi)
mea kūʻai akute_libKa ʻike o ka mea kūʻai aku (ʻokoʻa, ʻo "webapp" ka waiwai ma o ka pūnaewele unuhi pūnaewele Google; he hopena ma ka hōʻano hoʻihoʻi a me ka palena palena palena)
hōʻanohtmlHōʻike string (nui no ka unuhi ʻana i nā tags HTML)
v1.0Helu mana Google Translate
AIzaSyBOti4mM-6x9WDnZIjIeyEU21OpBXqWBgwKī API (ʻike ma lalo)
paukūvTE_20200210_00Mana hana mana
sldeʻLelo kumu
tlenʻ Targetlelo kūkā
spnmtHoʻohālike ML
tc1ʻike ʻole ʻia
sr1ʻike ʻole ʻia
tk709408.812158Kaha (ʻike ma lalo)
Makahiki1ʻike ʻole ʻia

Hoʻonohonoho ʻia kekahi mau poʻo pane - akā hiki i kēia ke nānā nui ʻia. Ma hope o ke koho lima ʻana i nā poʻo āpau, me nā mea mai ka ʻohana mea hoʻohana , ʻike ʻia kahi pilikia encode ke komo ʻana i nā huapalapala kūikawā (eia ke unuhi nei iā " Hello World "):

Inā hoʻoulu hou ʻoe i ka mea hoʻohana (ʻaʻole hana ʻino ia), hāʻawi ka API i nā huapalapala encode UTF-8:

Aia mākou ma laila a loaʻa iā mākou nā ʻike āpau e hoʻohana ai i kēia API ma waho o Google Chrome? Inā ʻoe e hoʻololi i ke aho e unuhi ʻia (kahua kahua ʻikepili q o ka noi POST) mai, no ka laʻana, "Aloha honua" i ka "Aloha honua ! ", Loaʻa iā mākou kahi leka uila:

Ua unuhi mākou i kēia mea i hoʻololi hou ʻia i loko o Google Chrome me ka hoʻohana ʻana i ka hana unuhi pūnaewele a ʻike ʻia, me ka hoʻohui ʻana i ka parameter q , ua loli ʻia ka parameter tk (ua like nā mea ʻē aʻe āpau):

ʻIke, he hōʻailona ia e pili i ke aho, ʻaʻole ʻike maʻalahi ʻia ke ʻano o ia. Ke hoʻomaka ʻoe i ka unuhi pūnaewele, hoʻouka nā faila aʻe:

  • 1 faila CSS: translateelement.css
  • 4 kiʻi paʻi: translate_24dp.png (2x), gen204 (2x)
  • Nā faila 2 JS: main_de.js , element_main.js

Hoʻopiʻi ʻia a hoʻoliʻiliʻi ʻia nā faila JavaScript ʻelua. Ke kōkua nei nā mea hana e like me JS Nice a me de4js iā mākou e heluhelu hou i kēia mau faila. I mea e debug ai iā lākou ke ola, paipai mākou i ka Chrome Extension Requ Request, e tunnels i nā faila mamao ma kahi o ka lele:

I kēia manawa hiki iā mākou ke debug i ke code ( CORS pono e hoʻoulu mua ʻia ma ka kikowaena kikowaena). Ua hūnā ʻia ka ʻāpana code pili no ka hana ʻana i ka hōʻailona ma ka faila element_main.js i kēia ʻāpana:

b7739bf50b2edcf636c43a8f8910def9

Eia ua holoi ʻia ka huaʻōlelo me ke kōkua o kekahi mau hoʻololi iki . Akā eia naʻe ke nalowale nei mākou i hoʻokahi ʻāpana o ka puzzle: Ma waho aʻe o ka paio a (ʻo ia ka huaʻōlelo e unuhi ʻia), ua hāʻawi ʻia kahi paio b i ka hana Bp () kahe i ka hashing. Akā no hea ia? Inā lele mākou i ke kāhea hana o Bp () , ʻike mākou i ka ʻāpana code aʻe:

b7739bf50b2edcf636c43a8f8910def9

Ua hoʻolaha ʻia ka hana Hq ma mua e like me kēia:

b7739bf50b2edcf636c43a8f8910def9

Eia ka Deobfuscater i waiho i kahi ʻōpala; Ma hope o ko mākou pani ʻanaString.fromCharCode ('...') me nā kaula o kēlā me kēia ʻano, e hemo i ka obsolete a () a ʻāpana pū i nā hana i hea ʻia [c (), c ()] , ʻo ka hopena:

b7739bf50b2edcf636c43a8f8910def9

A i ʻole maʻalahi hoʻi:

b7739bf50b2edcf636c43a8f8910def9

Ua wehewehe mua ʻia ka hana yq ma ke ʻano:

b7739bf50b2edcf636c43a8f8910def9

Aia paha ka hua i loko o ka mea honua google.translate._const._ctkk , i loaʻa i ka manawa holo. Akā ma hea i hoʻonohonoho ʻia ai? I kahi ʻē aʻe, i hoʻouka ʻia ma mua file JS main_de.js, ma ka liʻiliʻi hiki ke loaʻa pū i ka hoʻomaka. Pākuʻi mākou i ka mea aʻe i ka hoʻomaka:

b7739bf50b2edcf636c43a8f8910def9

I ka console e loaʻa maoli iā mākou ka hua o kēia manawa:

Haʻalele kēia iā Google Chrome iā ia iho, nāna e hāʻawi i ka hua ma ke ʻano he koho hope loa. ʻO ka mea pōmaikaʻi, ʻo kāna code kumu (Chromium, me ka ʻāpana unuhi) he hāmama a no laila ākea e loaʻa. Huki mākou i ka waihona ma kahi a ʻike i ke kāhea i ka hana TranslateScript :: GetTranslateScriptURL i ka translate_script.cc faila i nā ʻāpana / unuhi / kumu / polokalamu kele pūnaewele:

b7739bf50b2edcf636c43a8f8910def9

Hoʻohālikelike ka loli me ka URL i ka faila like:

b7739bf50b2edcf636c43a8f8910def9

Inā mākou e nānā i kēia manawa i ka faila element.js (ma hope o ka deobfuscating hou), ʻike mākou i ke komo paʻakikī c._ctkk - hoʻonohonoho pū ʻia ka mea google.translate a ʻo ka hoʻouka ʻana i nā waiwai kūpono āpau (a mākou i ʻike ai ma mua) ua hoʻomaka ʻia.:

b7739bf50b2edcf636c43a8f8910def9

I kēia manawa ke hoʻomau nei ke kī kī no ka noʻonoʻo (me ka waiwai AIzaSyBOti4mM-6x9WDnZIjIeyEU21OpBXqWBgw). Me he mea lā he kī API hoʻohiwahiwa generic (a hiki ke loaʻa pū i kekahi o nā hopena Google ). Hoʻokomo ʻia ia i loko o Chromium i ka faile translate_url_util.cc i nā waihona e unuhi / unuhi / kāna / ʻike / polokalamu kele pūnaewele:

b7739bf50b2edcf636c43a8f8910def9

Hoʻokumu ʻia ke kī ma google_apis / google_api_keys.cc mai kahi waiwai dummy:

b7739bf50b2edcf636c43a8f8910def9

Eia nō naʻe, hōʻike kahi hōʻike e like ka hana a ka API me ka ʻole o kēia kiʻina kī. Inā hoʻāʻo ʻoe me ka API, e hoʻihoʻi ʻoe i ke code kūlana 200 inā kūleʻa ʻoe. Inā ʻoe e holo i kahi palena, loaʻa iā ʻoe ke code kūlana 411 hoʻi me ka leka " POST noi koi i kahi poʻo-lōʻihi poʻo . No laila pono e hoʻokomo i kēia poʻo poʻo (i hoʻonohonoho ʻia ma ke ʻano he poʻo manawa ma Postman).

ʻO ka hōʻano hoʻihoʻi o nā kaula i unuhi ʻia he mea maʻamau ke nui nā ʻōlelo i hoʻokahi noi. Hoʻopili ʻia nā ʻōlelo pākahi e nā hāmeʻa i- / b-HTML:

Eia kekahi, ʻaʻole hoʻouna ʻo Google Chrome i ka HTML holoʻokoʻa i ka API, akā mālama ʻia nā waiwai e like me href i ke noi (a hoʻonohonoho i nā ʻikepili i hiki ke hāʻawi ʻia nā hōʻailona ma ka ʻaoʻao o ka mea kūʻai aku):

Inā hoʻololi ʻoe i ka waiwai o ka mea kūʻai mai POST mai te_lib (Google Chrome) ma ka webapp ( kahua pūnaewele unuhi Google ), loaʻa iā ʻoe ke aho unuhi hope loa:

ʻO ka pilikia e ʻoi aku paha kāu e holo i ka palena o ka palena ma mua o via te_lib (no ka hoʻohālikelike ʻana: me webapp e kiʻi ʻia ma hope o 40,000 chars, me te_lib ʻaʻohe palena palena). No laila pono mākou e nānā pono i ka pehea e hoʻopau ai ʻo Chrome i ka hopena. E loaʻa ia ma aneʻi ma element_main.js:

b7739bf50b2edcf636c43a8f8910def9

Inā hoʻouna ʻoe i ke code HTML holoʻokoʻa i ka API, waiho ia i nā ʻano ma ka pane unuhi. No laila ʻaʻole pono mākou e hoʻohālike i ke ʻano holoʻokoʻa holoʻokoʻa, akā e unuhi wale i ke kaula hope i unuhi ʻia mai ka pane. No ka hana ʻana i kēia, kūkulu mākou i kahi parser tag HTML liʻiliʻi e hoʻolei i nā huaʻōlelo <i> waho loa me kā lākou ʻike a wehe i nā hōʻailona <b> waho loa. Me kēia ʻike (ma hope o ka hoʻokomo ʻana i nā hilinaʻi me ka haku mele e koi iā fzaninotto / faker vielhuber / stringhelper ) hiki iā mākou ke kūkulu i kahi mana ʻaoʻao kikowaena o ka API unuhi.:

b7739bf50b2edcf636c43a8f8910def9

ʻO nā mea aʻe nā hopena o kahi hoʻokolohua mua i lawe ʻia ma nā ʻōnaehana ʻelima me nā bandwīwī like ʻole a me nā helu IP:

ʻanoNā hāmeʻe no ke noiDurationHewa heluʻO ke kumukūʻai ma o API kūhelu
13.064.662~25003: 36: 17h0%237,78€
24.530.510~25011: 09: 13h0%446,46€
49.060.211~25020: 39: 10h0%892,90€
99.074.487~100061: 24: 37h0%1803,16€
99.072.896~100062: 22: 20h0%1803,13€
Σ284.802.766~ Ø550Σ159: 11: 37h0%5 € 5183.41

Kahakaha: Ua kākau ʻia kēia pou blog me nā palapala āpau no nā hana hoʻāʻo wale nō. Mai Mai hoʻohana i nā moʻolelo keaka no hoʻomāhuahua ai ana, kahi hana me ka kūhelu Google Translation API .

Hope