Kaynağa Gözat

Try to switch to pages

jherve 1 yıl önce
ebeveyn
işleme
77e9ac3f46
2 değiştirilmiş dosya ile 49 ekleme ve 1 silme
  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 (Effect)
 import Effect.Class.Console (logShow)
 import Effect.Class.Console (logShow)
 import Effect.Console (log)
 import Effect.Console (log)
+import LinkedIn (LinkedInUIElement(..), asPrunedTrees, asTree, getArtDecoCards, getArtDecoTabs, getJobsUnifiedTopCard)
 import LinkedIn.ArtDecoCard (queryArtDecoCard)
 import LinkedIn.ArtDecoCard (queryArtDecoCard)
 import LinkedIn.ArtDecoTab (queryArtDecoTab)
 import LinkedIn.ArtDecoTab (queryArtDecoTab)
 import LinkedIn.DetachedNode (toDetached)
 import LinkedIn.DetachedNode (toDetached)
 import LinkedIn.JobsUnifiedTopCard (queryJobsUnifiedTopCardElement)
 import LinkedIn.JobsUnifiedTopCard (queryJobsUnifiedTopCardElement)
-import LinkedIn (LinkedInUIElement(..), asPrunedTrees, asTree, getArtDecoCards, getArtDecoTabs, getJobsUnifiedTopCard)
 import LinkedIn.Profile.Project as PP
 import LinkedIn.Profile.Project as PP
 import LinkedIn.Profile.Skill as PS
 import LinkedIn.Profile.Skill as PS
 import LinkedIn.Profile.WorkExperience as PWE
 import LinkedIn.Profile.WorkExperience as PWE
 import LinkedIn.QueryRunner (runQuery)
 import LinkedIn.QueryRunner (runQuery)
+import LinkedIn.SkillsPage (querySkillsPage)
+import Web.DOM.Document as D
 import Yoga.Tree (Tree, showTree)
 import Yoga.Tree (Tree, showTree)
 
 
 main :: Effect Unit
 main :: Effect Unit
@@ -71,6 +73,14 @@ main = do
           log "parsed OK"
           log "parsed OK"
           logShow detached
           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 ∷ Maybe (NonEmptyList LinkedInUIElement) → Effect String
 maybeShowTree Nothing = pure "nope"
 maybeShowTree Nothing = pure "nope"
 maybeShowTree (Just nel) = do
 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