cli + tui to publish to leaflet (wip) & manage tasks, notes & watch/read lists 馃崈
charm leaflet readability golang
29
fork

Configure Feed

Select the types of activity you want to include in your feed.

at d631904bbdd17c4c85e83012b4eae79459a04a9c 83 lines 2.0 kB view raw
1package services 2 3import ( 4 "net/url" 5 "strings" 6 7 "github.com/gocolly/colly/v2" 8) 9 10type Searchable interface { 11 Search(query string) ([]Media, error) 12} 13 14type Fetchable interface { 15 MakeRequest(url string) (string, error) 16 MovieRequest(url string) (*Movie, error) 17 TVRequest(url string) (*TVSeries, error) 18} 19 20// DefaultFetcher provides the default implementation using colly 21type DefaultFetcher struct{} 22 23func (f *DefaultFetcher) MakeRequest(url string) (string, error) { 24 return FetchHTML(url) 25} 26 27func (f *DefaultFetcher) MovieRequest(url string) (*Movie, error) { 28 return FetchMovie(url) 29} 30 31func (f *DefaultFetcher) TVRequest(url string) (*TVSeries, error) { 32 return FetchTVSeries(url) 33} 34 35func (f *DefaultFetcher) Search(query string) ([]Media, error) { 36 return SearchRottenTomatoes(query) 37} 38 39// SearchRottenTomatoes fetches live search results for a query. 40var SearchRottenTomatoes = func(q string) ([]Media, error) { 41 searchURL := "https://www.rottentomatoes.com/search?search=" + url.QueryEscape(q) 42 html, err := FetchHTML(searchURL) 43 if err != nil { 44 return nil, err 45 } 46 return ParseSearch(strings.NewReader(html)) 47} 48 49var FetchHTML = func(url string) (string, error) { 50 var html string 51 c := colly.NewCollector( 52 colly.AllowedDomains("www.rottentomatoes.com", "rottentomatoes.com"), 53 ) 54 c.OnResponse(func(r *colly.Response) { html = string(r.Body) }) 55 if err := c.Visit(url); err != nil { 56 return "", err 57 } 58 return html, nil 59} 60 61var FetchTVSeries = func(url string) (*TVSeries, error) { 62 html, err := FetchHTML(url) 63 if err != nil { 64 return nil, err 65 } 66 return ExtractTVSeriesMetadata(strings.NewReader(html)) 67} 68 69var FetchMovie = func(url string) (*Movie, error) { 70 html, err := FetchHTML(url) 71 if err != nil { 72 return nil, err 73 } 74 return ExtractMovieMetadata(strings.NewReader(html)) 75} 76 77var FetchTVSeason = func(url string) (*TVSeason, error) { 78 html, err := FetchHTML(url) 79 if err != nil { 80 return nil, err 81 } 82 return ExtractTVSeasonMetadata(strings.NewReader(html)) 83}