瀏覽代碼

Add Page for JobOffer

jherve 1 年之前
父節點
當前提交
e16f79c49e
共有 2 個文件被更改,包括 57 次插入0 次删除
  1. 8 0
      src/Content.purs
  2. 49 0
      src/LinkedIn/Page/JobOffer.purs

+ 8 - 0
src/Content.purs

@@ -10,6 +10,7 @@ import Effect.Console (log)
 import LinkedIn.Page.Projects as PageP
 import LinkedIn.Page.WorkExperiences as PageWE
 import LinkedIn.Page.Skills as PageS
+import LinkedIn.Page.JobOffer as PageJ
 import LinkedIn.QueryRunner (runQuery)
 
 main :: Effect Unit
@@ -38,3 +39,10 @@ main = do
     Right q -> do
       skills <- PageS.extract q
       logShow skills
+
+  jobsNode <- runQuery $ PageJ.query dom
+  case jobsNode of
+    Left l' -> logShow l'
+    Right q -> do
+      job <- PageJ.extract q
+      logShow job

+ 49 - 0
src/LinkedIn/Page/JobOffer.purs

@@ -0,0 +1,49 @@
+module LinkedIn.Page.JobOffer where
+
+import Prelude
+
+import Data.Either (Either)
+import Data.Foldable (class Foldable, foldMap, foldlDefault, foldrDefault)
+import Data.Generic.Rep (class Generic)
+import Data.Show.Generic (genericShow)
+import Data.Traversable (class Traversable, sequence, traverse, traverseDefault)
+import Effect (Effect)
+import LinkedIn.DetachedNode (toDetached)
+import LinkedIn.Jobs.JobOffer (JobOffer)
+import LinkedIn.Jobs.JobOffer as JJO
+import LinkedIn.JobsUnifiedTopCard (JobsUnifiedTopCardElement, queryJobsUnifiedTopCardElement)
+import LinkedIn.QueryRunner (QueryRunner', subQueryOne)
+import Web.DOM (Document, Node)
+
+data JobOfferPage a = JobOfferPage (JobsUnifiedTopCardElement a)
+
+derive instance Generic (JobOfferPage a) _
+derive instance Eq a => Eq (JobOfferPage a)
+instance Show a => Show (JobOfferPage a) where
+  show = genericShow
+derive instance Functor JobOfferPage
+
+instance Foldable JobOfferPage where
+  foldMap f (JobOfferPage topCard) = foldMap f topCard
+
+  foldl = \x -> foldlDefault x
+  foldr = \x -> foldrDefault x
+
+instance Traversable JobOfferPage where
+  sequence (JobOfferPage topCard) = ado
+    tc <- sequence topCard
+  in JobOfferPage tc
+
+  traverse = \x -> traverseDefault x
+
+query :: QueryRunner' Document (JobOfferPage Node)
+query n = do
+  card <- subQueryOne queryJobsUnifiedTopCardElement "div.jobs-unified-top-card" n
+  pure $ JobOfferPage card
+
+extract ∷ JobOfferPage Node → Effect (Either String JobOffer)
+extract p = do
+  detached <- traverse toDetached p
+  let
+    JobOfferPage tabs = detached
+  pure $ JJO.fromUI tabs