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

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

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

Արդյո՞ք մենք արդեն այնտեղ ենք և ունենք արդյոք բոլոր տեղեկությունները Google APP- ից դուրս այս API- ն օգտագործելու համար: Եթե ​​փոխելու եք թարգմանվող տողը (POST հարցման q տվյալների տվյալների դաշտը), օրինակ, «Hello world» - ից «Hello world ! «, Մենք սխալ հաղորդագրություն ենք ստանում:

Այժմ մենք վերափոխում ենք այս փոփոխվածը 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

Deobfuscater- ը այստեղ աղբ է թողել. 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 կարգավիճակի ծածկագիր: Եթե ​​այնուհետև բախվեք սահմանի հետ , ապա « POST հարցումները պահանջում են բովանդակության երկարության վերնագիր » հաղորդագրությամբ հետ եք ստանում 411 կարգավիճակի ծածկագիրը: Ուստի ցանկալի է ներառել այս վերնագիրը (որը փոստատարում ավտոմատ կերպով դրվում է որպես ժամանակավոր վերնագիր ):

Թարգմանված տողերի վերադարձի ձևաչափն անսովոր է, երբ մեկ հարցումում կա մի քանի նախադասություն: Առանձին նախադասությունները կցվում են 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> պիտակները: Հաշվի առնելով դա, մենք այժմ կարող ենք կառուցել թարգմանության 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- ի :

Վերադառնալ