Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "strconv"
- "sort"
- "fmt"
- "strings"
- "github.com/PuerkitoBio/goquery"
- )
- type Movie struct {
- title string
- year int
- rate float64
- }
- type byYear []Movie
- type byRate []Movie
- func (l byYear) Len() int { return len(l) }
- func (l byYear) Swap(i, j int) { l[i], l[j] = l[j], l[i] }
- func (l byYear) Less(i, j int) bool { return l[i].year < l[j].year }
- func (l byRate) Len() int { return len(l) }
- func (l byRate) Swap(i, j int) { l[i], l[j] = l[j], l[i] }
- func (l byRate) Less(i, j int) bool { return l[i].rate < l[j].rate }
- func (l byYear) Pack() [][]Movie {
- var movies = make([][]Movie, 0)
- lyear := -1
- var acc = make([]Movie, 0)
- for _, m := range l {
- if lyear == -1 {
- lyear = m.year
- }
- if m.year != lyear {
- acc = append(acc, m)
- movies = append(movies, acc)
- acc = make([]Movie, 0)
- lyear = m.year
- } else {
- acc = append(acc, m)
- }
- }
- return movies
- }
- func main() {
- d, _ := goquery.NewDocument("https://github.com/k4m4/movies-for-hackers")
- var movies = make([]Movie, 0)
- d.Find("#readme table tbody tr").Each(func(i int, s *goquery.Selection) {
- title := s.Find("td > a").Text()
- year, _ := strconv.Atoi(s.Find("td:nth-child(3)").Text())
- rate, _ := strconv.ParseFloat(strings.Replace(s.Find("td:nth-child(4)").Text(), "/10", "", -1), 64)
- m := Movie{title: title, year: year, rate: rate}
- movies = append(movies, m)
- })
- sort.Sort(byYear(movies))
- packedByYear := byYear(movies).Pack()
- for _, m := range packedByYear {
- fmt.Printf("--------------- %d ---------------\n", m[0].year)
- sort.Sort(byRate(m))
- for _, n := range m {
- fmt.Printf("%s %d %f \n", n.title, n.year, n.rate)
- }
- println("")
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement