package Ġcom . rer ere . iw ara 4 a . data . api . service Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . annotation . Int Range Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . rer ere . iw ara 4 a . data . api . Response Ċ import Ġcom . rer ere . iw ara 4 a . data . model . comment . Comment Ċ import Ġcom . rer ere . iw ara 4 a . data . model . comment . Comment List Ċ import Ġcom . rer ere . iw ara 4 a . data . model . comment . Comment Post Param Ċ import Ġcom . rer ere . iw ara 4 a . data . model . comment . Comment Post er Type Ċ import Ġcom . rer ere . iw ara 4 a . data . model . detail . image . Image Detail Ċ import Ġcom . rer ere . iw ara 4 a . data . model . detail . video . More Video Ċ import Ġcom . rer ere . iw ara 4 a . data . model . detail . video . Video Detail Ċ import Ġcom . rer ere . iw ara 4 a . data . model . flag . Follow Response Ċ import Ġcom . rer ere . iw ara 4 a . data . model . flag . Like Response Ċ import Ġcom . rer ere . iw ara 4 a . data . model . friends . Friend Ċ import Ġcom . rer ere . iw ara 4 a . data . model . friends . Friend List Ċ import Ġcom . rer ere . iw ara 4 a . data . model . friends . Friend Status Ċ import Ġcom . rer ere . iw ara 4 a . data . model . index . Media List Ċ import Ġcom . rer ere . iw ara 4 a . data . model . index . Media Preview Ċ import Ġcom . rer ere . iw ara 4 a . data . model . index . MediaType Ċ import Ġcom . rer ere . iw ara 4 a . data . model . index . Subscription List Ċ import Ġcom . rer ere . iw ara 4 a . data . model . playlist . Playlist Detail Ċ import Ġcom . rer ere . iw ara 4 a . data . model . playlist . Playlist Overview Ċ import Ġcom . rer ere . iw ara 4 a . data . model . session . Session Ċ import Ġcom . rer ere . iw ara 4 a . data . model . user . Self Ċ import Ġcom . rer ere . iw ara 4 a . data . model . user . UserData Ċ import Ġcom . rer ere . iw ara 4 a . data . model . user . User Friend State Ċ import Ġcom . rer ere . iw ara 4 a . ui . component . Sort Type Ċ import Ġcom . rer ere . iw ara 4 a . util . log Error Ċ import Ġcom . rer ere . iw ara 4 a . util . log Info Ċ import Ġcom . rer ere . iw ara 4 a . util . okhttp .* Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġokhttp 3 . Form Body Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . Request Ċ import Ġorg . js oup . J soup Ċ import Ġorg . js oup . nodes . Element Ċ import Ġjava . io . IOException Ċ import Ġjava . net . URL Decoder Ċ Ċ private Ġconst Ġval ĠTAG Ġ= Ġ" Iw ara Parser " Ċ Ċ /** Ċ Ġ* Ġä½¿çĶ¨ J soup æĿ¥ è§£æŀĲ åĩº ç½ĳ é¡µ ä¸ĬçļĦ èµĦæºĲ Ċ Ġ* Ċ Ġ* Ġæ Ł Ĳ äºĽ èµĦæºĲ æĹłæ³ķ éĢļè¿ĩ Ġrest ful Ġapi Ġ çĽ´æİ¥ èİ·åıĸ ï¼Į åĽłæŃ¤ éľĢè¦ģ Ċ Ġ* ĠéĢļè¿ĩ js oup æĿ¥ è§£æŀĲ Ċ Ġ* Ċ Ġ* Ġ@ author ĠRE Ċ Ġ*/ Ċ class ĠI w ara Parser ( ĊĠĠĠ Ġprivate Ġval Ġok HttpClient : ĠOk HttpClient Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġgson Ġ= ĠGson () ĊĠĠĠ Ġprivate Ġval Ġmedia HttpClient Ġ= ĠOk HttpClient . Builder () ĊĠĠĠĠĠĠĠ Ġ. cookie Jar ( Cookie Jar Helper ()) ĊĠĠĠĠĠĠĠ Ġ. dns ( Smart Dns ) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġsuspend Ġfun Ġlogin ( username : ĠString , Ġpassword : ĠString ): ĠResponse < Session > Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" login : Ġ å¼Ģå§ĭ çĻ»å½ķ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Info (" å¼Ģå§ĭ çĻ»å½ķ : Ġ\"$ username |$ password \" ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġok HttpClient . get Cookie (). clean () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ é¦ĸåħĪ è®¿éĹ® login é¡µéĿ¢ è§£æŀĲ åĩº Ġant ib ot _ key ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" login : Ġ å¼Ģå§ĭ åıĳ èµ· è¯·æ±Ĥ : Ġ$ username /$ password ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Request Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// ec chi . iw ara . tv / user / login ? destination = front & language = zh - h ans ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Response Ġ= Ġok HttpClient . new Call ( key Request ). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey ResponseData Ġ= Ġkey Response . body . string () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhead Element Ġ= ĠJ soup . parse ( key ResponseData ). head (). html () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠstartIndex Ġ= Ġhead Element . indexOf (" key \":\" ") Ġ+ Ġ 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Index Ġ= Ġhead Element . indexOf (" \"", ĠstartIndex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġhead Element . substring ( startIndex Ġuntil Ġend Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġform Build Id Ġ= ĠJ soup . parse ( key ResponseData ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. body () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" form [ id = user - login ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . select (" input [ name = form _ build _ id ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . attr (" value ") Ġ?: Ġerror (" empty Ġbuild Ġid ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" login : Ġant ib ot _ key Ġ= Ġ$ key Ġbuild Id : Ġ$ form Build Id ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åıĳéĢģ çĻ»å½ķ POST è¯·æ±Ĥ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġform Body Ġ= ĠForm Body . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" name ", Ġusername ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" pass ", Ġpassword ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" form _ id ", Ġ" user _ login ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" ant ib ot _ key ", Ġkey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" form _ build _ id ", Ġform Build Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" op ", Ġ" ãĥŃãĤ° ãĤ¤ãĥ³ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlogin Request Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// ec chi . iw ara . tv / user / login ? destination = front & language = zh - h ans ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ( form Body ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlogin Response Ġ= Ġok HttpClient . new Call ( login Request ). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" login : Ġ${ login Response . code }/${ login Response . message }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( login Response . code Ġ== Ġ 4 0 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ with Context ĠResponse . failed (" 4 0 3 : Ġ å¤ļ æ¬¡ è¾ĵåħ¥ éĶĻè¯¯ çļĦ å¯Ĩçłģ è¢« æļĤ æĹ¶ æĭ Ĵ ç»Ŀ çĻ»å½ķ ? Ġ è¯· å°Ŀè¯ķ åīį å¾Ģ ç½ĳ é¡µ ç«¯ çĻ»å½ķ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( login Response . is Successful ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcookies Ġ= Ġok HttpClient . get Cookie (). filter Ġ{ Ġit . domain Ġ== Ġ" iw ara . tv " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcookies . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" login : Ġcurrent Ġcookie Ġ-> Ġ${ it . name }: Ġ${ it . value }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cookies . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcookie Ġ= Ġcookies . first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" login : ĠSuccessful Ġlogin Ġ( key :${ cookie . name }, Ġvalue :${ cookie . value })" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . success ( Session ( cookie . name , Ġcookie . value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= ĠJ soup . parse ( login Response . body . string ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" div [ class = messages Ġerror ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . text () Ġ?: Ġ" æľª çŁ¥ çĻ»å½ķ éĶĻè¯¯ , Ġ å»ºè®® åīį å¾Ģ ç½ĳ é¡µ çīĪ æµĭè¯ķ çĻ»å½ķ " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . failed ( title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Error (" failed Ġto Ġlogin ", Ġexception ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . failed ( if Ġ( exception Ġis ĠIOException ) Ġ" ç½ĳç»ľ è¿ŀæİ¥ éĶĻè¯¯ (${ exception . java Class . simple Name })" Ġelse Ġexception . java Class . simple Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Self ( session : ĠSession ): ĠResponse < Self > Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" get Self : ĠStart ...") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġok HttpClient . get Cookie (). init ( session ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// ec chi . iw ara . tv / user ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġok HttpClient . new Call ( request ). await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( response . is Successful ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= ĠJ soup . parse ( response . body ?. string () Ġ?: Ġerror (" null Ġbody ")). body () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnickname Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody . getElementsBy Class (" views - field Ġviews - field - name "). first ()?. text () Ġ?: Ġerror ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" null Ġnickname " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnum Id Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" div [ class = menu - bar ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" ul [ class = dropdown - menu ] ")[ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" li ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" a ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. attr (" href ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . split ("/ ")[ 2 ]. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprofile Pic Ġ= Ġ" https :" Ġ+ Ġbody . getElementsBy Class (" views - field Ġviews - field - picture ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . child ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . child ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . attr (" src ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġabout Ġ= Ġbody . select (" div [ class = views - field Ġviews - field - field - about ]") ?. text () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= Ġbody . select (" div [ id = block - main blocks - user - connect ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" ul [ class = list - unstyled ]"). select (" a "). first () !!. attr (" href "). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . substring ( it . indexOf (" new ? user =") Ġ+ Ġ" new ? user =". length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfriend Request Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody . select (" div [ id = user - links ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . select (" a ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . get ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . take If Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . attr (" href "). startsWith ("/ user / friends ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . trim () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . take If Ġ{ Ġit . isNotBlank () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . toInt () Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessages Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody . select (" div [ id = user - links ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . select (" a ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . get ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . trim () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . take If Ġ{ Ġit . isNotBlank () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . toInt () Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" get Self : Ġ( id =$ userId , Ġnickname =$ nickname , Ġprofile Pic =$ profile Pic , Ġfriend =$ friend Request )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSelf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠuserId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnum Id Ġ= Ġnum Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnickname Ġ= Ġnickname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Pic Ġ= Ġprofile Pic , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabout Ġ= Ġabout , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfriend Request Ġ= Ġfriend Request , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessages Ġ= Ġmessages ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . failed ( exception . java Class . name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Subscription List ( session : ĠSession , Ġpage : ĠInt ): ĠResponse < Subscription List > Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġok HttpClient . get Cookie (). init ( session ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// ec chi . iw ara . tv / subscriptions ? page =$ page ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġok HttpClient . new Call ( request ). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( response . is Successful ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= ĠJ soup . parse ( response . body ?. string () Ġ?: Ġerror (" empty Ġbody ")). body () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelements Ġ= Ġbody . select (" div [ id ~ = ^ node -[ A - Za - z 0 - 9 ]+ \$ ]") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpreview List : ĠList < Media Preview > Ġ= Ġelements . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġit . getElementsBy Class (" title "). text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthor Ġ= Ġit . getElementsBy Class (" username "). text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpic Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :" Ġ+ Ġit . select (" div [ class = field - item Ġeven ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" img ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. attr (" src ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlikes Ġ= Ġit . getElementsBy Class (" right - icon "). text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwatch s Ġ= Ġit . getElementsBy Class (" left - icon "). text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlink Ġ= Ġit . select (" div [ class = field - item Ġeven ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" a ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . attr (" href ") Ġ?: Ġit . select (" a "). attr (" href ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmedia Id Ġ= Ġlink . substring ( link . lastIndexOf ("/") Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġif Ġ( link . startsWith ("/ video ")) ĠMediaType . VIDEO Ġelse ĠMediaType . IMAGE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprivate Ġ= Ġit . select (" div [ class = private - video ]"). any () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Preview ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Ġ= Ġauthor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Pic Ġ= Ġpic , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlikes Ġ= Ġlikes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwatch s Ġ= Ġwatch s , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Id Ġ= Ġmedia Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġtype , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġ= Ġprivate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Next Page Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody . select (" ul [ class = pager ]"). select (" li [ class ~ = ^ pager - next Ġ. +\ $ ]"). any () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSubscription List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Next Page , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġex . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . failed ( ex . java Class . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun ĠgetImage Page Detail ( session : ĠSession , Ġimage Id : ĠString ): ĠResponse < Image Detail > Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" getImage Page Detail : Ġstart Ġload Ġimage Ġdetail : Ġ$ image Id ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġok HttpClient . get Cookie (). init ( session ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// ec chi . iw ara . tv / images /$ image Id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġok HttpClient . new Call ( request ). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( response . is Successful ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Str Ġ= Ġresponse . body . string () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= ĠJ soup . parse ( response Str ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġbody . getElementsBy Class (" title "). first ()?. text () Ġ?: Ġerror (" empty Ġtitle ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Links Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody . getElementsBy Class (" field Ġfield - name - field - images Ġfield - type - file Ġfield - label - hidden ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" a "). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :${ it . attr (" href ") }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescription Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody . select (" div [ class = field Ġfield - name - body Ġfield - type - text - with - summary Ġfield - label - hidden ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first ()?. get Plain Text () Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( author Id , Ġauthor Name ) Ġ= Ġbody . select (" a [ class = username ]"). first ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . attr (" href "). let Ġ{ Ġhref Ġ-> Ġhref . substring ( href . lastIndexOf ("/") Ġ+ Ġ 1 ) Ġ} Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġerror (" empty Ġauthor ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthor Pic Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :" Ġ+ Ġbody . getElementsBy Class (" user - picture "). first () !!. select (" img ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. attr (" src ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwatch s Ġ= Ġbody . getElementsBy Class (" node - views "). first () !!. text (). trim () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnid Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Str . substring After ("\" nid \": "). substring Before (" } "). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" getImage Detail : ĠFailed Ġto Ġparse Ġvideo Ġnid ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" getImage Detail : ĠN ID Ġ= Ġ$ nid ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è¯Ħè®º ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhead Element Ġ= Ġbody . head (). html () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠstartIndex Ġ= Ġhead Element . indexOf (" key \":\" ") Ġ+ Ġ 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Index Ġ= Ġhead Element . indexOf (" \"", ĠstartIndex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanti Bot Key Ġ= Ġhead Element . substring ( startIndex Ġuntil Ġend Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġform Ġ= Ġbody . select (" form [ class = comment - form Ġant ib ot ]"). first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġform Build Id Ġ= Ġform ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . select (" input [ name = form _ build _ id ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . attr (" value ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġerror (" form _ build _ id Ġnot Ġfound ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġform Token Ġ= Ġform ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" input [ name = form _ token ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. attr (" value ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġerror (" failed Ġto Ġget Ġform _ token ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġform Id Ġ= Ġform ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" input [ name = form _ id ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. attr (" value ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġerror (" failed Ġto Ġget Ġform _ id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġh one ypot Time Ġ= Ġform ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" input [ name = hone ypot _ time ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. attr (" value ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġerror (" failed Ġto Ġget Ġh one ypot _ time ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage Detail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġimage Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnid Ġ= Ġnid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Links Ġ= Ġimage Links , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Id Ġ= Ġauthor Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Name Ġ= Ġauthor Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Profile Pic Ġ= Ġauthor Pic , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwatch s Ġ= Ġwatch s , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġdescription , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Post Param Ġ= ĠComment Post Param ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanti Bot Key Ġ= Ġanti Bot Key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Build Id Ġ= Ġform Build Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Token Ġ= Ġform Token , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Id Ġ= Ġform Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh one ypot Time Ġ= Ġh one ypot Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . failed ( exception . java Class . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Video Page Detail ( session : ĠSession , Ġvideo Id : ĠString ): ĠResponse < Video Detail > Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" get Video Page Detail : ĠStart Ġload Ġvideo Ġdetail Ġ( id :$ video Id )") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġok HttpClient . get Cookie (). init ( session ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// ec chi . iw ara . tv / videos /$ video Id ? language = zh - h ans ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġok HttpClient . new Call ( request ). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( response . is Successful ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Str Ġ= Ġresponse . body ?. string () Ġ?: Ġerror (" empty Ġbody ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= ĠJ soup . parse ( response Str ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( body . select (" section [ id = content ]"). select (" div [ class = content ]"). text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains (" has Ġchosen Ġto Ġrestrict Ġthis Ġvideo Ġto Ġusers Ġon Ġtheir Ġfriends ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ with Context ĠResponse . success ( Video Detail . PRIVATE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( body . title (). trim () Ġ== Ġ" Iw ara ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ with Context ĠResponse . success ( Video Detail . DELETED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnid Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Str . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . substring ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . indexOf ("\" nid \": ") Ġ+ Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . indexOf (',', Ġit . indexOf ("\" nid \": ") Ġ+ Ġ 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" get Video Page Detail : ĠFailed Ġto Ġparse Ġvideo Ġnid ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" get Video Page Detail : ĠN ID Ġ= Ġ$ nid ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġbody . getElementsBy Class (" title "). first ()?. text () Ġ?: Ġerror (" empty Ġtitle ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Div Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody . getElementsBy Class (" node - views "). first ()?. text () !!. trim (). split (" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlikes Ġ= Ġview Div [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwatch s Ġ= Ġview Div [ 1 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è§£æŀĲ åĩº ä¸Ĭä¼ł æĹ¥æľŁ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpost Date Ġ= Ġbody ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" div [ class = submitted ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . text Nodes () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . first Ġ{ Ġit . text (). contains ("- ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . split (" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . filter Ġ{ Ġit . matches ( Regex (" .* [ 0 - 9 ]+ .* ")) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . join ToString ( separator Ġ= Ġ" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ" null " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è§Ĩé¢ĳ æııè¿° ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescription Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody . select (" div [ class = field Ġfield - name - body Ġfield - type - text - with - summary Ġfield - label - hidden ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first ()?. get Plain Text () Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthor Id Ġ= Ġbody . select (" a [ class = username ]"). first () !!. attr (" href ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġit . substring ( it . lastIndexOf ("/") Ġ+ Ġ 1 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthor Name Ġ= Ġbody . getElementsBy Class (" username "). first () !!. text (). trim () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthor Pic Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :" Ġ+ Ġbody . getElementsBy Class (" user - picture "). first () !!. select (" img ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. attr (" src ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠæĽ´ å¤ļ è§Ĩé¢ĳ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmore Video Ġ= Ġbody ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" div [ id = block - views - videos - block - 1 ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" div [ class = view - content ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" div [ id ~ = ^ node -[ A - Za - z 0 - 9 ]+ \$ ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . select (" a "). first () Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" a ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . attr (" href ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġstr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstr . substring ( str . lastIndexOf ("/") Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġit . select (" img "). first ()?. attr (" title ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpic Ġ= Ġ" https :" Ġ+ Ġit . select (" img "). first ()?. attr (" src ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlikes Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . select (" div [ class = right - icon Ġlikes - icon ]"). first ()?. text () Ġ?: Ġ" ?" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwatch s Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . select (" div [ class = left - icon Ġlikes - icon ]"). first ()?. text () Ġ?: Ġ" ?" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMore Video ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġid Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtitle Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpic Ġ= Ġpic , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlikes Ġ= Ġlikes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwatch s Ġ= Ġwatch s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çĽ¸ ä¼¼ è§Ĩé¢ĳ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecommend Video Ġ= Ġbody ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" div [ id = block - views - search - block - 1 ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" div [ class = view - content ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" div [ id ~ = ^ node -[ A - Za - z 0 - 9 ]+ \$ ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . select (" a "). first () Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġit . select (" a "). first () !!. attr (" href "). let Ġ{ Ġstr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstr . substring ( str . lastIndexOf ("/") Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġit . select (" img "). first () !!. attr (" title ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpic Ġ= Ġ" https :" Ġ+ Ġit . select (" img "). first () !!. attr (" src ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlikes Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . select (" div [ class = right - icon Ġlikes - icon ]"). first ()?. text () Ġ?: Ġ" 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwatch s Ġ= Ġit . select (" div [ class = left - icon Ġlikes - icon ]"). first () !!. text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMore Video ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpic Ġ= Ġpic , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlikes Ġ= Ġlikes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwatch s Ġ= Ġwatch s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpreview Ġ= Ġ" https :" Ġ+ Ġbody . select (" video [ id = video - player ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . attr (" poster ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĸľ æ¬¢ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlike Flag Ġ= Ġbody . select (" a [ href ~ = ^ / flag /. +/ like /. +\ $ ]"). first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Like Ġ= Ġlike Flag ?. attr (" href ") ?. startsWith ("/ flag / un flag /") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlike Link Ġ= ĠURL Decoder . decode ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlike Flag ?. attr (" href "). let Ġ{ Ġit ?. substring ( it . indexOf ("/ like /") Ġ+ Ġ 6 ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" UTF - 8 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Link Ġ= Ġ$ like Link ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åħ³æ³¨ UP ä¸» ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfollow Flag Ġ= Ġbody . select (" a [ href ~ = ^ / flag /. +/ follow /. +\ $\ $ ]"). first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Follow Ġ= Ġfollow Flag ?. attr (" href ") ?. startsWith ("/ flag / un flag /") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfollow Link Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfollow Flag ?. attr (" href "). let Ġ{ Ġit ?. substring ( it . indexOf ("/ follow /") Ġ+ Ġ 8 ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è¯Ħè®º æķ°éĩı ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomments Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( body . select (" div [ id = comments ]"). select (" h 2 [ class = title ]"). first ()?. text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġprintln ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ" Ġ 0 Ġ è¯Ħè®º Ġ"). trim (). replace ("[ ^ 0 - 9 ] ". to Regex (), Ġ""). toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è¯Ħè®º ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhead Element Ġ= Ġbody . head (). html () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠstartIndex Ġ= Ġhead Element . indexOf (" key \":\" ") Ġ+ Ġ 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Index Ġ= Ġhead Element . indexOf (" \"", ĠstartIndex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanti Bot Key Ġ= Ġhead Element . substring ( startIndex Ġuntil Ġend Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġform Ġ= Ġbody . select (" form [ class = comment - form Ġant ib ot ]"). first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġform Build Id Ġ= Ġform ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . select (" input [ name = form _ build _ id ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . attr (" value ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġerror (" form _ build _ id Ġnot Ġfound ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġform Token Ġ= Ġform ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" input [ name = form _ token ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. attr (" value ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġerror (" failed Ġto Ġget Ġform _ token ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġform Id Ġ= Ġform ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" input [ name = form _ id ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. attr (" value ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġerror (" failed Ġto Ġget Ġform _ id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġh one ypot Time Ġ= Ġform ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" input [ name = hone ypot _ time ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. attr (" value ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġerror (" failed Ġto Ġget Ġh one ypot _ time ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" get Video Page Detail : ĠResult ( title =$ title , Ġauthor =$ author Name )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" get Video Page Detail : ĠLike : Ġ$ is Like ĠLike API : Ġ$ like Link ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" get Video Page Detail : ĠFollow : Ġ$ is Follow ĠFollow API : Ġ$ follow Link ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" get Video Page Detail : ĠPreview : Ġ$ preview ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVideo Detail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġvideo Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnid Ġ= Ġnid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlikes Ġ= Ġlikes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwatch s Ġ= Ġwatch s , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Date Ġ= Ġpost Date , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġdescription , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Pic Ġ= Ġauthor Pic , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Name Ġ= Ġauthor Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Id Ġ= Ġauthor Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomments Ġ= Ġcomments , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmore Video Ġ= Ġmore Video , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecommend Video Ġ= Ġrecommend Video , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Ġ= Ġpreview , ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Like Ġ= Ġis Like Ġ?: Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlike Link Ġ= Ġlike Link , ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfollow Ġ= Ġis Follow Ġ?: Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfollow Link Ġ= Ġfollow Link Ġ?: Ġ"", ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Post Param Ġ= ĠComment Post Param ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanti Bot Key Ġ= Ġanti Bot Key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Id Ġ= Ġform Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Token Ġ= Ġform Token , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh one ypot Time Ġ= Ġh one ypot Time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Build Id Ġ= Ġform Build Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" get Video Page Detail : ĠFailed Ġto Ġload Ġvideo Ġdetail ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . failed ( exception . java Class . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġlike ( ĊĠĠĠĠĠĠĠ Ġsession : ĠSession , ĊĠĠĠĠĠĠĠ Ġlike : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġlike Link : ĠString ĊĠĠĠ Ġ): ĠResponse < Like Response > Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġok HttpClient . get Cookie (). init ( session ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// ec chi . iw ara . tv / flag /${ if Ġ( like ) Ġ" flag " Ġelse Ġ" un flag " }/ like /$ like Link ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ( Form Body . Builder (). add (" js ", Ġ" true "). build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġok HttpClient . new Call ( request ). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( response . is Successful ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlike Response Ġ= Ġgson . fromJson ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body ?. string () Ġ?: Ġerror (" empty Ġresponse "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLike Response :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . success ( like Response ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . failed ( e . java Class . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġfollow ( ĊĠĠĠĠĠĠĠ Ġsession : ĠSession , ĊĠĠĠĠĠĠĠ Ġfollow : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġfollow Link : ĠString ĊĠĠĠ Ġ): ĠResponse < Follow Response > Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġok HttpClient . get Cookie (). init ( session ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// ec chi . iw ara . tv / flag /${ if Ġ( follow ) Ġ" flag " Ġelse Ġ" un flag " }/ follow /$ follow Link ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ( Form Body . Builder (). add (" js ", Ġ" true "). build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġok HttpClient . new Call ( request ). await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( response . is Successful ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfollow Response Ġ= Ġgson . fromJson ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body ?. string () Ġ?: Ġerror (" empty Ġresponse "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFollow Response :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . success ( follow Response ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . failed ( e . java Class . name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Comment List ( ĊĠĠĠĠĠĠĠ Ġsession : ĠSession , ĊĠĠĠĠĠĠĠ Ġmedia Type : ĠMediaType , ĊĠĠĠĠĠĠĠ Ġmedia Id : ĠString , ĊĠĠĠĠĠĠĠ Ġpage : ĠInt ĊĠĠĠ Ġ): ĠResponse < Comment List > Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġok HttpClient . get Cookie (). init ( session ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" get Comment List : ĠLoading Ġcomments Ġof : Ġ$ media Id Ġ(${ media Type . value }) ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// ec chi . iw ara . tv /${ media Type . value }/ $ media Id ? page =$ page ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġok HttpClient . new Call ( request ). await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= ĠJ soup . parse ( response . body . string ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomment Doc u Ġ= Ġbody . select (" div [ id = comments ]"). first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( body . title ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ######################################################################## ### ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĨħéĥ¨ åĩ½æķ° ï¼Į çĶ¨äºİ éĢĴ å½Ĵ è§£æŀĲ è¯Ħè®º ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġparse As Comments ( document : ĠElement ): ĠList < Comment > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomment List Ġ= ĠArrayList < Comment >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( doc u Ġin Ġdocument . children ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠæŃ¤ æĿ¡ ä¸º è¯Ħè®º ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( doc u .` is ` (" div [ class ~ = ^ comment Ġ. +\ $ ] ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthor Id Ġ= Ġdoc u . select (" a [ class = username ]"). first () !!. attr (" href ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġit . substring ( it . lastIndexOf ("/") Ġ+ Ġ 1 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnid Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdoc u . select (" li [ class ~ = ^ comment - reply [ A - Za - z 0 - 9 Ġ] +\ $ ]"). select (" a ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. attr (" href "). split ("/ "). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ it . size Ġ- Ġ 2 ]. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomment Id Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdoc u . select (" li [ class ~ = ^ comment - reply [ A - Za - z 0 - 9 Ġ] +\ $ ]"). select (" a ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. attr (" href "). split ("/ "). last (). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthor Name Ġ= Ġdoc u . select (" a [ class = username ]"). first ()?. text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġerror (" empty Ġauthor Ġname ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthor Pic Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :" Ġ+ Ġdoc u . select (" div [ class = user - picture ]"). first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . select (" img ") ?. first ()?. attr (" src ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposter Type Value Ġ= Ġdoc u . attr (" class ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġposter Type Ġ= ĠComment Post er Type . NORMAL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( poster Type Value . contains (" by - node - author ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposter Type Ġ= ĠComment Post er Type . OWNER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( poster Type Value . contains (" by - viewer ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposter Type Ġ= ĠComment Post er Type . SELF ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis From Iw ara 4 a Ġ= Ġdoc u ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" div [ class = content ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" abbr [ title = iw ara 4 a ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isNotEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġdoc u . select (" div [ class = content ]"). first ()?. get Plain Text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġerror (" empty Ġcontent ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Ġ= Ġdoc u . select (" div [ class = submitted ]"). first ()?. own Text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġerror (" empty Ġdate ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomment Ġ= ĠComment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Id Ġ= Ġauthor Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Name Ġ= Ġauthor Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Pic Ġ= Ġauthor Pic , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposter Type Ġ= Ġposter Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnid Ġ= Ġnid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Id Ġ= Ġcomment Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= Ġcontent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= Ġdate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreply Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Iw ara 4 a Ġ= Ġis From Iw ara 4 a ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæľī åĽŀå¤į ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( doc u . nextElement Sibling () Ġ!= Ġnull Ġ&& Ġdoc u . nextElement Sibling () !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. ` is ` (" div [ class = indent ed ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreply Ġ= Ġdoc u . nextElement Sibling () !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ éĢĴ å½Ĵ è§£æŀĲ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment . reply Ġ= Ġparse As Comments ( reply ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment List . add ( comment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcomment List ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ######################################################################## ### ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ( çĶ¨ J SO UP è§£æŀĲ ç½ĳ é¡µ çľŁ çĹ Ľ èĭ ¦ ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( comment Doc u !!. select (" h 2 [ class = title ]"). first ()?. text () Ġ?: Ġ" Ġ 0 Ġ è¯Ħè®º Ġ"). trim () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("[ ^ 0 - 9 ] ". to Regex (), Ġ""). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Next Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Doc u . select (" ul [ class = pager ]"). select (" li [ class = pager - next ]"). any () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomments Ġ= Ġparse As Comments ( comment Doc u ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhead Element Ġ= Ġbody . head (). html () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠstartIndex Ġ= Ġhead Element . indexOf (" key \":\" ") Ġ+ Ġ 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Index Ġ= Ġhead Element . indexOf (" \"", ĠstartIndex ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanti Bot Key Ġ= Ġhead Element . substring ( startIndex Ġuntil Ġend Index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġform Ġ= Ġbody . select (" form [ class = comment - form Ġant ib ot ]"). first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġform Id Ġ= Ġform !!. select (" input [ name = form _ id ]"). attr (" value ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" get Comment List : ĠComment ĠResult ( total : Ġ$ total , Ġhas Next : Ġ$ hasNext , Ġab k : Ġ$ anti Bot Key , Ġform Id : Ġ$ form Id )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComment List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Ġ= Ġtotal , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage Ġ= Ġpage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Next Ġ= Ġhas Next , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomments Ġ= Ġcomments ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġex . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . failed ( ex . java Class . name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Media List ( ĊĠĠĠĠĠĠĠ Ġsession : ĠSession , ĊĠĠĠĠĠĠĠ Ġmedia Type : ĠMediaType , ĊĠĠĠĠĠĠĠ Ġpage : ĠInt , ĊĠĠĠĠĠĠĠ Ġsort : ĠSort Type , ĊĠĠĠĠĠĠĠ Ġfilter : ĠSet < String > ĊĠĠĠ Ġ): ĠResponse < Media List > Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" get Media List : ĠStart Ġloading Ġmedia Ġlist Ġ( type :${ media Type . value }, Ġpage : Ġ$ page , Ġsort : Ġ$ sort )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia HttpClient . get Cookie (). init ( session ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġcollect Filters (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfilter . join ToString ( separator Ġ= Ġ"& ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" f [ ${ index ++ }] =$ it " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilters Ġ= Ġcollect Filters () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// ec chi . iw ara . tv /${ media Type . value }? page =$ page & sort =${ sort . value }" Ġ+ Ġif Ġ( filter . isNotEmpty ()) Ġ"& ${ filters }" Ġelse Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġmedia HttpClient . new Call ( request ). await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( response . is Successful ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= ĠJ soup . parse ( response . body ?. string () Ġ?: Ġerror (" empty Ġbody ")). body () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelements Ġ= Ġbody . select (" div [ id ~ = ^ node -[ A - Za - z 0 - 9 ]+ \$ ]") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpreview List : ĠList < Media Preview > Ġ= Ġelements . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġit . getElementsBy Class (" title "). text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthor Ġ= Ġit . getElementsBy Class (" username "). text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpic Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :" Ġ+ Ġ( it . getElementsBy Class (" field - item Ġeven "). select (" img ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first ()?. attr (" src ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ"// ec chi . iw ara . tv / sites / all / themes / main / img / logo . png ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlikes Ġ= Ġit . getElementsBy Class (" right - icon "). text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwatch s Ġ= Ġit . getElementsBy Class (" left - icon "). text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlink Ġ= Ġit . select (" a "). first () !!. attr (" href ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmedia Id Ġ= Ġlink . substring ( link . lastIndexOf ("/") Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( link . startsWith ("/ video ")) ĠMediaType . VIDEO Ġelse ĠMediaType . IMAGE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprivate Ġ= Ġit . select (" div [ class = private - video ]"). any () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Preview ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Ġ= Ġauthor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Pic Ġ= Ġpic , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlikes Ġ= Ġlikes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwatch s Ġ= Ġwatch s , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Id Ġ= Ġmedia Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġtype , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġ= Ġprivate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Next Page Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody . select (" ul [ class = pager ]"). first ()?. select (" li [ class = pager - next ]") ?. any () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentPage Ġ= Ġpage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Next Ġ= Ġhas Next Page , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia List Ġ= Ġpreview List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . failed ( e . java Class . name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun ĠgetUser ( session : ĠSession , ĠuserId : ĠString ): ĠResponse < UserData > Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" getUser : ĠStart Ġload Ġuser Ġdata : Ġ$ userId ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġok HttpClient . get Cookie (). init ( session ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// ec chi . iw ara . tv / users /$ userId ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġok HttpClient . new Call ( request ). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( response . is Successful ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= ĠJ soup . parse ( response . body ?. string () Ġ?: Ġerror (" null Ġbody ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnickname Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody . getElementsBy Class (" views - field Ġviews - field - name "). first () !!. text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprofile Pic Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :" Ġ+ Ġbody . getElementsBy Class (" views - field Ġviews - field - picture ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. child ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. child ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. attr (" src ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfollow Ġ= Ġbody . select (" div [ id = block - main blocks - user - connect ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" span [ class ~ = ^ flag - wrapper .* \$ ]"). select (" a "). attr (" href ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. startsWith ("/ flag / un flag /") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfollow Link Ġ= Ġbody . select (" div [ id = block - main blocks - user - connect ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" span [ class ~ = ^ flag - wrapper .* \$ ]"). select (" a "). attr (" href ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġit . substring ( it . indexOf ("/ follow /") Ġ+ Ġ 8 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjoin Date Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody . select (" div [ class = views - field Ġviews - field - created ]"). first () !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. child ( 1 ). text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Seen Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody . select (" div [ class = views - field Ġviews - field - login ]"). first () !!. child ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġabout Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody . select (" div [ class = views - field Ġviews - field - field - about ]"). first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . text () Ġ?: Ġ"" ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠuserId On Media Ġ= Ġbody . select (" div [ id = block - main blocks - user - connect ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" ul [ class = list - unstyled ]"). select (" a "). first () !!. attr (" href "). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . substring ( it . indexOf ("/ new ? user =") Ġ+ Ġ 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfriend State Ġ= Ġbody ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" div [ id = block - main blocks - user - connect ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" ul ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" li ")[ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . contains (" pending ") Ġ-> ĠUser Friend State . PENDING ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . equals (" Friend ", Ġtrue ) Ġ-> ĠUser Friend State . NOT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠUser Friend State . AL READY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: ĠUser Friend State . NOT ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġbody ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" div [ id = block - main blocks - user - connect ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" span [ class ~ = ^ flag - wrapper .* \$ ]"). select (" a "). attr (" href ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġit . substring ( it . indexOf ("/ follow /") Ġ+ Ġ 8 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . substring ( 0 Ġuntil Ġit . indexOf (" ? ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" getUser : ĠLoaded ĠUser Data ( user : Ġ$ nickname , Ġid Ġ= Ġ$ id ) Ġ- Ġ$ userId On Media ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è¯Ħè®º ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhead Element Ġ= Ġbody . head (). html () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠstartIndex Ġ= Ġhead Element . indexOf (" key \":\" ") Ġ+ Ġ 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Index Ġ= Ġhead Element . indexOf (" \"", ĠstartIndex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanti Bot Key Ġ= Ġhead Element . substring ( startIndex Ġuntil Ġend Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġform Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody . select (" form [ class = comment - form Ġant ib ot ]"). first () Ġ?: Ġerror (" empty Ġform ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġform Build Id Ġ= Ġform . select (" input [ name = form _ build _ id ]"). attr (" value ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġform Token Ġ= Ġform . select (" input [ name = form _ token ]"). attr (" value ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġform Id Ġ= Ġform . select (" input [ name = form _ id ]"). attr (" value ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġh one ypot Time Ġ= Ġform . select (" input [ name = hone ypot _ time ]"). attr (" value ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomment Id Ġ= Ġhead Element . substring After ("\" action \":\" \\/ comment \\/ reply \\ /") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. substring Before ("\ "" ). toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" getUser : ĠLoaded ĠComment Form ( id : Ġ$ comment Id Ġ| Ġform : Ġ$ anti Bot Key , Ġ$ form Build Id , Ġ$ form Token , Ġ$ form Id , Ġ$ hone ypot Time )" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= ĠuserId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusername Ġ= Ġnickname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Media Ġ= ĠuserId On Media , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfollow Ġ= Ġfollow , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfollow Link Ġ= Ġfollow Link , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfriend Ġ= Ġfriend State , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpic Ġ= Ġprofile Pic , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjoin Date Ġ= Ġjoin Date , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Seen Ġ= Ġlast Seen , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabout Ġ= Ġabout , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Id Ġ= Ġcomment Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Post Param Ġ= ĠComment Post Param ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanti Bot Key Ġ= Ġanti Bot Key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Build Id Ġ= Ġform Build Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Token Ġ= Ġform Token , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Id Ġ= Ġform Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh one ypot Time Ġ= Ġh one ypot Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . failed ( e . java Class . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun ĠgetUser Media List ( ĊĠĠĠĠĠĠĠ Ġsession : ĠSession , ĊĠĠĠĠĠĠĠ ĠuserId On Video : ĠString , ĊĠĠĠĠĠĠĠ Ġmedia Type : ĠMediaType , ĊĠĠĠĠĠĠĠ Ġpage : ĠInt ĊĠĠĠ Ġ): ĠResponse < Media List > Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" getUser Video List : Ġ$ userId On Video Ġ// Ġ$ page ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġok HttpClient . get Cookie (). init ( session ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// ec chi . iw ara . tv / users /$ userId On Video /${ media Type . value }? page =$ page ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġmedia HttpClient . new Call ( request ). await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( response . is Successful ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= ĠJ soup . parse ( response . body ?. string () Ġ?: Ġerror (" empty Ġbody ")). body () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelements Ġ= Ġbody . select (" div [ id ~ = ^ node -[ A - Za - z 0 - 9 ]+ \$ ]") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpreview List : ĠList < Media Preview > Ġ= Ġelements . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġit . getElementsBy Class (" title "). text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthor Ġ= Ġit . getElementsBy Class (" username "). text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpic Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :" Ġ+ Ġ( it . getElementsBy Class (" field - item Ġeven "). select (" img ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first ()?. attr (" src ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ"// ec chi . iw ara . tv / sites / all / themes / main / img / logo . png ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlikes Ġ= Ġit . getElementsBy Class (" right - icon "). text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwatch s Ġ= Ġit . getElementsBy Class (" left - icon "). text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlink Ġ= Ġit . select (" a "). first () !!. attr (" href ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmedia Id Ġ= Ġlink . substring ( link . lastIndexOf ("/") Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( link . startsWith ("/ video ")) ĠMediaType . VIDEO Ġelse ĠMediaType . IMAGE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Preview ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Ġ= Ġauthor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Pic Ġ= Ġpic , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlikes Ġ= Ġlikes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwatch s Ġ= Ġwatch s , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Id Ġ= Ġmedia Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġtype ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Next Page Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody . select (" ul [ class = pager ]"). first ()?. select (" li [ class = pager - next ]") ?. any () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentPage Ġ= Ġpage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Next Ġ= Ġhas Next Page , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia List Ġ= Ġpreview List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . failed ( e . java Class . simple Name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun ĠgetUser Page Comment ( ĊĠĠĠĠĠĠĠ Ġsession : ĠSession , ĊĠĠĠĠĠĠĠ ĠuserId : ĠString , ĊĠĠĠĠĠĠĠ Ġ@ Int Range ( from Ġ= Ġ 0 ) Ġpage : ĠInt ĊĠĠĠ Ġ): ĠResponse < Comment List > Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġok HttpClient . get Cookie (). init ( session ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" getUser Page Comment : Ġuser Ġ= Ġ$ userId , Ġpage Ġ= Ġ$ page ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// ec chi . iw ara . tv / users /$ userId ? page =$ page ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġok HttpClient . new Call ( request ). await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= ĠJ soup . parse ( response . body ?. string () Ġ?: Ġerror (" empty Ġbody ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomment Doc u Ġ= Ġbody . select (" div [ id = comments ]"). first () Ġ?: Ġerror (" empty Ġcomment ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ######################################################################## ### ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĨħéĥ¨ åĩ½æķ° ï¼Į çĶ¨äºİ éĢĴ å½Ĵ è§£æŀĲ è¯Ħè®º ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġparse As Comments ( document : ĠElement ): ĠList < Comment > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomment List Ġ= ĠArrayList < Comment >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( doc u Ġin Ġdocument . children ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠæŃ¤ æĿ¡ ä¸º è¯Ħè®º ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( doc u .` is ` (" div [ class ~ = ^ comment Ġ. +\ $ ] ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthor Id Ġ= Ġdoc u . select (" a [ class ~ = ^ username .* \$ ]"). first () !!. attr (" href ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġit . substring ( it . lastIndexOf ("/") Ġ+ Ġ 1 ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnid Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdoc u . select (" li [ class ~ = ^ comment - reply [ A - Za - z 0 - 9 Ġ] +\ $ ]"). select (" a ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. attr (" href "). split ("/ "). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ it . size Ġ- Ġ 2 ]. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomment Id Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdoc u . select (" li [ class ~ = ^ comment - reply [ A - Za - z 0 - 9 Ġ] +\ $ ]"). select (" a ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. attr (" href "). split ("/ "). last (). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthor Name Ġ= Ġdoc u . select (" a [ class ~ = ^ username .* \$ ]"). first () !!. text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthor Pic Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :" Ġ+ Ġdoc u . select (" div [ class = user - picture ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . select (" img ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . attr (" src ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposter Type Value Ġ= Ġdoc u . attr (" class ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġposter Type Ġ= ĠComment Post er Type . NORMAL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( poster Type Value . contains (" by - node - author ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposter Type Ġ= ĠComment Post er Type . OWNER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( poster Type Value . contains (" by - viewer ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposter Type Ġ= ĠComment Post er Type . SELF ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġdoc u . select (" div [ class = content ]"). first () !!. text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis From Iw ara 4 a Ġ= Ġdoc u . select (" div [ class = content ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" abbr [ title = iw ara 4 a ]"). isNotEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Ġ= Ġdoc u . select (" div [ class = submitted ]"). first () !!. own Text () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomment Ġ= ĠComment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Id Ġ= Ġauthor Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Name Ġ= Ġauthor Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Pic Ġ= Ġauthor Pic , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposter Type Ġ= Ġposter Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnid Ġ= Ġnid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Id Ġ= Ġcomment Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= Ġcontent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= Ġdate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreply Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Iw ara 4 a Ġ= Ġis From Iw ara 4 a ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæľī åĽŀå¤į ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( doc u . nextElement Sibling () Ġ!= Ġnull Ġ&& Ġdoc u . nextElement Sibling () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ!! .` is ` (" div [ class = indent ed ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreply Ġ= Ġdoc u . nextElement Sibling () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ éĢĴ å½Ĵ è§£æŀĲ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment . reply Ġ= Ġparse As Comments ( reply !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment List . add ( comment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcomment List ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ######################################################################## ### ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ( çĶ¨ J SO UP è§£æŀĲ ç½ĳ é¡µ çľŁ çĹ Ľ èĭ ¦ ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( comment Doc u . select (" h 2 [ class = title ]"). first ()?. text () Ġ?: Ġ" Ġ 0 Ġ è¯Ħè®º Ġ"). trim () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. split (" Ġ" )[ 0 ]. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Next Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Doc u . select (" ul [ class = pager ]"). select (" li [ class = pager - next ]"). any () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomments Ġ= Ġparse As Comments ( comment Doc u ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhead Element Ġ= Ġbody . head (). html () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠstartIndex Ġ= Ġhead Element . indexOf (" key \":\" ") Ġ+ Ġ 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Index Ġ= Ġhead Element . indexOf (" \"", ĠstartIndex ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanti Bot Key Ġ= Ġhead Element . substring ( startIndex Ġuntil Ġend Index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġform Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody . select (" form [ class = comment - form Ġant ib ot ]"). first () Ġ?: Ġerror (" empty Ġform ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġform Build Id Ġ= Ġform . select (" input [ name = form _ build _ id ]"). attr (" value ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġform Token Ġ= Ġform . select (" input [ name = form _ token ]"). attr (" value ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġform Id Ġ= Ġform . select (" input [ name = form _ id ]"). attr (" value ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġh one ypot Time Ġ= Ġform . select (" input [ name = hone ypot _ time ]"). attr (" value ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" getUser Comment : ĠComment ĠResult ( total : Ġ$ total , Ġhas Next : Ġ$ hasNext )") ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComment List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Ġ= Ġtotal , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage Ġ= Ġpage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Next Ġ= Ġhas Next , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomments Ġ= Ġcomments , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . failed ( e . java Class . simple Name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġsearch ( ĊĠĠĠĠĠĠĠ Ġsession : ĠSession , ĊĠĠĠĠĠĠĠ Ġquery : ĠString , ĊĠĠĠĠĠĠĠ Ġpage : ĠInt , ĊĠĠĠĠĠĠĠ Ġsort : ĠSort Type , ĊĠĠĠĠĠĠĠ Ġfilter : ĠSet < String > ĊĠĠĠ Ġ): ĠResponse < Media List > Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" search : ĠStart Ġsearching Ġ( query =$ query , Ġpage =$ page , Ġsort =${ sort . name })" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġok HttpClient . get Cookie (). init ( session ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġcollect Filters (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfilter . join ToString ( separator Ġ= Ġ"& ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" f [ ${ index ++ }] =$ it " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilters Ġ= Ġcollect Filters () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// ec chi . iw ara . tv / search ? query =$ query & sort =${ sort . value }& page =$ page " Ġ+ Ġif Ġ( filter . isNotEmpty ()) Ġ"& ${ filters }" Ġelse Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġok HttpClient . new Call ( request ). await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= ĠJ soup . parse ( response . body ?. string () Ġ?: Ġerror (" empty Ġbody ")). body () ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmedia List : ĠList < Media Preview > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody . select (" div [ class ~ = ^ views - column Ġ. +\ $ ]"). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġif Ġ( it . select (" h 3 [ class = title ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. any () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĠMediaType . VIDEO Ġelse ĠMediaType . IMAGE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġit . select (" h 3 [ class = title ]"). first ()?. text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġit . select (" h 1 [ class = title ]"). first () !!. text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthor Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠMediaType . VIDEO ) Ġit . select (" div [ class = submitted ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" a "). first () !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. text () Ġelse Ġit . select (" div [ class = submitted ]"). select (" a ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. last () !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpic Ġ= Ġ" https :" Ġ+ Ġit . select (" div [ class = field - item Ġeven ]"). first () !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" img "). attr (" src ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvideo Info Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠMediaType . VIDEO ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . select (" div [ class = video - info ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () !!. text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" div [ class = node - views ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwatch s Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠMediaType . VIDEO ) Ġvideo Info . split (" Ġ" )[ 0 ] Ġelse Ġvideo Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlikes Ġ= Ġif Ġ( type Ġ== ĠMediaType . VIDEO ) Ġvideo Info . split (" Ġ" )[ 1 ] Ġelse Ġ"" ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlink Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠMediaType . VIDEO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . select (" h 3 [ class = title ]"). first () !!. select (" a "). attr (" href ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . select (" div [ class = share - icons ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" a [ class = symbol ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. attr (" href ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . substring ( it . lastIndexOf ("% 2 F ") Ġ+ Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġlink . substring ( link . lastIndexOf ("/") Ġ+ Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Preview ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Ġ= Ġauthor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Pic Ġ= Ġpic , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlikes Ġ= Ġlikes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwatch s Ġ= Ġwatch s , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġtype , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Id Ġ= Ġid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Next Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody . select (" ul [ class = pager ]"). select (" li [ class = pager - next ]"). any () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentPage Ġ= Ġpage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Next Ġ= Ġhas Next , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia List Ġ= Ġmedia List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . failed ( e . java Class . name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Like Page ( session : ĠSession , Ġpage : ĠInt ): ĠResponse < Media List > Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" get Like Page : Ġ$ page ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġok HttpClient . get Cookie (). init ( session ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// ec chi . iw ara . tv / user / lik ed ? page =$ page ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġok HttpClient . new Call ( request ). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( response . is Successful ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= ĠJ soup . parse ( response . body !!. string ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelements Ġ= Ġbody . select (" div [ id ~ = ^ node -[ A - Za - z 0 - 9 ]+ \$ ]") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpreview List : ĠList < Media Preview > Ġ= Ġelements . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġit . getElementsBy Class (" title "). text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthor Ġ= Ġit . getElementsBy Class (" username "). text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpic Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :" Ġ+ Ġ( it . getElementsBy Class (" field - item Ġeven "). select (" img ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first ()?. attr (" src ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ"// ec chi . iw ara . tv / sites / all / themes / main / img / logo . png ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlikes Ġ= Ġit . getElementsBy Class (" right - icon "). text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwatch s Ġ= Ġit . getElementsBy Class (" left - icon "). text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlink Ġ= Ġit . select (" a "). first () !!. attr (" href ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmedia Id Ġ= Ġlink . substring ( link . lastIndexOf ("/") Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( link . startsWith ("/ video ")) ĠMediaType . VIDEO Ġelse ĠMediaType . IMAGE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Preview ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Ġ= Ġauthor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Pic Ġ= Ġpic , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlikes Ġ= Ġlikes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwatch s Ġ= Ġwatch s , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Id Ġ= Ġmedia Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġtype ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Next Page Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody . select (" ul [ class = pager ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . select (" li [ class = pager - next ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . any () Ġ?: Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentPage Ġ= Ġpage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Next Ġ= Ġhas Next Page , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia List Ġ= Ġpreview List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Error (" Failed Ġto Ġget Ġlike Ġlist ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . failed ( e . java Class . simple Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġpost Comment ( ĊĠĠĠĠĠĠĠ Ġsession : ĠSession , ĊĠĠĠĠĠĠĠ Ġnid : ĠInt , ĊĠĠĠĠĠĠĠ Ġcomment Id : ĠInt ?, ĊĠĠĠĠĠĠĠ Ġcontent : ĠString , ĊĠĠĠĠĠĠĠ Ġcomment Post Param : ĠComment Post Param ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġok HttpClient . get Cookie (). init ( session ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" post Comment : Ġ$ nid Ġ| Ġ$ comment Id Ġ| Ġ$ content ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// ec chi . iw ara . tv / comment / reply /$ nid " Ġ+ Ġif Ġ( comment Id Ġ!= Ġnull ) Ġ"/ $ comment Id " Ġelse Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠForm Body . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" op ", Ġ" æ·»åĬł è¯Ħè®º ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" comment _ body [ und ][ 0 ][ value ]", Ġ"$ content [ abbr = iw ara 4 a ][ / abbr ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" form _ build _ id ", Ġcomment Post Param . form Build Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" form _ token ", Ġcomment Post Param . form Token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" ant ib ot _ key ", Ġcomment Post Param . anti Bot Key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" form _ id ", Ġcomment Post Param . form Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" hone ypot _ time ", Ġcomment Post Param . hone ypot Time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġok HttpClient . new Call ( request ). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" post Comment : Ġ å·² æıĲäº¤ è¯Ħè®º è¯·æ±Ĥ ï¼ģ (${ response . code }} )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Playlist Overview ( session : ĠSession ): ĠResponse < List < Playlist Overview >> Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġok HttpClient . get Cookie (). init ( session ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// ec chi . iw ara . tv / my - content ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġok HttpClient . new Call ( request ). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( response . is Successful ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= ĠJ soup . parse ( response . body !!. string ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplaylist Overview List Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody . select (" div [ class = view - content ]"). select (" table "). select (" tbody ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" tr ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġit . select (" td [ class = views - field Ġviews - field - title ]"). text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . select (" td [ class = views - field Ġviews - field - title ]"). select (" a ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. attr (" href "). let Ġ{ Ġurl Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl . substring ( url . lastIndexOf ("/") Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" get Playlist Overview : Ġname Ġ= Ġ$ name , Ġid Ġ= Ġ$ id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlaylist Overview ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . success ( playlist Overview List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . failed ( e . java Class . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Playlist Detail ( session : ĠSession , Ġplaylist Id : ĠString ): ĠResponse < Playlist Detail > Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġok HttpClient . get Cookie (). init ( session ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// ec chi . iw ara . tv / playlist /$ playlist Id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġok HttpClient . new Call ( request ). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( response . is Successful ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= ĠJ soup . parse ( response . body !!. string ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġbody . select (" section [ id = content ]"). first () Ġ?: Ġerror (" null Ġcontent ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġcontent . select (" h 1 [ class = title ]"). first () !!. text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnid Ġ= Ġcontent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" div [ class = content ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" div [ id ~ = ^ node -. +\ $ ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. attr (" id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . substring ( it . lastIndexOf ("- ") Ġ+ Ġ 1 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġcontent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" div [ class = field - items ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . select (" div [ id ~ = ^ node -. +\ $ ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . map Ġ{ Ġelement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( title , Ġmedia Id ) Ġ= Ġelement . select (" h 3 [ class = title ]"). select (" a "). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġit . text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmedia Id Ġ= Ġit . attr (" href "). let Ġ{ Ġhref Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhref . substring ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhref . indexOf ("/ videos /") Ġ+ Ġ"/ videos / ". length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhref . indexOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartIndex Ġ= Ġhref . indexOf ("/ videos /") Ġ+ Ġ"/ videos / ". length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchar Ġ= Ġ' ?' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġto Ġmedia Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthor Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . select (" div [ class = submitted ]"). first () !!. select (" a "). text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimg Ġ= Ġ" https :" Ġ+ Ġelement . select (" img "). first () !!. attr (" src ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( watch s , Ġlikes ) Ġ= Ġelement . select (" div [ class = video - info ]"). first ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnumbers Ġ= Ġit . select (" i ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . text (). replace ("[ ^ 0 - 9 ] ". to Regex (), Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnumbers [ 0 ] Ġto Ġnumbers [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġerror (" null Ġvideo Ġinfo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Preview ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Id Ġ= Ġmedia Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Ġ= Ġauthor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Pic Ġ= Ġimg , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠMediaType . VIDEO , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlikes Ġ= Ġlikes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwatch s Ġ= Ġwatch s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġempty List () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlaylist Detail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnid Ġ= Ġnid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv ide olist Ġ= Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . failed ( e . java Class . simple Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġdelete Playlist ( session : ĠSession , Ġid : ĠInt ): ĠResponse < Boolean > Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġok HttpClient . get Cookie (). init ( session ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// ec chi . iw ara . tv / node /$ id / delete ? destination = my - content ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġok HttpClient . new Call ( request ). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( response . is Successful ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= ĠJ soup . parse ( response . body !!. string ()). body () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( form Build Id , Ġform Build Token ) Ġ= Ġbody . select (" form [ id = node - delete - confirm ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . select (" input [ name = form _ build _ id ]"). attr (" value ") Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . select (" input [ name = form _ token ]"). attr (" value ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġerror (" null Ġform ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelete Request Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// ec chi . iw ara . tv / node /$ id / delete ? destination = my - content ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠForm Body . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" confirm ", Ġ" 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" form _ id ", Ġ" node _ delete _ confirm ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" form _ build _ id ", Ġform Build Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" form _ token ", Ġform Build Token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add (" op ", Ġ" åĪłéĻ¤ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelete Response Ġ= Ġok HttpClient . new Call ( delete Request ). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( delete Response . is Successful ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . success ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . failed ( e . java Class . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġchange Playlist Name ( session : ĠSession , Ġid : ĠInt , Ġtitle : ĠString ): ĠResponse < Boolean > Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġok HttpClient . get Cookie (). init ( session ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠREQUEST ĠTO ĠGET ĠFORM ĠDATA ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// ec chi . iw ara . tv / node /$ id / edit ? destination = my - content ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġok HttpClient . new Call ( request ). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( response . is Successful ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= ĠJ soup . parse ( response . body !!. string ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġform Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody . select (" form [ class = node - form Ġnode - playlist - form ]"). first () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPOST ĠTO ĠDELETE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpost Body Ġ= ĠForm Body . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform ?. select (" input ") ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġit . attr (" name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġif Ġ( name Ġ== Ġ" title ") Ġtitle Ġelse Ġit . attr (" value ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name Ġ!= Ġ" op " Ġ&& Ġname . isNotBlank () Ġ&& Ġvalue . isNotBlank () Ġ&& Ġ! name . contains (" more ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Body . add ( name , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Body . add (" op ", Ġ" ä¿ĿåŃĺ ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Body . build (). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( it . size ) Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" change Playlist Name : Ġbody Ġ-> Ġ${ it . name ( index )} : Ġ${ it . value ( index )}" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsave Request Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// ec chi . iw ara . tv / node /$ id / edit ? destination = my - content ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ( post Body . build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsave Response Ġ= Ġok HttpClient . new Call ( save Request ). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( save Response . is Successful ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . success ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . failed ( e . java Class . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Friend List ( session : ĠSession ): ĠResponse < Friend List > Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġok HttpClient . get Cookie (). init ( session ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url (" https :// ec chi . iw ara . tv / user / friends ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġok HttpClient . new Call ( request ). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( response . is Successful ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġj soup Ġ= ĠJ soup . parse ( response . body !!. string ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfriends Ġ= Ġj soup ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" div [ class = content ]") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" table ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" tbody ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" tr ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . select (" td "). isNotEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolumns Ġ= Ġit . select (" td ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġusername Ġ= Ġcolumns [ 0 ]. text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= Ġcolumns [ 0 ]. select (" a "). attr (" href "). let Ġ{ Ġhref Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhref . substring ( href . lastIndexOf ("/") Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Ġ= Ġcolumns [ 1 ]. text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġwhen Ġ( columns [ 2 ]. text (). trim ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Accepted " Ġ-> ĠFriend Status . ACCEPT ED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Pending " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( columns [ 3 ]. select (" button "). size Ġ> Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFriend Status . PENDING Ġelse ĠFriend Status . PENDING _ REQUEST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠFriend Status . UNKNOWN . also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" get Friend List : Ġunknown Ġfriend Ġstate Ġ= Ġ${ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumns [ 2 ]. text (). trim () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfr Id Ġ= Ġcolumns [ 3 ]. select (" button ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. attr (" data - f rid ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFriend ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusername , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfr Id Ġ= Ġfr Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . success ( friends ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . failed ( e . java Class . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ