package main import ( "database/sql" "encoding/json" "fmt" "io" "log" "net/http" _ "github.com/mattn/go-sqlite3" ) func main() { // Open SQLite database db, err := sql.Open("sqlite3", "./data.db") if err != nil { log.Fatal(err) } defer db.Close() // Create messages table if not exists _, err = db.Exec(` CREATE TABLE IF NOT EXISTS messages ( id INTEGER PRIMARY KEY AUTOINCREMENT, message_id INTEGER UNIQUE NOT NULL, message_seq INTEGER ) `) if err != nil { log.Fatal(err) } // Fetch messageIDs from database rows, err := db.Query("SELECT message_id FROM messages") if err != nil { log.Fatal(err) } defer rows.Close() for rows.Next() { var messageID int err := rows.Scan(&messageID) if err != nil { log.Fatal(err) } // Fetch message_seq from API messageSeq, err := fetchMessageSeq(messageID) if err != nil { log.Println(err) continue } // Insert or update message_seq in database err = insertOrUpdateMessageSeq(db, messageID, messageSeq) if err != nil { log.Println(err) continue } fmt.Printf("MessageSeq for message_id %d is %d\n", messageID, messageSeq) } if err := rows.Err(); err != nil { log.Fatal(err) } } func fetchMessageSeq(messageID int) (int, error) { url := fmt.Sprintf("http://47.92.132.159:5700/get_msg?message_id=%d", messageID) resp, err := http.Get(url) if err != nil { return 0, err } defer resp.Body.Close() body, err := io.ReadAll(resp.Body) if err != nil { return 0, err } var messageResp map[string]interface{} err = json.Unmarshal(body, &messageResp) if err != nil { return 0, err } return messageResp["message_seq"].(int), nil } func insertOrUpdateMessageSeq(db *sql.DB, messageID, messageSeq int) error { // Try to insert messageSeq // _, err := db.Exec("INSERT INTO messages (message_id, message_seq) VALUES (?, ?)", messageID, messageSeq) // if err != nil { // If messageID already exists, update messageSeq _, err := db.Exec("UPDATE messages SET message_seq = ? WHERE message_id = ?", messageSeq, messageID) if err != nil { return err // } } return nil }