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.

107 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. day := strings.Split(v.CreatedAt, " ")[0]
  54. if _, ok := days[day]; ok {
  55. days[day] = days[day] + 1
  56. } else {
  57. days[day] = 1
  58. }
  59. }
  60. printDays(days)
  61. }
  62. func printHours(hours map[string]int) {
  63. lowest, highest := getHigherValueOfMap(hours)
  64. for i := 0; i < 24; i++ {
  65. var h string
  66. if i < 10 {
  67. h = "0" + strconv.Itoa(i)
  68. } else {
  69. h = strconv.Itoa(i)
  70. }
  71. fmt.Print(h + "h - " + strconv.Itoa(hours[h]) + "tw")
  72. fmt.Print(" ")
  73. printBar(hours[h], lowest, highest)
  74. }
  75. }
  76. func analyzeHours(tweets []twitter.Tweet) {
  77. var hours = make(map[string]int)
  78. for _, v := range tweets {
  79. time := strings.Split(v.CreatedAt, " ")[3]
  80. hour := strings.Split(time, ":")[0]
  81. if _, ok := hours[hour]; ok {
  82. hours[hour] = hours[hour] + 1
  83. } else {
  84. hours[hour] = 1
  85. }
  86. }
  87. printHours(hours)
  88. }
  89. func analyzeDates(tweets []twitter.Tweet) {
  90. fmt.Println("Weekly activity distribution (per day)")
  91. analyzeDays(tweets)
  92. fmt.Println(" ")
  93. fmt.Println("Daily activity distribution (per hour)")
  94. analyzeHours(tweets)
  95. }