You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

108 lines
2.2 KiB

7 years ago
7 years ago
7 years ago
  1. package main
  2. import (
  3. "fmt"
  4. "sort"
  5. "strconv"
  6. "strings"
  7. "github.com/dghubble/go-twitter/twitter"
  8. )
  9. var week = [7]string{"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}
  10. func printBar(n int, lowest int, highest int) {
  11. bar := int((float64(n) / float64(highest)) * 40)
  12. if n == lowest {
  13. fmt.Print("\x1b[36;1m") //cyan
  14. }
  15. if n == highest {
  16. fmt.Print("\x1b[31;1m") //red
  17. }
  18. for i := 0; i < bar; i++ {
  19. fmt.Print("█")
  20. }
  21. if bar == 0 && n > 0 {
  22. fmt.Print("█")
  23. }
  24. if n == lowest {
  25. fmt.Print(" lowest")
  26. }
  27. if n == highest {
  28. fmt.Print(" highest")
  29. }
  30. fmt.Print("\x1b[0m") //defaultColor
  31. fmt.Println(" ")
  32. }
  33. func getHigherValueOfMap(m map[string]int) (int, int) {
  34. var values []int
  35. for _, v := range m {
  36. values = append(values, v)
  37. }
  38. sort.Ints(values)
  39. //returns lower, higher values
  40. return values[0], values[len(values)-1]
  41. }
  42. func printDays(days map[string]int) {
  43. lowest, highest := getHigherValueOfMap(days)
  44. for i := 0; i < len(week); i++ {
  45. fmt.Print(week[i] + " - " + strconv.Itoa(days[week[i]]) + "tw")
  46. fmt.Print(" ")
  47. printBar(days[week[i]], lowest, highest)
  48. }
  49. }
  50. func analyzeDays(tweets []twitter.Tweet) {
  51. var days = make(map[string]int)
  52. for _, v := range tweets {
  53. //fmt.Println(v.CreatedAt)
  54. day := strings.Split(v.CreatedAt, " ")[0]
  55. if _, ok := days[day]; ok {
  56. days[day] = days[day] + 1
  57. } else {
  58. days[day] = 1
  59. }
  60. }
  61. printDays(days)
  62. }
  63. func printHours(hours map[string]int) {
  64. lowest, highest := getHigherValueOfMap(hours)
  65. for i := 0; i < 24; i++ {
  66. var h string
  67. if i < 10 {
  68. h = "0" + strconv.Itoa(i)
  69. } else {
  70. h = strconv.Itoa(i)
  71. }
  72. fmt.Print(h + "h - " + strconv.Itoa(hours[h]) + "tw")
  73. fmt.Print(" ")
  74. printBar(hours[h], lowest, highest)
  75. }
  76. }
  77. func analyzeHours(tweets []twitter.Tweet) {
  78. var hours = make(map[string]int)
  79. for _, v := range tweets {
  80. time := strings.Split(v.CreatedAt, " ")[3]
  81. hour := strings.Split(time, ":")[0]
  82. if _, ok := hours[hour]; ok {
  83. hours[hour] = hours[hour] + 1
  84. } else {
  85. hours[hour] = 1
  86. }
  87. }
  88. printHours(hours)
  89. }
  90. func analyzeDates(tweets []twitter.Tweet) {
  91. fmt.Println("Weekly activity distribution (per day)")
  92. analyzeDays(tweets)
  93. fmt.Println(" ")
  94. fmt.Println("Daily activity distribution (per hour)")
  95. analyzeHours(tweets)
  96. }