Files
rolandradio_record/stream_titre.go
Mac Call e53fb1b54f initial
2023-03-05 15:06:10 +01:00

91 lines
2.0 KiB
Go

package main
import (
"encoding/json"
"fmt"
"net/http"
"os"
"time"
)
const metadata_url = "http://streaming.rolandradio.net/status-json.xsl"
const index_file = "./index%s.txt"
const timer = 200 //ms
const dateFormat = "2006-01-02T15:04:05.000"
func get_actual_titre() string {
// Récupérer l'URL renvoyant du JSON
response, err := http.Get(metadata_url)
if err != nil {
fmt.Println("Erreur lors de la récupération de l'URL:", err)
return ""
}
defer response.Body.Close()
// Parser le JSON
var data map[string]interface{}
err = json.NewDecoder(response.Body).Decode(&data)
if err != nil {
fmt.Println("Erreur lors du parsing du JSON:", err)
return ""
}
//fmt.Printf("%v", data)
// Récupérer le titre du premier flux
streamTitle := data["icestats"].(map[string]interface{})["source"].([]interface{})[0].(map[string]interface{})["title"].(string)
return streamTitle
}
func getDelai(startTime time.Time) string {
elapsedTime := time.Since(startTime)
hours := elapsedTime / time.Hour
elapsedTime -= hours * time.Hour
minutes := elapsedTime / time.Minute
elapsedTime -= minutes * time.Minute
seconds := elapsedTime / time.Second
elapsedTime -= seconds * time.Second
ms := elapsedTime / time.Millisecond
retour := fmt.Sprintf("%02d:%02d:%02d.%d", hours, minutes, seconds, ms)
return retour
}
func Enregistre_titres(done chan bool, errChan chan error, outFilename string) {
// ouvre le fichier contenant l'index
file, err := os.Create(outFilename)
if err != nil {
errChan <- err
done <- false
}
defer file.Close()
titreActuel := ""
// Exécuter la fonction toutes les 'timer' millisecondes
ticker := time.Tick(timer * time.Millisecond)
startTime := time.Now()
for range ticker {
titre := get_actual_titre()
if titre != titreActuel {
titreActuel = titre
delai := getDelai(startTime)
info := fmt.Sprintf("%s %s\n", delai, titreActuel)
//fmt.Printf (info)
_, err = file.WriteString(info)
if err != nil {
errChan <- err
done <- false
}
}
}
done <- true
}