mirror of
https://github.com/gesellix/Bose-SoundTouch.git
synced 2026-08-18 08:36:13 +00:00
Add /bmx/tunein/v1/navigate and /bmx/tunein/v1/search (dummy)
This commit is contained in:
@@ -722,6 +722,9 @@ func setupRouter(server *handlers.Server) *chi.Mux {
|
||||
r.Get("/v1/playback/episode/{podcastID}", server.HandleTuneInPlaybackPodcast)
|
||||
r.Post("/v1/token", server.HandleTuneInToken)
|
||||
r.Post("/v1/report", server.HandleTuneInReport)
|
||||
r.Get("/v1/navigate", server.HandleTuneInNavigate)
|
||||
r.Get("/v1/navigate/*", server.HandleTuneInNavigate)
|
||||
r.Get("/v1/search", server.HandleTuneInSearch)
|
||||
})
|
||||
|
||||
r.Post("/orion/v1/playback/station/{data}", server.HandleOrionPlayback)
|
||||
|
||||
@@ -17,9 +17,12 @@ GET /accounts/{account}/devices/{device}/recents handlers.(
|
||||
GET /accounts/{account}/full handlers.(*Server).HandleMargeAccountFull-fm
|
||||
GET /bmx/registry/v1/services handlers.(*Server).HandleBMXRegistry-fm
|
||||
GET /bmx/registry/v1/servicesAvailability handlers.(*Server).HandleBMXServicesAvailability-fm
|
||||
GET /bmx/tunein/v1/navigate handlers.(*Server).HandleTuneInNavigate-fm
|
||||
GET /bmx/tunein/v1/navigate/* handlers.(*Server).HandleTuneInNavigate-fm
|
||||
GET /bmx/tunein/v1/playback/episode/{podcastID} handlers.(*Server).HandleTuneInPlaybackPodcast-fm
|
||||
GET /bmx/tunein/v1/playback/episodes/{podcastID} handlers.(*Server).HandleTuneInPodcastInfo-fm
|
||||
GET /bmx/tunein/v1/playback/station/{stationID} handlers.(*Server).HandleTuneInPlayback-fm
|
||||
GET /bmx/tunein/v1/search handlers.(*Server).HandleTuneInSearch-fm
|
||||
GET /custom/v1/playback/{encodedURL} handlers.(*Server).HandleCustomPlayback-fm
|
||||
GET /customer/account/{account} handlers.(*Server).HandleMargeAccountProfile-fm
|
||||
GET /docs/* handlers.(*Server).HandleDocs-fm
|
||||
|
||||
@@ -246,3 +246,25 @@ func (s *Server) HandleTuneInReport(w http.ResponseWriter, r *http.Request) {
|
||||
// For STOP and other events, return an empty object
|
||||
_, _ = w.Write([]byte("{}"))
|
||||
}
|
||||
|
||||
// HandleTuneInNavigate returns TuneIn navigation information.
|
||||
func (s *Server) HandleTuneInNavigate(w http.ResponseWriter, r *http.Request) {
|
||||
if r.Header.Get("Authorization") == "" {
|
||||
s.writeBMXUnauthorized(w)
|
||||
return
|
||||
}
|
||||
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
_, _ = w.Write(tuneInNavigateJSON)
|
||||
}
|
||||
|
||||
// HandleTuneInSearch returns TuneIn search results.
|
||||
func (s *Server) HandleTuneInSearch(w http.ResponseWriter, r *http.Request) {
|
||||
if r.Header.Get("Authorization") == "" {
|
||||
s.writeBMXUnauthorized(w)
|
||||
return
|
||||
}
|
||||
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
_, _ = w.Write(tuneInSearchJSON)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestHandleTuneInNavigate(t *testing.T) {
|
||||
r, _ := setupRouter("http://localhost:8001", nil)
|
||||
|
||||
t.Run("Root navigate", func(t *testing.T) {
|
||||
req := httptest.NewRequest("GET", "/bmx/tunein/v1/navigate", nil)
|
||||
req.Header.Set("Authorization", "Bearer mock-token")
|
||||
w := httptest.NewRecorder()
|
||||
|
||||
r.ServeHTTP(w, req)
|
||||
|
||||
if w.Code != http.StatusOK {
|
||||
t.Errorf("Expected status 200, got %d", w.Code)
|
||||
}
|
||||
|
||||
var resp map[string]interface{}
|
||||
if err := json.Unmarshal(w.Body.Bytes(), &resp); err != nil {
|
||||
t.Fatalf("Failed to unmarshal response: %v", err)
|
||||
}
|
||||
|
||||
if _, ok := resp["bmx_sections"]; !ok {
|
||||
t.Error("Response missing 'bmx_sections'")
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("Sub navigate", func(t *testing.T) {
|
||||
req := httptest.NewRequest("GET", "/bmx/tunein/v1/navigate/some-path", nil)
|
||||
req.Header.Set("Authorization", "Bearer mock-token")
|
||||
w := httptest.NewRecorder()
|
||||
|
||||
r.ServeHTTP(w, req)
|
||||
|
||||
if w.Code != http.StatusOK {
|
||||
t.Errorf("Expected status 200, got %d", w.Code)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("Unauthorized", func(t *testing.T) {
|
||||
req := httptest.NewRequest("GET", "/bmx/tunein/v1/navigate", nil)
|
||||
w := httptest.NewRecorder()
|
||||
|
||||
r.ServeHTTP(w, req)
|
||||
|
||||
if w.Code != http.StatusUnauthorized {
|
||||
t.Errorf("Expected status 401, got %d", w.Code)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestHandleTuneInSearch(t *testing.T) {
|
||||
r, _ := setupRouter("http://localhost:8001", nil)
|
||||
|
||||
t.Run("Search music", func(t *testing.T) {
|
||||
req := httptest.NewRequest("GET", "/bmx/tunein/v1/search?q=music", nil)
|
||||
req.Header.Set("Authorization", "Bearer mock-token")
|
||||
w := httptest.NewRecorder()
|
||||
|
||||
r.ServeHTTP(w, req)
|
||||
|
||||
if w.Code != http.StatusOK {
|
||||
t.Errorf("Expected status 200, got %d", w.Code)
|
||||
}
|
||||
|
||||
var resp map[string]interface{}
|
||||
if err := json.Unmarshal(w.Body.Bytes(), &resp); err != nil {
|
||||
t.Fatalf("Failed to unmarshal response: %v", err)
|
||||
}
|
||||
|
||||
if _, ok := resp["bmx_sections"]; !ok {
|
||||
t.Error("Response missing 'bmx_sections'")
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("Unauthorized", func(t *testing.T) {
|
||||
req := httptest.NewRequest("GET", "/bmx/tunein/v1/search?q=music", nil)
|
||||
w := httptest.NewRecorder()
|
||||
|
||||
r.ServeHTTP(w, req)
|
||||
|
||||
if w.Code != http.StatusUnauthorized {
|
||||
t.Errorf("Expected status 401, got %d", w.Code)
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -23,6 +23,12 @@ var bmxServicesJSON []byte
|
||||
//go:embed static/bmx_services_availability.json
|
||||
var bmxServicesAvailabilityJSON []byte
|
||||
|
||||
//go:embed static/tunein_navigate.json
|
||||
var tuneInNavigateJSON []byte
|
||||
|
||||
//go:embed static/tunein_search.json
|
||||
var tuneInSearchJSON []byte
|
||||
|
||||
// Upstream source available at https://worldwide.bose.com/updates/soundtouch?serialnumber=_serial_
|
||||
// which results in a redirect to https://downloads.bose.com/ced/soundtouch/mr4_22097fe2/index.xml
|
||||
//
|
||||
|
||||
@@ -29,6 +29,9 @@ func setupRouter(targetURL string, ds *datastore.DataStore) (*chi.Mux, *Server)
|
||||
r.Get("/tunein/v1/playback/episode/{podcastID}", server.HandleTuneInPlaybackPodcast)
|
||||
r.Post("/tunein/v1/token", server.HandleTuneInToken)
|
||||
r.Post("/tunein/v1/report", server.HandleTuneInReport)
|
||||
r.Get("/tunein/v1/navigate", server.HandleTuneInNavigate)
|
||||
r.Get("/tunein/v1/navigate/*", server.HandleTuneInNavigate)
|
||||
r.Get("/tunein/v1/search", server.HandleTuneInSearch)
|
||||
r.Post("/orion/v1/playback/station/{data}", server.HandleOrionPlayback)
|
||||
})
|
||||
|
||||
|
||||
@@ -0,0 +1,332 @@
|
||||
{
|
||||
"_links": {
|
||||
"bmx_search": {
|
||||
"filters": [],
|
||||
"href": "/v1/search?q={query}",
|
||||
"templated": true
|
||||
},
|
||||
"self": {
|
||||
"href": "/v1/navigate"
|
||||
}
|
||||
},
|
||||
"bmx_sections": [
|
||||
{
|
||||
"_links": {
|
||||
"self": {
|
||||
"href": "/v1/navigate/aHR0cHM6Ly9hcGkucmFkaW90aW1lLmNvbS9jYXRlZ29yaWVzL2xvY2FsP3NlcmlhbD1jY2JlOTM0My1iNjQxLTQyMzEtYWFhMC05Mjc1MGY2OGMyNjcmdmVyc2lvbj0xLjMmdmlld01vZGVsPUZhbHNlJml0ZW1Ub2tlbj1CZ2dJQUFJQUFnQUJBQUVBQVFFQUFRZ0FBQQ=="
|
||||
}
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
"_links": {
|
||||
"bmx_playback": {
|
||||
"href": "/v1/playback/station/s25260",
|
||||
"type": "stationurl"
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-profiles.tunein.com/s25260/images/logog.jpg?t=638151901560000000",
|
||||
"href": "/v1/playback/station/s25260",
|
||||
"name": "1LIVE",
|
||||
"type": "stationurl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-profiles.tunein.com/s25260/images/logog.jpg?t=638151901560000000",
|
||||
"name": "1LIVE",
|
||||
"subtitle": "Für den Sektor"
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_playback": {
|
||||
"href": "/v1/playback/station/s42828",
|
||||
"type": "stationurl"
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-profiles.tunein.com/s42828/images/logog.png?t=636575935889670000",
|
||||
"href": "/v1/playback/station/s42828",
|
||||
"name": "Deutschlandfunk",
|
||||
"type": "stationurl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-profiles.tunein.com/s42828/images/logog.png?t=636575935889670000",
|
||||
"name": "Deutschlandfunk",
|
||||
"subtitle": "Soundcheck"
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_playback": {
|
||||
"href": "/v1/playback/station/s213886",
|
||||
"type": "stationurl"
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-profiles.tunein.com/s213886/images/logog.jpg?t=639098687370000000",
|
||||
"href": "/v1/playback/station/s213886",
|
||||
"name": "WDR 2 Rheinland",
|
||||
"type": "stationurl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-profiles.tunein.com/s213886/images/logog.jpg?t=639098687370000000",
|
||||
"name": "WDR 2 Rheinland",
|
||||
"subtitle": "Wir sind der Westen"
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_playback": {
|
||||
"href": "/v1/playback/station/s16252",
|
||||
"type": "stationurl"
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-profiles.tunein.com/s16252/images/logog.png?t=636674275828970000",
|
||||
"href": "/v1/playback/station/s16252",
|
||||
"name": "Radio Köln",
|
||||
"type": "stationurl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-profiles.tunein.com/s16252/images/logog.png?t=636674275828970000",
|
||||
"name": "Radio Köln",
|
||||
"subtitle": "News, Wetter, Verkehr und der beste Mix"
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_playback": {
|
||||
"href": "/v1/playback/station/s99166",
|
||||
"type": "stationurl"
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-profiles.tunein.com/s99166/images/logog.jpg?t=639098688990000000",
|
||||
"href": "/v1/playback/station/s99166",
|
||||
"name": "WDR 2 Ruhrgebiet",
|
||||
"type": "stationurl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-profiles.tunein.com/s99166/images/logog.jpg?t=639098688990000000",
|
||||
"name": "WDR 2 Ruhrgebiet",
|
||||
"subtitle": "Wir sind der Westen"
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_playback": {
|
||||
"href": "/v1/playback/station/s20301",
|
||||
"type": "stationurl"
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-profiles.tunein.com/s20301/images/logog.jpg?t=639083982470000000",
|
||||
"href": "/v1/playback/station/s20301",
|
||||
"name": "WDR 5",
|
||||
"type": "stationurl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-profiles.tunein.com/s20301/images/logog.jpg?t=639083982470000000",
|
||||
"name": "WDR 5",
|
||||
"subtitle": "WDR 5 - Mitreden. Mitfühlen. Miterleben."
|
||||
}
|
||||
],
|
||||
"layout": "ribbon",
|
||||
"name": "Local Radio"
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"self": {
|
||||
"href": "/v1/navigate/aHR0cHM6Ly9hcGkucmFkaW90aW1lLmNvbS9jYXRlZ29yaWVzL3RyZW5kaW5nP3NlcmlhbD1jY2JlOTM0My1iNjQxLTQyMzEtYWFhMC05Mjc1MGY2OGMyNjcmdmVyc2lvbj0xLjMmdmlld01vZGVsPUZhbHNlJml0ZW1Ub2tlbj1CZ2dJQUFZQUJnQUJBQUVBQVFFQUFRZ0FBQQ=="
|
||||
}
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
"_links": {
|
||||
"bmx_playback": {
|
||||
"href": "/v1/playback/station/s110052",
|
||||
"type": "stationurl"
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-profiles.tunein.com/s110052/images/logog.jpg?t=639015950340000000",
|
||||
"href": "/v1/playback/station/s110052",
|
||||
"name": "CNBC",
|
||||
"type": "stationurl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-profiles.tunein.com/s110052/images/logog.jpg?t=639015950340000000",
|
||||
"name": "CNBC",
|
||||
"subtitle": "Unlocked #105 - Southern Mansion & Tiny Home CNULK00105R1H"
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_playback": {
|
||||
"href": "/v1/playback/station/s7016",
|
||||
"type": "stationurl"
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-profiles.tunein.com/s7016/images/logog.png?t=637977437790000000",
|
||||
"href": "/v1/playback/station/s7016",
|
||||
"name": "ABC NewsRadio",
|
||||
"type": "stationurl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-profiles.tunein.com/s7016/images/logog.png?t=637977437790000000",
|
||||
"name": "ABC NewsRadio",
|
||||
"subtitle": "Continuous national coverage of opinion-free, independent and fa"
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_playback": {
|
||||
"href": "/v1/playback/station/s20431",
|
||||
"type": "stationurl"
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-profiles.tunein.com/s20431/images/logog.jpg?t=638113795120000000",
|
||||
"href": "/v1/playback/station/s20431",
|
||||
"name": "FOX News Radio",
|
||||
"type": "stationurl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-profiles.tunein.com/s20431/images/logog.jpg?t=638113795120000000",
|
||||
"name": "FOX News Radio",
|
||||
"subtitle": "Kennedy Saves the World"
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_playback": {
|
||||
"href": "/v1/playback/station/s24939",
|
||||
"type": "stationurl"
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-profiles.tunein.com/s24939/images/logog.png?t=639107339520000000",
|
||||
"href": "/v1/playback/station/s24939",
|
||||
"name": "BBC Radio 1",
|
||||
"type": "stationurl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-profiles.tunein.com/s24939/images/logog.png?t=639107339520000000",
|
||||
"name": "BBC Radio 1",
|
||||
"subtitle": "The biggest new pop and all-day vibes"
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_playback": {
|
||||
"href": "/v1/playback/station/s3022",
|
||||
"type": "stationurl"
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-profiles.tunein.com/s3022/images/logog.jpg?t=637281897030000000",
|
||||
"href": "/v1/playback/station/s3022",
|
||||
"name": "CNA938",
|
||||
"type": "stationurl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-profiles.tunein.com/s3022/images/logog.jpg?t=637281897030000000",
|
||||
"name": "CNA938",
|
||||
"subtitle": "Asia First Weekend with Justine Moss"
|
||||
}
|
||||
],
|
||||
"layout": "ribbon",
|
||||
"name": "Trending"
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"self": {
|
||||
"href": "/v1/navigate/aHR0cHM6Ly9hcGkucmFkaW90aW1lLmNvbS9jYXRlZ29yaWVzL3Nwb3J0cz9zZXJpYWw9Y2NiZTkzNDMtYjY0MS00MjMxLWFhYTAtOTI3NTBmNjhjMjY3JnZlcnNpb249MS4zJnZpZXdNb2RlbD1GYWxzZSZpdGVtVG9rZW49QmdnSUFBZ0FDQUFCQUFFQUFRRUFBUWdBQUE="
|
||||
}
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
"_links": {
|
||||
"bmx_playback": {
|
||||
"href": "/v1/playback/station/s354710",
|
||||
"type": "stationurl"
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-profiles.tunein.com/z8181/images/logog.jpg?t=639107567180000000",
|
||||
"href": "/v1/playback/station/s354710",
|
||||
"name": "Download the free TuneIn app",
|
||||
"type": "stationurl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-profiles.tunein.com/z8181/images/logog.jpg?t=639107567180000000",
|
||||
"name": "Download the free TuneIn app",
|
||||
"subtitle": "Download the free TuneIn app"
|
||||
}
|
||||
],
|
||||
"layout": "ribbon",
|
||||
"name": "Sports"
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"self": {
|
||||
"href": "/v1/navigate/"
|
||||
}
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
"_links": {
|
||||
"bmx_navigate": {
|
||||
"href": "/v1/navigate/aHR0cHM6Ly9hcGkucmFkaW90aW1lLmNvbS9jYXRlZ29yaWVzL2MxMDAwMzU1MjY_c2VyaWFsPWNjYmU5MzQzLWI2NDEtNDIzMS1hYWEwLTkyNzUwZjY4YzI2NyZ2ZXJzaW9uPTEuMyZ2aWV3TW9kZWw9RmFsc2UmaXRlbVRva2VuPUJnZ0lBQVFBQkFBQkFBRUFBUUVBQVFnQUFB"
|
||||
}
|
||||
},
|
||||
"imageUrl": "https://media.bose.io/bmx-icons/tunein/top-menu/speaker.png",
|
||||
"name": "Apple Music Radio Stations",
|
||||
"subtitle": ""
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_navigate": {
|
||||
"href": "/v1/navigate/aHR0cHM6Ly9hcGkucmFkaW90aW1lLmNvbS9jYXRlZ29yaWVzL2MxMDAwMDAwODg_c2VyaWFsPWNjYmU5MzQzLWI2NDEtNDIzMS1hYWEwLTkyNzUwZjY4YzI2NyZ2ZXJzaW9uPTEuMyZ2aWV3TW9kZWw9RmFsc2UmaXRlbVRva2VuPUJnZ0lBQVVBQlFBQkFBRUFBUUVBQVFnQUFB"
|
||||
}
|
||||
},
|
||||
"imageUrl": "https://media.bose.io/bmx-icons/tunein/top-menu/podcasts.png",
|
||||
"name": "Podcasts",
|
||||
"subtitle": ""
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_navigate": {
|
||||
"href": "/v1/navigate/aHR0cHM6Ly9hcGkucmFkaW90aW1lLmNvbS9jYXRlZ29yaWVzL211c2ljP3NlcmlhbD1jY2JlOTM0My1iNjQxLTQyMzEtYWFhMC05Mjc1MGY2OGMyNjcmdmVyc2lvbj0xLjMmdmlld01vZGVsPUZhbHNlJml0ZW1Ub2tlbj1CZ2dJQUFjQUJ3QUJBQUVBQVFFQUFRZ0FBQQ=="
|
||||
}
|
||||
},
|
||||
"imageUrl": "https://media.bose.io/bmx-icons/tunein/top-menu/note.png",
|
||||
"name": "Music",
|
||||
"subtitle": ""
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_navigate": {
|
||||
"href": "/v1/navigate/aHR0cHM6Ly9hcGkucmFkaW90aW1lLmNvbS9jYXRlZ29yaWVzL2M1NzkyMj9zZXJpYWw9Y2NiZTkzNDMtYjY0MS00MjMxLWFhYTAtOTI3NTBmNjhjMjY3JnZlcnNpb249MS4zJnZpZXdNb2RlbD1GYWxzZSZpdGVtVG9rZW49QmdnSUFBa0FDUUFCQUFFQUFRRUFBUWdBQUE="
|
||||
}
|
||||
},
|
||||
"imageUrl": "https://media.bose.io/bmx-icons/tunein/top-menu/news.png",
|
||||
"name": "News & Talk",
|
||||
"subtitle": ""
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_navigate": {
|
||||
"href": "/v1/navigate/aHR0cHM6Ly9hcGkucmFkaW90aW1lLmNvbS9jYXRlZ29yaWVzL3RhbGs_c2VyaWFsPWNjYmU5MzQzLWI2NDEtNDIzMS1hYWEwLTkyNzUwZjY4YzI2NyZ2ZXJzaW9uPTEuMyZ2aWV3TW9kZWw9RmFsc2UmaXRlbVRva2VuPUJnZ0lBQW9BQ2dBQkFBRUFBUUVBQVFnQUFB"
|
||||
}
|
||||
},
|
||||
"imageUrl": "https://media.bose.io/bmx-icons/tunein/top-menu/microphone.png",
|
||||
"name": "Talk",
|
||||
"subtitle": ""
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_navigate": {
|
||||
"href": "/v1/navigate/aHR0cHM6Ly9hcGkucmFkaW90aW1lLmNvbS9jYXRlZ29yaWVzL3JlZ2lvbnM_c2VyaWFsPWNjYmU5MzQzLWI2NDEtNDIzMS1hYWEwLTkyNzUwZjY4YzI2NyZ2ZXJzaW9uPTEuMyZ2aWV3TW9kZWw9RmFsc2UmaXRlbVRva2VuPUJnZ0lBQXNBQ3dBQkFBRUFBUUVBQVFnQUFB"
|
||||
}
|
||||
},
|
||||
"imageUrl": "https://media.bose.io/bmx-icons/tunein/top-menu/location.png",
|
||||
"name": "By Location",
|
||||
"subtitle": ""
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_navigate": {
|
||||
"href": "/v1/navigate/aHR0cHM6Ly9hcGkucmFkaW90aW1lLmNvbS9jYXRlZ29yaWVzL2xhbmd1YWdlcz9zZXJpYWw9Y2NiZTkzNDMtYjY0MS00MjMxLWFhYTAtOTI3NTBmNjhjMjY3JnZlcnNpb249MS4zJnZpZXdNb2RlbD1GYWxzZSZpdGVtVG9rZW49QmdnSUFBd0FEQUFCQUFFQUFRRUFBUWdBQUE="
|
||||
}
|
||||
},
|
||||
"imageUrl": "https://media.bose.io/bmx-icons/tunein/top-menu/bubble.png",
|
||||
"name": "By Language",
|
||||
"subtitle": ""
|
||||
}
|
||||
],
|
||||
"name": ""
|
||||
}
|
||||
],
|
||||
"layout": "classic"
|
||||
}
|
||||
@@ -0,0 +1,437 @@
|
||||
{
|
||||
"_links": {
|
||||
"self": {
|
||||
"href": "/v1/search?q=music"
|
||||
}
|
||||
},
|
||||
"bmx_sections": [
|
||||
{
|
||||
"_links": {
|
||||
"self": {
|
||||
"href": "/v1/navigate/aHR0cHM6Ly9hcGkucmFkaW90aW1lLmNvbS9wcm9maWxlcz9mdWxsdGV4dFNlYXJjaD10cnVlJmZpbHRlcj1wJTNBc2hvdyZxdWVyeT1tdXNpYyZzZXJpYWw9Y2NiZTkzNDMtYjY0MS00MjMxLWFhYTAtOTI3NTBmNjhjMjY3JnZlcnNpb249MS4zJml0ZW1Ub2tlbj1CZ1FFQUFFQUFRQUFBQUFBREF3QUFRUVRWZ0FBQUJOV0FBQUE="
|
||||
}
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
"_links": {
|
||||
"bmx_navigate": {
|
||||
"href": "/v1/navigate/profiles/Program/p783819/aHR0cHM6Ly9hcGkucmFkaW90aW1lLmNvbS9wcm9maWxlcy9wNzgzODE5P3NlcmlhbD1jY2JlOTM0My1iNjQxLTQyMzEtYWFhMC05Mjc1MGY2OGMyNjcmdmVyc2lvbj0xLjMmaXRlbVRva2VuPUJnUUVBQUVBQVFBQkFBRUFEQXdBQVFRVFZnQUFBQk5XQUFBQQ=="
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-profiles.tunein.com/p783819/images/logog.png?t=637208895200000000",
|
||||
"href": "/v1/preset/program/p783819",
|
||||
"name": "Must-Hear Music",
|
||||
"type": "tracklisturl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-profiles.tunein.com/p783819/images/logog.png?t=637208895200000000",
|
||||
"name": "Must-Hear Music",
|
||||
"subtitle": "Billboard staffers discuss new music from artists across a variety of genres.Hosted on Acast. See acast.com/privacy for more information."
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_navigate": {
|
||||
"href": "/v1/navigate/profiles/Program/p813639/aHR0cHM6Ly9hcGkucmFkaW90aW1lLmNvbS9wcm9maWxlcy9wODEzNjM5P3NlcmlhbD1jY2JlOTM0My1iNjQxLTQyMzEtYWFhMC05Mjc1MGY2OGMyNjcmdmVyc2lvbj0xLjMmaXRlbVRva2VuPUJnUUVBQUlBQWdBQkFBRUFEQXdBQVFRVFZnQUFBQk5XQUFBQQ=="
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-profiles.tunein.com/p813639/images/logog.png?t=635834647084430000",
|
||||
"href": "/v1/preset/program/p813639",
|
||||
"name": "Music Awards 2016",
|
||||
"type": "tracklisturl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-profiles.tunein.com/p813639/images/logog.png?t=635834647084430000",
|
||||
"name": "Music Awards 2016",
|
||||
"subtitle": "United States"
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_navigate": {
|
||||
"href": "/v1/navigate/profiles/Program/p967555/aHR0cHM6Ly9hcGkucmFkaW90aW1lLmNvbS9wcm9maWxlcy9wOTY3NTU1P3NlcmlhbD1jY2JlOTM0My1iNjQxLTQyMzEtYWFhMC05Mjc1MGY2OGMyNjcmdmVyc2lvbj0xLjMmaXRlbVRva2VuPUJnUUVBQU1BQXdBQkFBRUFEQXdBQVFRVFZnQUFBQk5XQUFBQQ=="
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-profiles.tunein.com/p967555/images/logog.png?t=637217441150000000",
|
||||
"href": "/v1/preset/program/p967555",
|
||||
"name": "The Great Albums",
|
||||
"type": "tracklisturl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-profiles.tunein.com/p967555/images/logog.png?t=637217441150000000",
|
||||
"name": "The Great Albums",
|
||||
"subtitle": "Two indie rock musicians, Bill Lambusta and Brian Erickson, dive into great rock and pop music through the lens of the medium they care for most - the album. Every episode features a track-by-track review, discussions about the sounds they love, and..."
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_navigate": {
|
||||
"href": "/v1/navigate/profiles/Program/p939903/aHR0cHM6Ly9hcGkucmFkaW90aW1lLmNvbS9wcm9maWxlcy9wOTM5OTAzP3NlcmlhbD1jY2JlOTM0My1iNjQxLTQyMzEtYWFhMC05Mjc1MGY2OGMyNjcmdmVyc2lvbj0xLjMmaXRlbVRva2VuPUJnUUVBQVFBQkFBQkFBRUFEQXdBQVFRVFZnQUFBQk5XQUFBQQ=="
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-profiles.tunein.com/p939903/images/logog.png?t=638291015710000000",
|
||||
"href": "/v1/preset/program/p939903",
|
||||
"name": "He Sang/She Sang",
|
||||
"type": "tracklisturl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-profiles.tunein.com/p939903/images/logog.png?t=638291015710000000",
|
||||
"name": "He Sang/She Sang",
|
||||
"subtitle": "He Sang/She Sang is a new podcast from WQXR for the opera-curious and opera superfans who want to know what all those big voices are really singing about. The podcast follows the radio broadcast season of the Metropolitan Opera with a weekly..."
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_navigate": {
|
||||
"href": "/v1/navigate/profiles/Program/p860133/aHR0cHM6Ly9hcGkucmFkaW90aW1lLmNvbS9wcm9maWxlcy9wODYwMTMzP3NlcmlhbD1jY2JlOTM0My1iNjQxLTQyMzEtYWFhMC05Mjc1MGY2OGMyNjcmdmVyc2lvbj0xLjMmaXRlbVRva2VuPUJnUUVBQVVBQlFBQkFBRUFEQXdBQVFRVFZnQUFBQk5XQUFBQQ=="
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-profiles.tunein.com/p860133/images/logog.png?t=638863003740000000",
|
||||
"href": "/v1/preset/program/p860133",
|
||||
"name": "Drink Champs",
|
||||
"type": "tracklisturl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-profiles.tunein.com/p860133/images/logog.png?t=638863003740000000",
|
||||
"name": "Drink Champs",
|
||||
"subtitle": "Legendary Queens rapper-turned show host N.O.R.E. teams up with Miami hip-hop pioneer DJ EFN for a night of boozy conversation and boisterous storytelling. The hosts and guests engage together in fun, light-hearted conversation - looking back at their..."
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_navigate": {
|
||||
"href": "/v1/navigate/profiles/Program/p4696142/aHR0cHM6Ly9hcGkucmFkaW90aW1lLmNvbS9wcm9maWxlcy9wNDY5NjE0Mj9zZXJpYWw9Y2NiZTkzNDMtYjY0MS00MjMxLWFhYTAtOTI3NTBmNjhjMjY3JnZlcnNpb249MS4zJml0ZW1Ub2tlbj1CZ1FFQUFZQUJnQUJBQUVBREF3QUFRUVRWZ0FBQUJOV0FBQUE="
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-profiles.tunein.com/p4696142/images/logog.png?t=639004873490000000",
|
||||
"href": "/v1/preset/program/p4696142",
|
||||
"name": "Les pepites musicales de RFI",
|
||||
"type": "tracklisturl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-profiles.tunein.com/p4696142/images/logog.png?t=639004873490000000",
|
||||
"name": "Les pepites musicales de RFI",
|
||||
"subtitle": "Toute l’année, nos reporters croisent des artistes du continent et d’ailleurs. Dans leurs maisons, dans les coulisses des concerts, les chambres d’hôtel ou dans la rue se nouent des rencontres uniques où l’on parle de soi, du son et du monde. RFI vous..."
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_navigate": {
|
||||
"href": "/v1/navigate/profiles/Program/p4696122/aHR0cHM6Ly9hcGkucmFkaW90aW1lLmNvbS9wcm9maWxlcy9wNDY5NjEyMj9zZXJpYWw9Y2NiZTkzNDMtYjY0MS00MjMxLWFhYTAtOTI3NTBmNjhjMjY3JnZlcnNpb249MS4zJml0ZW1Ub2tlbj1CZ1FFQUFjQUJ3QUJBQUVBREF3QUFRUVRWZ0FBQUJOV0FBQUE="
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-profiles.tunein.com/p4696122/images/logog.png?t=639004867290000000",
|
||||
"href": "/v1/preset/program/p4696122",
|
||||
"name": "Afro-Club et Afro-Club Deluxe",
|
||||
"type": "tracklisturl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-profiles.tunein.com/p4696122/images/logog.png?t=639004867290000000",
|
||||
"name": "Afro-Club et Afro-Club Deluxe",
|
||||
"subtitle": "Le son de la nouvelle génération sur RFI ! À partir du 30/3/2026, du lundi au vendredi, de 20h10 à 21h00 TU, DJ Face Maker (Hervé Mandina) vous donne accès au Top 20 des artistes d'Afrique, des Caraïbes et des diasporas afros qui font vibrer les..."
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_navigate": {
|
||||
"href": "/v1/navigate/profiles/Program/p4696123/aHR0cHM6Ly9hcGkucmFkaW90aW1lLmNvbS9wcm9maWxlcy9wNDY5NjEyMz9zZXJpYWw9Y2NiZTkzNDMtYjY0MS00MjMxLWFhYTAtOTI3NTBmNjhjMjY3JnZlcnNpb249MS4zJml0ZW1Ub2tlbj1CZ1FFQUFnQUNBQUJBQUVBREF3QUFRUVRWZ0FBQUJOV0FBQUE="
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-profiles.tunein.com/p4696123/images/logog.png?t=639004867620000000",
|
||||
"href": "/v1/preset/program/p4696123",
|
||||
"name": "Bonnes Pulsations du Monde",
|
||||
"type": "tracklisturl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-profiles.tunein.com/p4696123/images/logog.png?t=639004867620000000",
|
||||
"name": "Bonnes Pulsations du Monde",
|
||||
"subtitle": "BPM – Bonnes Pulsations du Monde, c’est une sélection de chansons qui font l’actualité sur les 5 continents. D’Abidjan à Caracas, de Paris à Shanghai, qu’est-ce qui fait vibrer la planète ? Une fois par mois, BPM vous emmène à la rencontre d’un..."
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_navigate": {
|
||||
"href": "/v1/navigate/profiles/Program/p1119668/aHR0cHM6Ly9hcGkucmFkaW90aW1lLmNvbS9wcm9maWxlcy9wMTExOTY2OD9zZXJpYWw9Y2NiZTkzNDMtYjY0MS00MjMxLWFhYTAtOTI3NTBmNjhjMjY3JnZlcnNpb249MS4zJml0ZW1Ub2tlbj1CZ1FFQUFrQUNRQUJBQUVBREF3QUFRUVRWZ0FBQUJOV0FBQUE="
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-profiles.tunein.com/p1119668/images/logog.png?t=636592099583900000",
|
||||
"href": "/v1/preset/program/p1119668",
|
||||
"name": "Y'all Access",
|
||||
"type": "tracklisturl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-profiles.tunein.com/p1119668/images/logog.png?t=636592099583900000",
|
||||
"name": "Y'all Access",
|
||||
"subtitle": "Kelly Sutton has your All Access pass to all the VIP events around Music City! Party hop, hit the red carpets and go behind the scenes thanks to your \"Y'all Access\" pass!"
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_navigate": {
|
||||
"href": "/v1/navigate/profiles/Program/p946296/aHR0cHM6Ly9hcGkucmFkaW90aW1lLmNvbS9wcm9maWxlcy9wOTQ2Mjk2P3NlcmlhbD1jY2JlOTM0My1iNjQxLTQyMzEtYWFhMC05Mjc1MGY2OGMyNjcmdmVyc2lvbj0xLjMmaXRlbVRva2VuPUJnUUVBQW9BQ2dBQkFBRUFEQXdBQVFRVFZnQUFBQk5XQUFBQQ=="
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-profiles.tunein.com/p946296/images/logog.png?t=638360999970000000",
|
||||
"href": "/v1/preset/program/p946296",
|
||||
"name": "The Popcast With Knox and Jamie",
|
||||
"type": "tracklisturl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-profiles.tunein.com/p946296/images/logog.png?t=638360999970000000",
|
||||
"name": "The Popcast With Knox and Jamie",
|
||||
"subtitle": "A weekly pop culture podcast seeking to educate on things that entertain, but do not matter.Hosted on Acast. See acast.com/privacy for more information."
|
||||
}
|
||||
],
|
||||
"layout": "shortList",
|
||||
"name": "Shows"
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"self": {
|
||||
"href": "/v1/navigate/aHR0cHM6Ly9hcGkucmFkaW90aW1lLmNvbS9wcm9maWxlcz9mdWxsdGV4dFNlYXJjaD10cnVlJmZpbHRlcj1zJnF1ZXJ5PW11c2ljJnNlcmlhbD1jY2JlOTM0My1iNjQxLTQyMzEtYWFhMC05Mjc1MGY2OGMyNjcmdmVyc2lvbj0xLjMmaXRlbVRva2VuPUJnUUVBQUlBQWdBQUFBQUFDd3NBQVFRVFZRQUFBQk5WQUFBQQ=="
|
||||
}
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
"_links": {
|
||||
"bmx_playback": {
|
||||
"href": "/v1/playback/station/s309467",
|
||||
"type": "stationurl"
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-profiles.tunein.com/s309467/images/logog.jpg?t=637348332440000000",
|
||||
"href": "/v1/playback/station/s309467",
|
||||
"name": "Kidsradio.com",
|
||||
"type": "stationurl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-profiles.tunein.com/s309467/images/logog.jpg?t=637348332440000000",
|
||||
"name": "Kidsradio.com",
|
||||
"subtitle": "Greece"
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_playback": {
|
||||
"href": "/v1/playback/station/s301791",
|
||||
"type": "stationurl"
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-profiles.tunein.com/s301791/images/logog.png?t=636480577103430000",
|
||||
"href": "/v1/playback/station/s301791",
|
||||
"name": "90s90s Dance",
|
||||
"type": "stationurl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-profiles.tunein.com/s301791/images/logog.png?t=636480577103430000",
|
||||
"name": "90s90s Dance",
|
||||
"subtitle": "90s90s Dance: Der Dancesound der 90er."
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_playback": {
|
||||
"href": "/v1/playback/station/s281990",
|
||||
"type": "stationurl"
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-profiles.tunein.com/s281990/images/logog.png?t=638156899930000000",
|
||||
"href": "/v1/playback/station/s281990",
|
||||
"name": "90s90s DAB",
|
||||
"type": "stationurl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-profiles.tunein.com/s281990/images/logog.png?t=638156899930000000",
|
||||
"name": "90s90s DAB",
|
||||
"subtitle": "90s90s ist das Radio für den coolen Sound der 90er. Deutschlandweit im Digitalradio DAB+"
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_playback": {
|
||||
"href": "/v1/playback/station/s308474",
|
||||
"type": "stationurl"
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-profiles.tunein.com/s308474/images/logog.png?t=637014668910000000",
|
||||
"href": "/v1/playback/station/s308474",
|
||||
"name": "90s90s In The Mix",
|
||||
"type": "stationurl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-profiles.tunein.com/s308474/images/logog.png?t=637014668910000000",
|
||||
"name": "90s90s In The Mix",
|
||||
"subtitle": "90s90s In The Mix: Der Sound der 90er nonstop gemixt – das Real 90s-DJ-Radio"
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_playback": {
|
||||
"href": "/v1/playback/station/s323852",
|
||||
"type": "stationurl"
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-profiles.tunein.com/s323852/images/logog.png?t=638197456570000000",
|
||||
"href": "/v1/playback/station/s323852",
|
||||
"name": "90s90s DANCE RADIO",
|
||||
"type": "stationurl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-profiles.tunein.com/s323852/images/logog.png?t=638197456570000000",
|
||||
"name": "90s90s DANCE RADIO",
|
||||
"subtitle": "Kein Musikstil hat die Musikszene Deutschlands und das Leben von jungen Menschen so geprägt wie der"
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_playback": {
|
||||
"href": "/v1/playback/station/s306625",
|
||||
"type": "stationurl"
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-profiles.tunein.com/s306625/images/logog.png?t=636673358641530000",
|
||||
"href": "/v1/playback/station/s306625",
|
||||
"name": "90s90s Techno",
|
||||
"type": "stationurl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-profiles.tunein.com/s306625/images/logog.png?t=636673358641530000",
|
||||
"name": "90s90s Techno",
|
||||
"subtitle": "Die Geburtsstunde von Techno - der typische 90s-Dancesound in ei"
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_playback": {
|
||||
"href": "/v1/playback/station/s174864",
|
||||
"type": "stationurl"
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-radiotime-logos.tunein.com/s174864g.png",
|
||||
"href": "/v1/playback/station/s174864",
|
||||
"name": "Highway 65 Radio",
|
||||
"type": "stationurl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-radiotime-logos.tunein.com/s174864g.png",
|
||||
"name": "Highway 65 Radio",
|
||||
"subtitle": "Connecting listeners to the Country Music scene and lifestyle"
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_playback": {
|
||||
"href": "/v1/playback/station/s323853",
|
||||
"type": "stationurl"
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-profiles.tunein.com/s323853/images/logog.png?t=638197456800000000",
|
||||
"href": "/v1/playback/station/s323853",
|
||||
"name": "80s80s DANCE",
|
||||
"type": "stationurl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-profiles.tunein.com/s323853/images/logog.png?t=638197456800000000",
|
||||
"name": "80s80s DANCE",
|
||||
"subtitle": "80s80s DANCE liefert den perfekten Dance-Sound aus den 80ern in einem eigenen Radio."
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_playback": {
|
||||
"href": "/v1/playback/station/s306908",
|
||||
"type": "stationurl"
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-profiles.tunein.com/s306908/images/logog.png?t=636758140220000000",
|
||||
"href": "/v1/playback/station/s306908",
|
||||
"name": "90s90s RnB",
|
||||
"type": "stationurl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-profiles.tunein.com/s306908/images/logog.png?t=636758140220000000",
|
||||
"name": "90s90s RnB",
|
||||
"subtitle": "Hip-Hop-Soul, neuer Funk und ein Schwung sexuell aufgeladener Ja"
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_playback": {
|
||||
"href": "/v1/playback/station/s306584",
|
||||
"type": "stationurl"
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-profiles.tunein.com/s306584/images/logog.png?t=636643926846930000",
|
||||
"href": "/v1/playback/station/s306584",
|
||||
"name": "90s90s Grunge",
|
||||
"type": "stationurl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-profiles.tunein.com/s306584/images/logog.png?t=636643926846930000",
|
||||
"name": "90s90s Grunge",
|
||||
"subtitle": "Wütende Musik der 90er: Grunge. Was in Seattle in den USA begann"
|
||||
}
|
||||
],
|
||||
"layout": "shortList",
|
||||
"name": "Stations"
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"self": {
|
||||
"href": "/v1/navigate/sub/2/aHR0cHM6Ly9hcGkucmFkaW90aW1lLmNvbS9wcm9maWxlcz9mdWxsdGV4dHNlYXJjaD10cnVlJnZlcnNpb249MS4zJnNlcmlhbD1jY2JlOTM0My1iNjQxLTQyMzEtYWFhMC05Mjc1MGY2OGMyNjcmcXVlcnk9bXVzaWM="
|
||||
}
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
"_links": {
|
||||
"bmx_navigate": {
|
||||
"href": "/v1/navigate/profiles/Artist/m1038098/aHR0cHM6Ly9hcGkucmFkaW90aW1lLmNvbS9wcm9maWxlcy9tMTAzODA5OD9zZXJpYWw9Y2NiZTkzNDMtYjY0MS00MjMxLWFhYTAtOTI3NTBmNjhjMjY3JnZlcnNpb249MS4zJml0ZW1Ub2tlbj1CZ1FFQUFFQUFRQURBQU1BRGc0QUFRUVRDd0FBQUJNTEFBQUE="
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-radiotime-logos.tunein.com/s0q.png",
|
||||
"href": "/v1/preset/program/m1038098",
|
||||
"name": "Music Music Music",
|
||||
"type": "tracklisturl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-radiotime-logos.tunein.com/s0q.png",
|
||||
"name": "Music Music Music",
|
||||
"subtitle": "Gospel, Caribbean Music"
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_navigate": {
|
||||
"href": "/v1/navigate/profiles/Artist/m1444080/aHR0cHM6Ly9hcGkucmFkaW90aW1lLmNvbS9wcm9maWxlcy9tMTQ0NDA4MD9zZXJpYWw9Y2NiZTkzNDMtYjY0MS00MjMxLWFhYTAtOTI3NTBmNjhjMjY3JnZlcnNpb249MS4zJml0ZW1Ub2tlbj1CZ1FFQUFJQUFnQURBQU1BRGc0QUFRUVRDd0FBQUJNTEFBQUE="
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-radiotime-logos.tunein.com/s0q.png",
|
||||
"href": "/v1/preset/program/m1444080",
|
||||
"name": "No Music",
|
||||
"type": "tracklisturl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-radiotime-logos.tunein.com/s0q.png",
|
||||
"name": "No Music",
|
||||
"subtitle": "Variety"
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_navigate": {
|
||||
"href": "/v1/navigate/profiles/Artist/m236951/aHR0cHM6Ly9hcGkucmFkaW90aW1lLmNvbS9wcm9maWxlcy9tMjM2OTUxP3NlcmlhbD1jY2JlOTM0My1iNjQxLTQyMzEtYWFhMC05Mjc1MGY2OGMyNjcmdmVyc2lvbj0xLjMmaXRlbVRva2VuPUJnUUVBQU1BQXdBREFBTUFEZzRBQVFRVEN3QUFBQk1MQUFBQQ=="
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-albums.tunein.com/gn/40QJ66TZ3Wq.jpg",
|
||||
"href": "/v1/preset/program/m236951",
|
||||
"name": "The Music",
|
||||
"type": "tracklisturl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-albums.tunein.com/gn/40QJ66TZ3Wq.jpg",
|
||||
"name": "The Music",
|
||||
"subtitle": "Gospel, Rock"
|
||||
},
|
||||
{
|
||||
"_links": {
|
||||
"bmx_navigate": {
|
||||
"href": "/v1/navigate/profiles/Artist/m404700/aHR0cHM6Ly9hcGkucmFkaW90aW1lLmNvbS9wcm9maWxlcy9tNDA0NzAwP3NlcmlhbD1jY2JlOTM0My1iNjQxLTQyMzEtYWFhMC05Mjc1MGY2OGMyNjcmdmVyc2lvbj0xLjMmaXRlbVRva2VuPUJnUUVBQVFBQkFBREFBTUFEZzRBQVFRVEN3QUFBQk1MQUFBQQ=="
|
||||
},
|
||||
"bmx_preset": {
|
||||
"containerArt": "http://cdn-albums.tunein.com/gn/JDJC8456C0q.jpg",
|
||||
"href": "/v1/preset/program/m404700",
|
||||
"name": "Music Go Music",
|
||||
"type": "tracklisturl"
|
||||
}
|
||||
},
|
||||
"imageUrl": "http://cdn-albums.tunein.com/gn/JDJC8456C0q.jpg",
|
||||
"name": "Music Go Music",
|
||||
"subtitle": ""
|
||||
}
|
||||
],
|
||||
"layout": "shortList",
|
||||
"name": "Suggestions (Artist)"
|
||||
}
|
||||
],
|
||||
"layout": "classic"
|
||||
}
|
||||
Reference in New Issue
Block a user