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 }