Просмотр исходного кода

Extractible now returns an Output

jherve 1 год назад
Родитель
Сommit
160e12b46b

+ 6 - 5
src/LinkedIn.purs

@@ -9,6 +9,7 @@ import Effect (Effect)
 import LinkedIn.DetachedNode (DetachedNode, toDetached)
 import LinkedIn.DetachedNode (DetachedNode, toDetached)
 import LinkedIn.Extractible (class Extractible)
 import LinkedIn.Extractible (class Extractible)
 import LinkedIn.Extractible as LE
 import LinkedIn.Extractible as LE
+import LinkedIn.Output.Types (Output)
 import LinkedIn.PageUrl (PageUrl, pageUrlP)
 import LinkedIn.PageUrl (PageUrl, pageUrlP)
 import LinkedIn.QueryRunner (QueryError, QueryRunner', runQuery)
 import LinkedIn.QueryRunner (QueryError, QueryRunner', runQuery)
 import LinkedIn.UI.Elements.Parser (fromDetachedToUI)
 import LinkedIn.UI.Elements.Parser (fromDetachedToUI)
@@ -28,19 +29,19 @@ getContext dom = do
       Left _ -> Left "Unexpected URL"
       Left _ -> Left "Unexpected URL"
       Right page -> Right page
       Right page -> Right page
 
 
-run :: forall a t.
+run :: forall t.
   Traversable t
   Traversable t
-  => Extractible t a
+  => Extractible t
   => Proxy t
   => Proxy t
   -> Document
   -> Document
-  -> Effect (Either String a)
+  -> Effect (Either String Output)
 run prox dom = do
 run prox dom = do
   detached <- runToDetached prox dom
   detached <- runToDetached prox dom
   pure $ extract LE.extract $ toUI detached
   pure $ extract LE.extract $ toUI detached
 
 
-runToDetached :: forall t a.
+runToDetached :: forall t.
   Traversable t
   Traversable t
-  => Extractible t a
+  => Extractible t
   => Proxy t
   => Proxy t
   -> Document
   -> Document
   -> Effect (Either QueryError (t DetachedNode))
   -> Effect (Either QueryError (t DetachedNode))

+ 3 - 2
src/LinkedIn/Extractible.purs

@@ -1,10 +1,11 @@
 module LinkedIn.Extractible where
 module LinkedIn.Extractible where
 
 
 import Data.Either (Either)
 import Data.Either (Either)
+import LinkedIn.Output.Types (Output)
 import LinkedIn.QueryRunner (QueryRunner')
 import LinkedIn.QueryRunner (QueryRunner')
 import LinkedIn.UI.Elements.Types (UIElement)
 import LinkedIn.UI.Elements.Types (UIElement)
 import Web.DOM (Document, Node)
 import Web.DOM (Document, Node)
 
 
-class Extractible t out | t -> out where
+class Extractible t where
   query :: QueryRunner' Document (t Node)
   query :: QueryRunner' Document (t Node)
-  extract ∷ t UIElement → Either String out
+  extract ∷ t UIElement → Either String Output

+ 3 - 3
src/LinkedIn/Page/JobOffer.purs

@@ -7,8 +7,8 @@ import Data.Generic.Rep (class Generic)
 import Data.Show.Generic (genericShow)
 import Data.Show.Generic (genericShow)
 import Data.Traversable (class Traversable, sequence, traverseDefault)
 import Data.Traversable (class Traversable, sequence, traverseDefault)
 import LinkedIn.Extractible (class Extractible)
 import LinkedIn.Extractible (class Extractible)
-import LinkedIn.Jobs.JobOffer (JobOffer)
 import LinkedIn.Jobs.JobOffer as JJO
 import LinkedIn.Jobs.JobOffer as JJO
+import LinkedIn.Output.Types (Output(..))
 import LinkedIn.QueryRunner (subQueryOne)
 import LinkedIn.QueryRunner (subQueryOne)
 import LinkedIn.UI.Components.JobsUnifiedTopCard (JobsUnifiedTopCardElement, queryJobsUnifiedTopCardElement)
 import LinkedIn.UI.Components.JobsUnifiedTopCard (JobsUnifiedTopCardElement, queryJobsUnifiedTopCardElement)
 
 
@@ -33,9 +33,9 @@ instance Traversable JobOfferPage where
 
 
   traverse = \x -> traverseDefault x
   traverse = \x -> traverseDefault x
 
 
-instance Extractible JobOfferPage JobOffer where
+instance Extractible JobOfferPage where
   query n = do
   query n = do
     card <- subQueryOne queryJobsUnifiedTopCardElement "div.jobs-unified-top-card" n
     card <- subQueryOne queryJobsUnifiedTopCardElement "div.jobs-unified-top-card" n
     pure $ JobOfferPage card
     pure $ JobOfferPage card
 
 
-  extract (JobOfferPage tabs) = JJO.fromUI tabs
+  extract (JobOfferPage tabs) = OutJobOffer <$> JJO.fromUI tabs

+ 3 - 2
src/LinkedIn/Page/Projects.purs

@@ -9,6 +9,7 @@ import Data.List.Types (NonEmptyList)
 import Data.Show.Generic (genericShow)
 import Data.Show.Generic (genericShow)
 import Data.Traversable (class Traversable, sequence, traverse, traverseDefault)
 import Data.Traversable (class Traversable, sequence, traverse, traverseDefault)
 import LinkedIn.Extractible (class Extractible)
 import LinkedIn.Extractible (class Extractible)
+import LinkedIn.Output.Types (Output(..))
 import LinkedIn.Profile.Project (Project)
 import LinkedIn.Profile.Project (Project)
 import LinkedIn.Profile.Project as PP
 import LinkedIn.Profile.Project as PP
 import LinkedIn.QueryRunner (QueryRunner', subQueryMany)
 import LinkedIn.QueryRunner (QueryRunner', subQueryMany)
@@ -45,9 +46,9 @@ query n = do
 extract ∷ ProjectsPage UIElement → Either String (NonEmptyList Project)
 extract ∷ ProjectsPage UIElement → Either String (NonEmptyList Project)
 extract (ProjectsPage cards) = traverse PP.fromUI cards
 extract (ProjectsPage cards) = traverse PP.fromUI cards
 
 
-instance Extractible ProjectsPage (NonEmptyList Project) where
+instance Extractible ProjectsPage where
   query n = do
   query n = do
     cards <- subQueryMany queryArtDecoCard "section.artdeco-card > div ~ div > div > div > ul > li" n
     cards <- subQueryMany queryArtDecoCard "section.artdeco-card > div ~ div > div > div > ul > li" n
     pure $ ProjectsPage cards
     pure $ ProjectsPage cards
 
 
-  extract (ProjectsPage cards) = traverse PP.fromUI cards
+  extract (ProjectsPage cards) = OutProjects <$> traverse PP.fromUI cards

+ 3 - 3
src/LinkedIn/Page/Skills.purs

@@ -8,7 +8,7 @@ import Data.List.Types (NonEmptyList)
 import Data.Show.Generic (genericShow)
 import Data.Show.Generic (genericShow)
 import Data.Traversable (class Traversable, sequence, traverse, traverseDefault)
 import Data.Traversable (class Traversable, sequence, traverse, traverseDefault)
 import LinkedIn.Extractible (class Extractible)
 import LinkedIn.Extractible (class Extractible)
-import LinkedIn.Profile.Skill (Skill)
+import LinkedIn.Output.Types (Output(..))
 import LinkedIn.Profile.Skill as PS
 import LinkedIn.Profile.Skill as PS
 import LinkedIn.QueryRunner (subQueryMany)
 import LinkedIn.QueryRunner (subQueryMany)
 import LinkedIn.UI.Components.ArtDecoTab (ArtDecoTabElement, queryArtDecoTab)
 import LinkedIn.UI.Components.ArtDecoTab (ArtDecoTabElement, queryArtDecoTab)
@@ -34,9 +34,9 @@ instance Traversable SkillsPage where
 
 
   traverse = \x -> traverseDefault x
   traverse = \x -> traverseDefault x
 
 
-instance Extractible SkillsPage (NonEmptyList Skill) where
+instance Extractible SkillsPage where
   query n = do
   query n = do
     tabs <- subQueryMany queryArtDecoTab "div.artdeco-tabs > div > div > div > div > ul > li" n
     tabs <- subQueryMany queryArtDecoTab "div.artdeco-tabs > div > div > div > div > ul > li" n
     pure $ SkillsPage tabs
     pure $ SkillsPage tabs
 
 
-  extract (SkillsPage tabs) = traverse PS.fromUI tabs
+  extract (SkillsPage tabs) = OutSkills <$> traverse PS.fromUI tabs

+ 3 - 3
src/LinkedIn/Page/WorkExperiences.purs

@@ -8,7 +8,7 @@ import Data.List.Types (NonEmptyList)
 import Data.Show.Generic (genericShow)
 import Data.Show.Generic (genericShow)
 import Data.Traversable (class Traversable, sequence, traverse, traverseDefault)
 import Data.Traversable (class Traversable, sequence, traverse, traverseDefault)
 import LinkedIn.Extractible (class Extractible)
 import LinkedIn.Extractible (class Extractible)
-import LinkedIn.Profile.WorkExperience (WorkExperience)
+import LinkedIn.Output.Types (Output(..))
 import LinkedIn.Profile.WorkExperience as PWE
 import LinkedIn.Profile.WorkExperience as PWE
 import LinkedIn.QueryRunner (subQueryMany)
 import LinkedIn.QueryRunner (subQueryMany)
 import LinkedIn.UI.Components.ArtDecoCard (ArtDecoCardElement, queryArtDecoCard)
 import LinkedIn.UI.Components.ArtDecoCard (ArtDecoCardElement, queryArtDecoCard)
@@ -34,9 +34,9 @@ instance Traversable WorkExperiencesPage where
 
 
   traverse = \x -> traverseDefault x
   traverse = \x -> traverseDefault x
 
 
-instance Extractible WorkExperiencesPage (NonEmptyList WorkExperience) where
+instance Extractible WorkExperiencesPage where
   query n = do
   query n = do
     cards <- subQueryMany queryArtDecoCard "section.artdeco-card > div ~ div > div > div > ul > li" n
     cards <- subQueryMany queryArtDecoCard "section.artdeco-card > div ~ div > div > div > ul > li" n
     pure $ WorkExperiencesPage cards
     pure $ WorkExperiencesPage cards
 
 
-  extract (WorkExperiencesPage cards) = traverse PWE.fromUI cards
+  extract (WorkExperiencesPage cards) = OutWorkExperiences <$> traverse PWE.fromUI cards