package Ġcom . hn jet . http Ċ Ċ import Ġcom . hn jet . model . Story Ċ import Ġorg . js oup . J soup Ċ import Ġorg . js oup . nodes . Element Ċ Ċ object ĠH N Parser Ġ{ ĊĠĠĠ Ġfun Ġparse St ories ( raw Html : ĠString ): ĠList < Story > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparsed Ġ= ĠJ soup . parse ( raw Html ) ĊĠĠĠĠĠĠĠ Ġ// ĠTODO Ġcheck Ġif Ġfail ĊĠĠĠĠĠĠĠ Ġval Ġstore ys Ġ= Ġparsed . getElementsBy Class (" ath ing ") ĊĠĠĠĠĠĠĠ Ġval Ġpoints Ġ= Ġparsed . getElementsBy Class (" score ") ĊĠĠĠĠĠĠĠ Ġ// ĠTODO Ġcheck Ġif Ġsize Ġoff ĊĠĠĠĠĠĠĠ Ġreturn Ġstore ys . map Ġ{ Ġstory Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġstory . getElementsBy Class (" title Link "). text () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvote Link Ġ= Ġfind Vote Link ( story ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoint Ġ= Ġpoints . find Ġ{ Ġget Story Id From Element ( it ) Ġ== Ġstory . id () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrank Ġ= Ġstory . getElementsBy Class (" rank "). text (). substring Before ('. '). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStory ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvote Link Ġ= Ġvote Link , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrank Ġ= Ġrank ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Story Id From Element ( element : ĠElement ): ĠString ? Ġ= ĊĠĠĠĠĠĠĠ Ġelement . id () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. split ('_ ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġif Ġ( it . size Ġ!= Ġ 2 ) Ġnull Ġelse Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . get ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġit . if Blank Ġ{ Ġnull Ġ} Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Vote Link ( element : ĠElement ): ĠString ? Ġ= ĊĠĠĠĠĠĠĠ Ġelement . getElementsBy Class (" vot el inks ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . getElementsBy Tag (" a ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . attributes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . get (" href ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġit . if Blank Ġ{ Ġnull Ġ} Ġ} Ċ }