jherve 1 рік тому
батько
коміт
77e9ac3f46
2 змінених файлів з 49 додано та 1 видалено
  1. 11 1
      src/Content.purs
  2. 38 0
      src/LinkedIn/SkillsPage.purs

+ 11 - 1
src/Content.purs

@@ -11,15 +11,17 @@ import Data.Traversable (traverse)
 import Effect (Effect)
 import Effect.Class.Console (logShow)
 import Effect.Console (log)
+import LinkedIn (LinkedInUIElement(..), asPrunedTrees, asTree, getArtDecoCards, getArtDecoTabs, getJobsUnifiedTopCard)
 import LinkedIn.ArtDecoCard (queryArtDecoCard)
 import LinkedIn.ArtDecoTab (queryArtDecoTab)
 import LinkedIn.DetachedNode (toDetached)
 import LinkedIn.JobsUnifiedTopCard (queryJobsUnifiedTopCardElement)
-import LinkedIn (LinkedInUIElement(..), asPrunedTrees, asTree, getArtDecoCards, getArtDecoTabs, getJobsUnifiedTopCard)
 import LinkedIn.Profile.Project as PP
 import LinkedIn.Profile.Skill as PS
 import LinkedIn.Profile.WorkExperience as PWE
 import LinkedIn.QueryRunner (runQuery)
+import LinkedIn.SkillsPage (querySkillsPage)
+import Web.DOM.Document as D
 import Yoga.Tree (Tree, showTree)
 
 main :: Effect Unit
@@ -71,6 +73,14 @@ main = do
           log "parsed OK"
           logShow detached
 
+  skillsNode <- runQuery $ querySkillsPage $ D.toNode dom
+  case skillsNode of
+    Left l' -> logShow l'
+    Right q -> do
+      detached <- traverse toDetached q
+      log "skills OK"
+      logShow detached
+
 maybeShowTree ∷ Maybe (NonEmptyList LinkedInUIElement) → Effect String
 maybeShowTree Nothing = pure "nope"
 maybeShowTree (Just nel) = do

+ 38 - 0
src/LinkedIn/SkillsPage.purs

@@ -0,0 +1,38 @@
+module LinkedIn.SkillsPage where
+
+import Prelude
+
+import Data.Foldable (class Foldable, foldMap, foldlDefault, foldrDefault)
+import Data.Generic.Rep (class Generic)
+import Data.List.Types (NonEmptyList)
+import Data.Show.Generic (genericShow)
+import Data.Traversable (class Traversable, sequence, traverseDefault)
+import LinkedIn.ArtDecoTab (ArtDecoTabElement, queryArtDecoTab)
+import LinkedIn.QueryRunner (QueryRunner, subQueryMany)
+import Web.DOM (Node)
+
+data SkillsPage a = SkillsPage (NonEmptyList (ArtDecoTabElement a))
+
+derive instance Generic (SkillsPage a) _
+derive instance Eq a => Eq (SkillsPage a)
+instance Show a => Show (SkillsPage a) where
+  show = genericShow
+derive instance Functor SkillsPage
+
+instance Foldable SkillsPage where
+  foldMap f (SkillsPage tabs) = foldMap (foldMap f) tabs
+
+  foldl = \x -> foldlDefault x
+  foldr = \x -> foldrDefault x
+
+instance Traversable SkillsPage where
+  sequence (SkillsPage tabs) = ado
+    ts <- sequence (map sequence tabs)
+  in SkillsPage ts
+
+  traverse = \x -> traverseDefault x
+
+querySkillsPage :: QueryRunner (SkillsPage Node)
+querySkillsPage n = do
+  tabs <- subQueryMany queryArtDecoTab "section.artdeco-card > div ~ div > div > div > ul > li" n
+  pure $ SkillsPage tabs