119 lines
2.4 KiB
Go
119 lines
2.4 KiB
Go
package main
|
|
|
|
import (
|
|
"database/sql"
|
|
"encoding/json"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
|
|
_ "github.com/mattn/go-sqlite3"
|
|
)
|
|
|
|
func main() {
|
|
// Open the database
|
|
db, err := sql.Open("sqlite3", "../../ldr_readings.db")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer db.Close()
|
|
|
|
// Create the table if it doesn't exist
|
|
createTable := `
|
|
CREATE TABLE IF NOT EXISTS ldr_readings (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
value INTEGER NOT NULL,
|
|
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
);`
|
|
|
|
_, err = db.Exec(createTable)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
// Read the Telegram export file
|
|
data, err := os.ReadFile("../../../tg_export.json")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
// Parse the JSON into a map
|
|
var export map[string]interface{}
|
|
if err := json.Unmarshal(data, &export); err != nil {
|
|
log.Printf("Error unmarshaling JSON: %v", err)
|
|
log.Printf("First 100 bytes of data: %s", string(data[:100]))
|
|
log.Fatal(err)
|
|
}
|
|
|
|
// Get the messages array
|
|
messages, ok := export["messages"].([]interface{})
|
|
if !ok {
|
|
log.Fatal("Could not find messages array in export")
|
|
}
|
|
|
|
// Prepare the insert statement
|
|
stmt, err := db.Prepare("INSERT INTO ldr_readings (value, timestamp) VALUES (?, ?)")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer stmt.Close()
|
|
|
|
// Process each message
|
|
count := 0
|
|
for _, msgInterface := range messages {
|
|
msg, ok := msgInterface.(map[string]interface{})
|
|
if !ok {
|
|
continue
|
|
}
|
|
|
|
// Get the text field
|
|
text, ok := msg["text"].(string)
|
|
if !ok {
|
|
continue
|
|
}
|
|
|
|
// Only process messages containing LDR values
|
|
if !strings.HasPrefix(text, "Current LDR value: ") {
|
|
continue
|
|
}
|
|
|
|
// Extract the LDR value
|
|
valueStr := strings.TrimPrefix(text, "Current LDR value: ")
|
|
value, err := strconv.Atoi(valueStr)
|
|
if err != nil {
|
|
log.Printf("Error parsing LDR value from message: %s", text)
|
|
continue
|
|
}
|
|
|
|
// Get the date field
|
|
date, ok := msg["date"].(string)
|
|
if !ok {
|
|
continue
|
|
}
|
|
|
|
// Parse the timestamp
|
|
timestamp, err := time.Parse("2006-01-02T15:04:05", date)
|
|
if err != nil {
|
|
log.Printf("Error parsing timestamp from message: %s", date)
|
|
continue
|
|
}
|
|
|
|
// Insert into database
|
|
_, err = stmt.Exec(value, timestamp)
|
|
if err != nil {
|
|
log.Printf("Error inserting record: %v", err)
|
|
continue
|
|
}
|
|
|
|
count++
|
|
if count%100 == 0 {
|
|
fmt.Printf("Imported %d readings...\n", count)
|
|
}
|
|
}
|
|
|
|
fmt.Printf("Successfully imported %d LDR readings\n", count)
|
|
}
|