Advertisement
Guest User

Untitled

a guest
Feb 24th, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.74 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "strconv"
  5.  
  6.     "sort"
  7.  
  8.     "fmt"
  9.  
  10.     "strings"
  11.  
  12.     "github.com/PuerkitoBio/goquery"
  13. )
  14.  
  15. type Movie struct {
  16.     title string
  17.     year  int
  18.     rate  float64
  19. }
  20.  
  21. type byYear []Movie
  22. type byRate []Movie
  23.  
  24. func (l byYear) Len() int           { return len(l) }
  25. func (l byYear) Swap(i, j int)      { l[i], l[j] = l[j], l[i] }
  26. func (l byYear) Less(i, j int) bool { return l[i].year < l[j].year }
  27.  
  28. func (l byRate) Len() int           { return len(l) }
  29. func (l byRate) Swap(i, j int)      { l[i], l[j] = l[j], l[i] }
  30. func (l byRate) Less(i, j int) bool { return l[i].rate < l[j].rate }
  31.  
  32. func (l byYear) Pack() [][]Movie {
  33.  
  34.     var movies = make([][]Movie, 0)
  35.     lyear := -1
  36.     var acc = make([]Movie, 0)
  37.     for _, m := range l {
  38.         if lyear == -1 {
  39.             lyear = m.year
  40.         }
  41.         if m.year != lyear {
  42.             acc = append(acc, m)
  43.             movies = append(movies, acc)
  44.             acc = make([]Movie, 0)
  45.             lyear = m.year
  46.         } else {
  47.             acc = append(acc, m)
  48.         }
  49.  
  50.     }
  51.     return movies
  52. }
  53. func main() {
  54.     d, _ := goquery.NewDocument("https://github.com/k4m4/movies-for-hackers")
  55.     var movies = make([]Movie, 0)
  56.     d.Find("#readme table tbody tr").Each(func(i int, s *goquery.Selection) {
  57.         title := s.Find("td > a").Text()
  58.         year, _ := strconv.Atoi(s.Find("td:nth-child(3)").Text())
  59.         rate, _ := strconv.ParseFloat(strings.Replace(s.Find("td:nth-child(4)").Text(), "/10", "", -1), 64)
  60.         m := Movie{title: title, year: year, rate: rate}
  61.         movies = append(movies, m)
  62.     })
  63.     sort.Sort(byYear(movies))
  64.     packedByYear := byYear(movies).Pack()
  65.     for _, m := range packedByYear {
  66.  
  67.         fmt.Printf("--------------- %d ---------------\n", m[0].year)
  68.         sort.Sort(byRate(m))
  69.         for _, n := range m {
  70.             fmt.Printf("%s %d %f \n", n.title, n.year, n.rate)
  71.         }
  72.         println("")
  73.  
  74.     }
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement