initial
This commit is contained in:
90
stream_titre.go
Normal file
90
stream_titre.go
Normal file
@@ -0,0 +1,90 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user