/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠAr th ur ĠI van ets , Ġar th ur . iv an ets . work @ gmail . com Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . arth ur iv an ets . google play sc raper . requests Ċ Ċ import Ġcom . arth ur iv an ets . google play sc raper . model . App Review Ċ import Ġcom . arth ur iv an ets . google play sc raper . parsers . Result Parser Ċ import Ġcom . arth ur iv an ets . google play sc raper . util . Paged Result Ċ import Ġcom . arth ur iv an ets . google play sc raper . util . fetch Continuous ly Ċ import Ġcom . arth ur iv an ets . google play sc raper . util . Sc raper Error Ċ import Ġokhttp 3 . MediaType . Companion . to MediaType Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . RequestBody Ċ import Ġokhttp 3 . RequestBody . Companion . to RequestBody Ċ import Ġokhttp 3 . Request Ġas ĠOk HttpRequest Ċ import Ġokhttp 3 . Response Ġas ĠOk HttpResponse Ċ Ċ class ĠGet App Reviews Params ( ĊĠĠĠ Ġval ĠappId : ĠString , ĊĠĠĠ Ġval Ġlanguage : ĠString Ġ= ĠDefault Params . LANGUAGE , ĊĠĠĠ Ġval Ġcountry : ĠString Ġ= ĠDefault Params . COUNTRY , ĊĠĠĠ Ġval Ġlimit : ĠInt Ġ= ĠDefault Params . LIMIT , ĊĠĠĠ Ġval Ġsorting Order : ĠReview Sorting Order Ġ= ĠReview Sorting Order . NEW EST Ċ ) Ċ Ċ internal Ġclass ĠGet App Reviews Request ( ĊĠĠĠ Ġprivate Ġval Ġparams : ĠGet App Reviews Params , ĊĠĠĠ Ġprivate Ġval ĠbaseUrl : ĠString , ĊĠĠĠ Ġprivate Ġval ĠhttpClient : ĠOk HttpClient , ĊĠĠĠ Ġprivate Ġval Ġrequest Result Parser : ĠResult Parser < String , ĠP aged Result < List < App Review >>> Ċ ) Ġ: ĠRequest < List < App Review >> Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġexecute (): ĠResponse < List < App Review >, ĠSc raper Error > Ġ= Ġresponse Ġ{ ĊĠĠĠĠĠĠĠ Ġfetch Continuous ly ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Count Ġ= Ġparams . limit , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Request Executor Ġ= Ġ{ Ġexecute Request ( null ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Request Result Parser Ġ= Ġrequest Result Parser , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubsequent Request Executor Ġ= Ġ:: execute Request , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubsequent Request Result Parser Ġ= Ġrequest Result Parser ĊĠĠĠĠĠĠĠ Ġ). map Ġ{ Ġreview Ġ-> Ġreview . append Details () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexecute Request ( token : ĠString ?): ĠOk HttpResponse Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠOk HttpRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( create Request Url ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ( create RequestBody ( token )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let ( httpClient :: new Call ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Request Url (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( baseUrl ). append ("/ _/ Play Store Ui / data / bat che xec ute ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" ? rpc ids = qn Kh Ob ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("& f . sid =- 6 9 7 9 0 6 4 2 7 1 5 5 5 2 1 7 2 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("& bl = bo q _ play u iser ver _ 2 0 1 9 0 9 0 3 . 0 8 _ p 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("& hl =" ). append ( params . language ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("& gl =" ). append ( params . country ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("& auth user ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("& soc - app = 1 2 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("& soc - platform = 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("& soc - device = 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("& _ req id = 1 0 6 5 2 1 3 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate RequestBody ( ĊĠĠĠĠĠĠĠ Ġtoken : ĠString ? ĊĠĠĠ Ġ): ĠRequest Body Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠnumberOf Reviews Per Request Ġ= Ġ 1 5 0 ĊĠĠĠĠĠĠĠ Ġval Ġsorting Order Ġ= Ġparams . sorting Order . value ĊĠĠĠĠĠĠĠ Ġval ĠappId Ġ= Ġparams . appId ĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġif Ġ( token Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" f . req =% 5 B % 5 B % 5 B % 2 2 U sv DT d % 2 2 % 2 C % 2 2 % 5 B null % 2 C null % 2 C % 5 B 2 % 2 C ${ sorting Order }% 2 C % 5 B ${ numberOf Reviews Per Request }% 2 C null % 2 C % 5 C % 2 2 ${ token }% 5 C % 2 2 % 5 D % 2 C null % 2 C % 5 B % 5 D % 5 D % 2 C % 5 B % 5 C % 2 2 ${ appId }% 5 C % 2 2 % 2 C 7 % 5 D % 5 D % 2 2 % 2 C null % 2 C % 2 2 generic % 2 2 % 5 D % 5 D % 5 D " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" f . req =% 5 B % 5 B % 5 B % 2 2 U sv DT d % 2 2 % 2 C % 2 2 % 5 B null % 2 C null % 2 C % 5 B 2 % 2 C ${ sorting Order }% 2 C % 5 B ${ numberOf Reviews Per Request }% 2 C null % 2 C null % 5 D % 2 C null % 2 C % 5 B % 5 D % 5 D % 2 C % 5 B % 5 C % 2 2 ${ appId }% 5 C % 2 2 % 2 C 7 % 5 D % 5 D % 2 2 % 2 C null % 2 C % 2 2 generic % 2 2 % 5 D % 5 D % 5 D " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmedia Type Ġ= Ġ" application / x - www - form - urlencoded ; charset = UTF - 8 " ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbody . to RequestBody ( media Type . to MediaType ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠApp Review . append Details (): ĠApp Review Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠappId Ġ= Ġparams . appId , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġ"$ baseUrl / store / apps / details ? id =${ params . appId }& review Id =${ this . id }" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ Ċ }