package Ġai . plat on . pulsar . common . urls . sites . amazon Ċ Ċ import Ġai . plat on . pulsar . common . config . App Constants Ċ import Ġai . plat on . pulsar . common . urls . preprocess . Abstract Url Normalizer Ċ import Ġai . plat on . pulsar . common . urls . Urls Ċ import Ġorg . apache . commons . lang 3 . StringUtils Ċ import Ġjava . net . URL Encoder Ċ import Ġjava . nio . charset . Charset Ċ Ċ object ĠAmazon Urls Ġ{ ĊĠĠĠ Ġval Ġcharset Ġ= ĠCharset . default Charset () ĊĊĠĠĠ Ġval Ġindex Page Url Contains Ġ= ĠarrayOf ("/ zg bs /", Ġ"/ most - w ished - for /", Ġ"/ new - releases /", Ġ"/ mo vers - and - sh ak ers /") ĊĊĠĠĠ Ġfun Ġis Amazon ( url : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġurl . contains (". amazon .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSite Ġspecific , Ġshould Ġbe Ġmoved Ġto Ġa Ġbetter Ġplace ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġis Amazon Index Page ( url : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġis Amazon ( url ) Ġ&& Ġ( index Page Url Contains . any Ġ{ Ġurl . contains ( it ) Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSite Ġspecific , Ġshould Ġbe Ġmoved Ġto Ġa Ġbetter Ġplace ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġis Amazon Item Page ( url : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġis Amazon ( url ) Ġ&& Ġurl . contains ("/ dp /") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Amazon Review Page ( url : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġis Amazon ( url ) Ġ&& Ġurl . contains ("/ product - reviews /") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind As in ( url : ĠString ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpos Ġ= Ġurl . indexOf ("/ dp /") Ġ+ Ġ"/ dp / ". length ĊĠĠĠĠĠĠĠ Ġif Ġ( pos Ġ> ĠApp Constants . SH OR TEST _ VALID _ URL _ LENGTH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpos 2 Ġ= Ġpos ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( pos 2 Ġ< Ġurl . length Ġ&& Ġurl [ pos 2 ]. is Letter Or Digit ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ++ pos 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pos 2 Ġ<= Ġurl . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġurl . substring ( pos , Ġpos 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind As in Deprecated ( url : ĠString , Ġopen : ĠString Ġ= Ġ"/ dp /", Ġclose : ĠString Ġ= Ġ"/ ref =" ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġopen 0 Ġ= Ġopen ĊĠĠĠĠĠĠĠ Ġvar Ġclose 0 Ġ= Ġclose ĊĊĠĠĠĠĠĠĠ Ġvar Ġas in : ĠString ? Ġ= Ġurl . substring After Last ( open 0 , Ġ"") ĊĠĠĠĠĠĠĠ Ġif Ġ( asin Ġ!= Ġnull Ġ&& Ġas in . isNotBlank () Ġ&& Ġas in . indexOf ('/') Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġas in ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġas in Ġ= ĠStringUtils . substring Between ( url , Ġopen 0 , Ġclose 0 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( asin Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġas in ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġclose 0 Ġ= Ġ"? ref =" ĊĠĠĠĠĠĠĠ Ġas in Ġ= ĠStringUtils . substring Between ( url , Ġopen 0 , Ġclose 0 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( asin Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġas in ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġopen 0 Ġ= ĠURL Encoder . encode ( open 0 , Ġcharset ) ĊĠĠĠĠĠĠĠ Ġclose 0 Ġ= ĠURL Encoder . encode ("/ ref =", Ġcharset ) ĊĠĠĠĠĠĠĠ Ġas in Ġ= ĠStringUtils . substring Between ( url , Ġopen 0 , Ġclose 0 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( asin Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġas in ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġclose 0 Ġ= ĠURL Encoder . encode (" ? ref =", Ġcharset ) ĊĠĠĠĠĠĠĠ Ġas in Ġ= ĠStringUtils . substring Between ( url , Ġopen 0 , Ġclose 0 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( asin Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġas in ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġas in ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠAs in Url Normalizer : ĠAbstract Url Normalizer () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġinvoke ( url : ĠString ?): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( url Ġ== Ġnull ) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! Amazon Urls . is Amazon ( url )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġurl ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġu Ġ= ĠUrl s . get UR LO r Null ( url ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġas in Ġ= ĠAmazon Urls . find As in ( url ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġu . protocol Ġ+ Ġ" ://" Ġ+ Ġu . host Ġ+ Ġ"/ dp /" Ġ+ Ġas in ĊĠĠĠ Ġ} Ċ } Ċ