Google Translation API հակերացում

Google- ն իր Google Cloud- ի մի մաս է առաջարկում Google Translate API- ն `օգտագործման վրա հիմնված ծախսերի կառուցվածքով : Կա նաև չփաստաթղթավորված API, որը կարող է օգտագործվել առանց բանալիի , բայց որը հրաժարվում է աշխատել ընդամենը մի քանի հարցումներից հետո: Google Chrome- ի կայքի թարգմանման գործառույթն օգտագործելիս նկատելի է, որ էջերը կարող են թարգմանվել շատ լավ որակով ՝ առանց որևէ նկատելի սահմանափակումների:


Ըստ ամենայնի, այստեղ արդեն օգտագործվում է առաջադեմ nmt մոդելը : Բայց ո՞ր API- ն է Google Chrome- ը օգտագործում ներքինը `բովանդակությունը թարգմանելու համար, և կարո՞ղ է արդյոք այս API- ին ուղղակիորեն դիմել` նույնիսկ սերվերի կողմից: Network անցային երթևեկությունը վերլուծելու համար առաջարկվում են այնպիսի գործիքներ, ինչպիսիք են Wireshark- ը կամ Telerik Fiddler- ը , որոնք կարող են նաև վերլուծել կոդավորված երթևեկությունը: Բայց Chrome- ը նույնիսկ առաքում է էջի թարգմանության համար իր ուղարկած հարցումները անվճար . Դրանք հեշտությամբ կարելի է դիտել ՝ օգտագործելով Chrome DevTools:

Եթե ​​թարգմանություն եք կատարում, ապա բռնել POST- ի կարևոր խնդրանքը դեպի « https://translate.googleapis.com » «Պատճենել> Պատճենել որպես cURL (bash)» միջոցով և կատարել այն, օրինակ, Փոստատարի նման գործիքում, կարող եք հարցումը կրկին ուղարկել առանց խնդիրների::

URL պարամետրերի նշանակությունը նույնպես հիմնականում ակնհայտ է։:

ԲանալիՕրինակ արժեքԻմաստը
աննո3Անոտացիայի ռեժիմ (ազդում է վերադարձի ձևաչափի վրա)
հաճախորդte_libՀաճախորդի տեղեկություններ (տարբեր է. Google Translate վեբ ինտերֆեյսի միջոցով արժեքը «webapp» է. ազդում է վերադարձի ձևաչափի և արագության սահմանափակման վրա)
ձևաչափhtmlԼարի ձևաչափ (կարևոր է HTML պիտակները թարգմանելու համար)
գ1.0Google Translate- ի տարբերակի համարը
բանալիAIzaSyBOti4mM-6x9WDnZIjIeyEU21OpBXqWBgwAPI ստեղն (տես ստորև)
լոգլդvTE_20200210_00Արձանագրության տարբերակը
սլդեԱղբյուրի լեզուն
tlenԹիրախային լեզու
սպնմտML մոդել
tc1անհայտ
Սր1անհայտ
tk709408.812158Նշան (տես ստորև)
Նորաձեւություն1անհայտ

Որոշ հարցումների վերնագրեր նույնպես դրված են, բայց դրանք հիմնականում կարող են անտեսվել: Բոլոր վերնագրերը ձեռքով ապանշելուց հետո, ներառյալ օգտագործողի գործակալի սլաքները, հատուկ նիշեր մուտքագրելիս հայտնաբերվում է կոդավորման խնդիր (այստեղ « Բարև աշխարհ » -ը թարգմանելիս):

Եթե ​​դուք կրկին ակտիվացնում եք օգտագործողի գործակալը (դա, ընդհանուր առմամբ, չի վնասում), API- ն առաքում է UTF-8 կոդավորված նիշեր:

Արդյո՞ք մենք հիմա հասե՞լ ենք մեր նպատակին և ունենք այս API-ը Google Chrome-ից դուրս օգտագործելու համար անհրաժեշտ բոլոր տեղեկությունները: Այնուամենայնիվ, եթե դուք փոխեք թարգմանվող տողը (POST հարցման տվյալների դաշտը q ), օրինակ՝ «Բարև Աշխարհ»-ից «Բարև Աշխարհ ! »-ի, դուք կստանաք սխալի հաղորդագրություն::

Այժմ մենք կատարում ենք այս փոփոխված տողի մեկ այլ թարգմանություն Google Chrome-ում՝ օգտագործելով կայքի թարգմանության ֆունկցիան և պարզում ենք, որ q պարամետրից բացի, փոխվել է նաև tk պարամետրը (մնացած բոլոր պարամետրերը մնացել են նույնը)::

Ակնհայտ է, որ դա նշան է, որը կախված է լարից, որի կառուցվածքը հեշտ չէ տեսնել: Երբ սկսում եք կայքի թարգմանությունը, հետևյալ ֆայլերը բեռնվում են:

  • 1 CSS ֆայլ ՝ translateelement.css
  • 4 գրաֆիկա ՝ translate_24dp.png (2x), gen204 (2x)
  • 2 JS ֆայլ ՝ main_de.js , element_main.js

JavaScript- ի երկու ֆայլերը կոծկված և մանրացված են: JS Nice- ի և de4js- ի նման գործիքներ այժմ օգնում են մեզ այս ֆայլերն ավելի ընթեռնելի դարձնել: Որպեսզի դրանք ուղիղ հեռացնեք սխալներից, մենք խորհուրդ ենք տալիս Chrome Extension Requestly- ին, որը թունելում է հեռավոր ֆայլերը տեղական ռեժիմում:

Այժմ մենք կարող ենք սխալ գործել կոդը ( CORS- ը նախ պետք է ակտիվացվի տեղական սերվերում): Նշանը գեներացնելու համար համապատասխան ծածկագրի բաժինը, կարծես, թաքնված է այս բաժնում element_main.js ֆայլում:

b7739bf50b2edcf636c43a8f8910def9

Այստեղ տեքստը հեշացվում է որոշ բիթային հերթափոխի օգնությամբ : Բայց, ցավոք, մեզ դեռ բացակայում է գլուխկոտրուկի մի կտորը. Բացի a փաստարկից (որը թարգմանվող տեքստ է), մեկ այլ փաստարկ b փոխանցվում է Bp () գործառույթին. Մի տեսակ սերմ, որը կարծես թե ժամանակ առ ժամանակ փոխվում է և որը ներառում է նաև հոսում է հեշինգ Բայց որտեղի՞ց է նա գալիս: Եթե անցնենք Bp () ֆունկցիայի կանչին, ապա մենք կգտնենք հետևյալ կոդերի բաժինը:

b7739bf50b2edcf636c43a8f8910def9

Hq գործառույթը նախապես հայտարարվում է հետևյալ կերպ:

b7739bf50b2edcf636c43a8f8910def9

Ապակոդավորիչը որոշակի խառնաշփոթ թողեց այստեղ. String.fromCharCode('...')-ը համապատասխան տողերով փոխարինելուց, հնացած a()- ն հեռացնելուց և [c(), c()] ֆունկցիաների կանչերը միացնելուց հետո արդյունքը հետևյալն է...:

b7739bf50b2edcf636c43a8f8910def9

Կամ նույնիսկ ավելի հեշտ:

b7739bf50b2edcf636c43a8f8910def9

Yq գործառույթը նախկինում սահմանված է որպես:

b7739bf50b2edcf636c43a8f8910def9

Սերմը կարծես թե գտնվում է google.translate._const._ctkk գլոբալ օբյեկտում, որը մատչելի է գործարկման ժամանակ: Բայց որտե՞ղ է դրված: Մյուս, նախկինում բեռնված JS ֆայլը main_de.js- ում, համենայն դեպս, այն նույնպես հասանելի է սկզբում: Սկզբին մենք ավելացնում ենք հետեւյալը:

b7739bf50b2edcf636c43a8f8910def9

Վահանակում մենք իրականում ստանում ենք ընթացիկ սերմը:

Սա թողնում է ինքը ՝ Google Chrome- ը, որն, ըստ երեւույթին, տալիս է սերմը, որպես վերջին տարբերակ: Բարեբախտաբար, դրա սկզբնաղբյուրը (Chromium, այդ թվում ՝ Translate բաղադրիչը) բաց աղբյուր է, ուստի ՝ մատչելի է հանրության համար: Մենք տեղանքով քաշում ենք պահոցը և գտնում ենք TranslateScript :: GetTranslateScriptURL գործառույթի կանչը translate_script.cc ֆայլում բաղադրիչների / translate / core / դիտարկիչի թղթապանակում:

b7739bf50b2edcf636c43a8f8910def9

URL- ով փոփոխականը խիստ ֆիքսված է նույն ֆայլում:

b7739bf50b2edcf636c43a8f8910def9

Եթե ​​մենք հիմա ավելի սերտորեն ուսումնասիրենք element.js ֆայլը (նորից դեոբֆուսացումից հետո), ապա կգտնենք կոշտ տեղադրված մուտքը c._ctkk - google.translate օբյեկտը նույնպես համապատասխանաբար դրված է, և բոլոր համապատասխան ակտիվների բեռնումը (որը մենք արդեն հայտնաբերել ենք ավելի վաղ) գործարկվում է:

b7739bf50b2edcf636c43a8f8910def9

Այժմ պարամետրի բանալին մնում է քննարկման (AIzaSyBOti4mM-6x9WDnZIjIeyEU21OpBXqWBgw արժեքով): Թվում է, թե դա ընդհանուր զննարկչի API բանալի է (որը կարելի է գտնել նաև Google- ի որոշ արդյունքներում ): Այն տեղադրված է Chromium- ում ՝ translate_url_util.cc ֆայլում ՝ բաղադրիչների / թարգմանության / միջուկի / զննարկիչի թղթապանակում:

b7739bf50b2edcf636c43a8f8910def9

Բանալին գեներացվում է google_apis / google_api_keys.cc- ում կեղծ արժեքից:

b7739bf50b2edcf636c43a8f8910def9

Սակայն փորձարկումները ցույց են տալիս, որ API զանգերը նույնքան լավ են աշխատում առանց այս հիմնական պարամետրի: API-ի հետ փորձարկումները հաջող զանգերի դեպքում այժմ վերադարձնում են 200 կարգավիճակի կոդ: Եթե սահմանաչափը հասնի, վերադարձվում է 411 կարգավիճակի կոդ՝ « POST հարցումները պահանջում են բովանդակության երկարության վերնագիր » հաղորդագրությամբ: Հետևաբար, խորհուրդ է տրվում ներառել նաև այս վերնագիրը (որը Postman-ում ավտոմատ կերպով սահմանվում է որպես ժամանակավոր վերնագիր ):

Թարգմանված տողերի վերադարձի ձևաչափն անսովոր է, երբ մեկ հարցումում կա մի քանի նախադասություն: Առանձին նախադասությունները կցվում են i- / b-HTML պիտակներով:

Բացի այդ, Google Chrome- ը ամբողջ HTML- ը չի ուղարկում API- ին, բայց հարցման մեջ պահպանում է ատրիբուտի արժեքները, ինչպիսիք են href- ը (և փոխարենը ինդեքսներ է սահմանում, որպեսզի պիտակները հետագայում նշանակվեն հաճախորդի կողմից):

Եթե ​​փոխեք POST ստեղնաշարի հաճախորդի արժեքը te_lib- ից (Google Chrome) webapp- ում ( Google Translate կայք ), դուք ստանում եք վերջին թարգմանված տողը:

Խնդիրն այն է, որ դուք շատ ավելի հավանական է, առաջադրվելու մեջ փոխարժեքով սահմանափակող, քան միջոցով te_lib (համեմատության համար նշենք, ինչպես webapp այս ձեռք բերված հետո 40,000 նիշ, ինչպես te_lib չկա փոխարժեքը սահմանափակող): Այսպիսով, մենք պետք է ավելի սերտ նայենք, թե ինչպես է Chrome- ը վերլուծում արդյունքը: Մենք այն կգտնենք այստեղ ՝ element_main.js:

b7739bf50b2edcf636c43a8f8910def9

Եթե ​​ամբողջ HTML կոդը ուղարկեք API-ին, այն թողնում է ատրիբուտները թարգմանված պատասխանում: Հետևաբար, մենք չպետք է ընդօրինակենք ամբողջ վերլուծական վարքը, այլ միայն պատասխանից հանենք վերջնական թարգմանված տողը: Դա անելու համար մենք կառուցում ենք փոքր HTML պիտակների վերլուծիչ, որը մերժում է ամենահեռավոր <i> պիտակները, ներառյալ դրանց բովանդակությունը և հեռացնում ամենահեռավոր <b> թեգերը: Այս գիտելիքներով ( կոմպոզիտորի հետ կախվածությունը տեղադրելուց հետո պահանջվում է fzaninotto / faker vielhuber / stringhelper ) մենք այժմ կարող ենք կառուցել թարգմանության API-ի սերվերային տարբերակը::

b7739bf50b2edcf636c43a8f8910def9

Ստորև բերված են նախնական փորձարկման արդյունքներ, որոնք իրականացվել են հինգ տարբեր համակարգերի վրա `տարբեր թողունակությամբ և IP հասցեներով:

ԲնավորությունՆիշեր ըստ պահանջիՏեւողությունըՍխալի տեմպըԱրժեքը պաշտոնական API- ի միջոցով
13.064.662~25003: 36: 17 ժ0%237,78€
24.530.510~25011: 09: 13 ժ0%446,46€
49.060.211~25020: 39: 10 ժ0%892,90€
99.074.487~100061: 24: 37 ժ0%1803,16€
99.072.896~100062: 22: 20 ժ0%1803,13€
Σ284.802.766~ Ø550Σ159: 11: 37 ժ0%Σ € 5183,41

Նշում. Բլոգի այս գրառումը, ներառյալ բոլոր գրերը, գրվել է միայն փորձարկման նպատակով: Մի օգտագործեք սցենար արդյունավետ օգտագործման, փոխարենը աշխատելու պաշտոնական Google Translation API- ի :

Վերադառնալ