api_list_recent_discuss.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. package route
  2. import (
  3. "database/sql"
  4. "encoding/json"
  5. "fmt"
  6. "opennamu/route/tool"
  7. "strconv"
  8. )
  9. func Api_list_recent_discuss(call_arg []string) {
  10. db_set := map[string]string{}
  11. json.Unmarshal([]byte(call_arg[0]), &db_set)
  12. other_set := map[string]string{}
  13. json.Unmarshal([]byte(call_arg[1]), &other_set)
  14. db := tool.DB_connect(db_set)
  15. if db == nil {
  16. return
  17. }
  18. defer db.Close()
  19. limit_int, err := strconv.Atoi(other_set["limit"])
  20. if err != nil {
  21. return
  22. }
  23. if limit_int > 50 || limit_int < 0 {
  24. limit_int = 50
  25. }
  26. var stmt *sql.Stmt
  27. set_type := other_set["set_type"]
  28. if set_type == "normal" {
  29. stmt, err = db.Prepare(tool.DB_change(db_set, "select title, sub, date, code, stop from rd where order by date desc limit ?"))
  30. } else if set_type == "close" {
  31. stmt, err = db.Prepare(tool.DB_change(db_set, "select title, sub, date, code, stop from rd where stop = 'O' order by date desc limit ?"))
  32. } else {
  33. stmt, err = db.Prepare(tool.DB_change(db_set, "select title, sub, date, code, stop from rd where stop != 'O' order by date asc limit ?"))
  34. }
  35. if err != nil {
  36. return
  37. }
  38. defer stmt.Close()
  39. rows, err := stmt.Query(limit_int)
  40. if err != nil {
  41. return
  42. }
  43. defer rows.Close()
  44. var data_list [][]string
  45. ip_parser_temp := map[string][]string{}
  46. for rows.Next() {
  47. var title string
  48. var sub string
  49. var date string
  50. var code string
  51. var stop string
  52. err := rows.Scan(&title, &sub, &date, &code, &stop)
  53. if err != nil {
  54. return
  55. }
  56. stmt, err := db.Prepare(tool.DB_change(db_set, "select ip from topic where code = ? order by id + 0 desc limit 1"))
  57. if err != nil {
  58. return
  59. }
  60. defer stmt.Close()
  61. var ip string
  62. err = stmt.QueryRow(code).Scan(&ip)
  63. if err != nil {
  64. if err == sql.ErrNoRows {
  65. ip = ""
  66. } else {
  67. return
  68. }
  69. }
  70. var ip_pre string
  71. var ip_render string
  72. if _, ok := ip_parser_temp[ip]; ok {
  73. ip_pre = ip_parser_temp[ip][0]
  74. ip_render = ip_parser_temp[ip][1]
  75. } else {
  76. ip_pre = tool.IP_preprocess(db, db_set, ip, other_set["ip"])[0]
  77. ip_render = tool.IP_parser(db, db_set, ip, other_set["ip"])
  78. ip_parser_temp[ip] = []string{ip_pre, ip_render}
  79. }
  80. data_list = append(data_list, []string{
  81. title,
  82. sub,
  83. date,
  84. code,
  85. stop,
  86. ip_pre,
  87. ip_render,
  88. })
  89. }
  90. if len(data_list) == 0 {
  91. fmt.Print("{}")
  92. } else {
  93. json_data, _ := json.Marshal(data_list)
  94. fmt.Print(string(json_data))
  95. }
  96. }