91 lines
2.0 KiB
Go
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
|
|
}
|