├── .gitignore
├── README.rst
├── api
├── bookmarks.rst
├── examples
│ ├── firmware.res.xml
│ ├── login.res.xml
│ ├── menu.res.xml
│ ├── menuitem-dir.xml
│ ├── menuitem-display.xml
│ ├── menuitem-message.xml
│ ├── menuitem-previous.xml
│ ├── menuitem-search.xml
│ ├── menuitem-showepisode.xml
│ ├── menuitem-showondemand.xml
│ └── menuitem-station.xml
├── firmware.rst
├── general-info.rst
├── login.rst
├── menu.rst
├── menuitems.rst
└── servers.rst
├── build.sh
├── fetcher
└── fetch.php
└── styles.css
/.gitignore:
--------------------------------------------------------------------------------
1 | /fetcher/*
2 | /noxon-api.htm
3 | /samples
4 | /notes.rst
5 |
--------------------------------------------------------------------------------
/README.rst:
--------------------------------------------------------------------------------
1 | ************************
2 | Noxon iRadio gateway API
3 | ************************
4 |
5 | This is an attempt to document the API between Noxon iRadio devices
6 | and the servers at ``vtuner.com`` and ``my-noxon.net``.
7 |
8 | Noxon iRadio devices have a couple of hard-coded menu entries that
9 | connect to certain HTTP urls when accessing them:
10 |
11 | - Internetradio
12 | - Podcasts
13 | - My Noxon
14 |
15 | The server returns XML data representing menus that get shown
16 | on the radio.
17 | Menus consist of folders, audio URLs, unactionable message entries
18 | and popup messages.
19 |
20 |
21 | .. contents::
22 | :depth: 2
23 |
24 |
25 | ==============
26 | Devices tested
27 | ==============
28 | * Noxon iRadio (original white version)
29 | * Noxon iRadio cube
30 |
31 |
32 | .. include:: api/servers.rst
33 | .. include:: api/general-info.rst
34 | .. include:: api/login.rst
35 | .. include:: api/menu.rst
36 | .. include:: api/menuitems.rst
37 | .. include:: api/bookmarks.rst
38 | .. include:: api/firmware.rst
39 |
40 |
41 | =====
42 | About
43 | =====
44 | This documentation has been written by Christian Weiske,
45 | cweiske+noxon@cweiske.de.
46 |
47 | Last update: ##UPDATE##
48 |
49 |
50 | License
51 | =======
52 | It is licensed under the GNU Free Documentation License.
53 |
54 |
55 | Source code
56 | ===========
57 | The documentation sources are available at
58 | http://git.cweiske.de/noxon-api.git/
59 | and mirrored at
60 | https://github.com/cweiske/noxon-api
61 |
62 |
63 | Home page
64 | =========
65 | A rendered version of this documentation is available at
66 | http://cweiske.de/noxon-api.htm
67 |
68 |
69 |
70 | Building
71 | ========
72 | You need to install ``rst2html5`` before::
73 |
74 | $ pip install rst2html5-tools
75 |
76 | Rendering the docs is done via a build script::
77 |
78 | $ ./build.sh
79 |
--------------------------------------------------------------------------------
/api/bookmarks.rst:
--------------------------------------------------------------------------------
1 | =========
2 | Bookmarks
3 | =========
4 | Also known as "Favorites".
5 |
6 | FIXME.
7 |
--------------------------------------------------------------------------------
/api/examples/firmware.res.xml:
--------------------------------------------------------------------------------
1 |
2 | 3.8.36.6921
3 | 13062
4 |
5 | 0
6 | 3
7 | 8
8 | 0
9 | 6921
10 | http://apps.my-noxon.net/updates/dmp370/files/2009-05-08_NOXON_Cube_firmware_FW6921_HWID13062.bcd
11 | 0
12 | 0
13 | 0
14 |
15 |
16 |
--------------------------------------------------------------------------------
/api/examples/login.res.xml:
--------------------------------------------------------------------------------
1 | a6703ded78821be5
2 |
--------------------------------------------------------------------------------
/api/examples/menu.res.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -1
4 | -
5 | Dir
6 | Lokale Sender - Deutschland
7 | http://radio567.vtuner.com/setupapp/radio567/asp/browsexpa/navXML.asp?gofile=LocationLevelFour-Europe-Germany&bkLvl=LocationLevelFour-Europe-GermanyOObkLvlTypeOOl
8 | http://radio5672.vtuner.com/setupapp/radio567/asp/browsexpa/navXML.asp?gofile=LocationLevelFour-Europe-Germany&bkLvl=LocationLevelFour-Europe-GermanyOObkLvlTypeOOl
9 |
10 | -
11 | Dir
12 | Best of NOXON
13 | http://radio567.vtuner.com/setupapp/radio567/asp/browsexpa/bestXML.asp
14 | http://radio567.vtuner.com/setupapp/radio567/asp/browsexpa/bestXML.asp
15 |
16 |
17 |
--------------------------------------------------------------------------------
/api/examples/menuitem-dir.xml:
--------------------------------------------------------------------------------
1 | -
2 | Dir
3 | Best of NOXON
4 | http://radio567.vtuner.com/setupapp/radio567/asp/browsexpa/bestXML.asp
5 | http://radio567.vtuner.com/setupapp/radio567/asp/browsexpa/bestXML.asp
6 |
7 |
--------------------------------------------------------------------------------
/api/examples/menuitem-display.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 | Display
5 | Sicherheitscode
6 |
7 | -
8 | Display
9 | 0682
10 |
11 |
12 |
--------------------------------------------------------------------------------
/api/examples/menuitem-message.xml:
--------------------------------------------------------------------------------
1 | -
2 | Message
3 | Service unavailable
4 |
5 |
--------------------------------------------------------------------------------
/api/examples/menuitem-previous.xml:
--------------------------------------------------------------------------------
1 | -
2 | Previous
3 | http://radio567.vtuner.com/...
4 | http://radio5672.vtuner.com/..
5 |
6 |
--------------------------------------------------------------------------------
/api/examples/menuitem-search.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Yes
4 | 1
5 | -
6 | Search
7 | Suche
8 | http://192.168.0.1/usersearch.php?foo=bar
9 | http://192.168.0.1/usersearch.php?foo=bar
10 |
11 |
12 |
--------------------------------------------------------------------------------
/api/examples/menuitem-showepisode.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cweiske/noxon-api/876bc3eb96b34029e8a7616d2335de34eb26d6c7/api/examples/menuitem-showepisode.xml
--------------------------------------------------------------------------------
/api/examples/menuitem-showondemand.xml:
--------------------------------------------------------------------------------
1 | -
2 | ShowOnDemand
3 | P5031
4 | Inside Europe
5 | http://radio567.vtuner.com/setupapp/radio567/asp/browsexpa/GetShowXML.asp?showid=P5031&gofile=LocationLevelFive-Europe-Germany-AllStations-st526
6 | http://radio5672.vtuner.com/setupapp/radio567/asp/browsexpa/GetShowXML.asp?showid=P5031&gofile=LocationLevelFive-Europe-Germany-AllStations-st526
7 | http://radio567.vtuner.com/setupapp/radio567/asp/browsexpa/AddFav.asp?empty=&showid=P5031
8 |
9 |
--------------------------------------------------------------------------------
/api/examples/menuitem-station.xml:
--------------------------------------------------------------------------------
1 | -
2 | Station
3 | 526
4 | Deutsche Welle English Live
5 | http://radio567.vtuner.com/setupapp/radio567/asp/func/dynamOD.asp?ex45v=000000004C3B4B60322F&id=526
6 | DW's English service, bringing you global news from the heart of Europe.
7 | Public
8 | Germany
9 | 64
10 | MP3
11 | 3
12 | http://radio567.vtuner.com/setupapp/radio567/asp/browsexpa/AddFav.asp?empty=&stationid=526
13 | http://rs2.radiosetup.com/setupapp/setup1/logo/logo-526.jpg
14 |
15 |
--------------------------------------------------------------------------------
/api/firmware.rst:
--------------------------------------------------------------------------------
1 | ================
2 | Firmware updates
3 | ================
4 | I found the Noxon iRadio Cube request the following URL to check for
5 | the currently available firmware version:
6 |
7 | ``http://apps.my-noxon.net/updates/dmp370/update.php?mac=00307771a0c7&hwid=13062&ver=36.6921&bl=6856&dlang=ger``
8 |
9 | The MAC address is given in plain text here; it is not hashed/encrypted
10 | as in the "normal" menu requests.
11 |
12 | This seems to be a dedicated server, separate from the ones used
13 | for the menu.
14 |
15 | There is no login necessary to check firmware updates.
16 |
17 |
18 | Response
19 | ========
20 | The HTTP ``content-type`` header is again given as ``text/html``, but
21 | it's XML:
22 |
23 | .. include:: examples/firmware.res.xml
24 | :code:
25 |
--------------------------------------------------------------------------------
/api/general-info.rst:
--------------------------------------------------------------------------------
1 | ==============================
2 | General connection information
3 | ==============================
4 | The radios access the URLs via HTTP.
5 |
6 |
7 | XML menu response format
8 | ========================
9 | Menu responses are in XML format.
10 | The MIME type sent by the server does not matter; the official servers
11 | send ``text/html`` although it's clearly not HTML.
12 |
13 | The XML prolog (````) can be omitted.
14 |
15 | The XML data are interpreted by the radios with a charset of ``iso-8859-1``,
16 | no matter what the ``content-type`` header sent by the server or the XML
17 | prolog say.
18 |
19 | It is possible to add processing instructions to the XML without breaking
20 | the radio.
21 |
22 | XML tag attributes are not used.
23 |
--------------------------------------------------------------------------------
/api/login.rst:
--------------------------------------------------------------------------------
1 | =====
2 | Login
3 | =====
4 | Before menu data are requested, the radio obtains a token that is used
5 | to hash the MAC address in subsequent requests.
6 |
7 | The following URLs are used for requesting the "encryption token":
8 |
9 | Internetradio
10 | ``http://radio567.vtuner.com:80/setupapp/radio567/asp/BrowseXPA/LoginXML.asp?token=0``
11 | Podcasts
12 | ``http://radio567.vtuner.com:80/setupapp/radio567/asp/BrowseXPA/loginXML.asp?token=0``
13 | My Noxon
14 | ``http://gatekeeper.my-noxon.net:80/RadioNativeLogin.php``
15 |
16 |
17 | Response
18 | ========
19 | The response is an XML file with only one tag.
20 |
21 | .. include:: examples/login.res.xml
22 | :code:
23 |
--------------------------------------------------------------------------------
/api/menu.rst:
--------------------------------------------------------------------------------
1 | ====
2 | Menu
3 | ====
4 | After the ``encryptedToken`` has been obtained during the login process,
5 | the menu itself is fetched.
6 |
7 |
8 | Initial URLs
9 | ============
10 | The following URLs are used after login:
11 |
12 | Internetradio
13 | ``http://radio567.vtuner.com:80/setupapp/radio567/asp/BrowseXPA/LoginXML.asp?mac=6FD0281BB8B2C3D46ABB2A34CA9EF1CF&fver=3.8.36.6921&dlang=ger&hwid=13062&startitems=1&enditems=10``
14 | Podcasts
15 | ``http://radio567.vtuner.com:80/setupapp/radio567/asp/BrowseXPA/navXML.asp?gofile=S-ByLocation&mac=6FD0281BB8B2C3D46ABB2A34CA9EF1CF&fver=3.8.36.6921&dlang=ger&hwid=13062&startitems=1&enditems=10``
16 | My Noxon
17 | ``http://gatekeeper.my-noxon.net:80/RadioNative.php?hwid=13062&mac=6FD0281BB8B2C3D46ABB2A34CA9EF1CF&fver=3.8.36.6921&dlang=ger&startitems=1&enditems=10``
18 |
19 |
20 | GET parameters
21 | ==============
22 | The iRadio devices append a number of GET parameters to each menu URL:
23 |
24 | ``mac``
25 | MAC address of the device, hashed/encrypted with the ``encryptedToken``
26 | obtained during the login process.
27 |
28 | Example: ``6FD0281BB8B2C3D46ABB2A34CA9EF1CF``
29 | ``fver``
30 | Firmware version
31 |
32 | Example: ``3.8.36.6921``
33 | ``dlang``
34 | Language
35 |
36 | Example: ``ger``
37 | ``hwid``
38 | Hardware revision
39 |
40 | Example: ``13062``
41 | ``startitems``
42 | Paging settings; first menu entry to fetch.
43 |
44 | First entry is ``1``.
45 | ``enditems``
46 | Paging: Last menu entry to fetch
47 |
48 | Default: ``startitems + 9`` - ``10``
49 |
50 |
51 | Paging
52 | ======
53 | By default, the first 10 entries of a menu are requested.
54 |
55 | When the response contains an ```` tag, the last 10
56 | are fetched, and then 10-20.
57 |
58 | Example:
59 |
60 | #. Radio requests items ``1-10``
61 | #. Response has ```` of ``52``
62 | #. Radio requests items ``42-52``
63 | #. Radio requests items ``10-20``
64 |
65 | When scrolling to position ``11``, the radio requests ``19-29``.
66 |
67 | Scrolling further, ``28-38`` are fetched, then ``37-47``.
68 |
69 |
70 | Response
71 | ========
72 | XML file with a any number of menu entries.
73 |
74 | The XML root tag is ``ListOfItems``.
75 |
76 | A menu ```` can contain the following tags:
77 |
78 | ````
79 | Total number of items. Can be ``-1``.
80 |
81 | The ``Previous`` item is not counted.
82 |
83 | Optional.
84 | ``- ``
85 | Contains any number of ``
- `` tags.
86 | ````
87 | ??? Forces the radio to re-fetch the list when going back to it
88 | via the back (left arrow) button.
89 |
90 | Only known value: ``Yes``
91 |
92 | .. include:: examples/menu.res.xml
93 | :code:
94 |
--------------------------------------------------------------------------------
/api/menuitems.rst:
--------------------------------------------------------------------------------
1 | ==========
2 | Menu items
3 | ==========
4 | A menu ```` can contain the following tags:
5 |
6 |
7 | Item types
8 | ==========
9 | There are different types of menu entries. Their type is specified
10 | by the ```` tag:
11 |
12 | ``Dir``
13 | Directory you can navigate into
14 | ``Display``
15 | A message line you cannot act on, only read.
16 | ``Message``
17 | A full-screen message.
18 |
19 | It vanishes after some seconds and shows the rest of the list,
20 | or goes back to the previous list if there are no other
21 | list items.
22 |
23 | When entering from the iRadio's main menu and the rest of the
24 | list is empty, "--leer--" is shown (not going back to main menu).
25 | ``Previous``
26 | Link back to the parent folder.
27 | ``Search``
28 | Show a search mask with alphanumeric input.
29 | ``ShowEpisode``
30 | Single episode from a ``ShowOnDemand`` that you can hear, e.g. a single podcast
31 | episode.
32 | ``ShowOnDemand``
33 | Part of an internet station: A specific show about one topic or by a
34 | specific person.
35 |
36 | Also used for a single podcast.
37 | ``Station``
38 | An internet radio station (live stream).
39 |
40 | Types that yCast knows of, but none of them works at least on iRadio 300:
41 |
42 | - ``SearchTextbox``
43 | - ``SearchButtonGo``
44 | - ``SearchButtonCancel``
45 |
46 |
47 | Dir
48 | ===
49 | A directory in which you can go into.
50 |
51 | Allowed tags:
52 |
53 | ``ItemType``
54 | ``Dir``
55 | ``Title``
56 | Name to show
57 | ``UrlDir``
58 | URL to use when navigating into the folder
59 | ``UrlDirBackUp``
60 | URL to use when ``UrlDir`` returned a HTTP error status code.
61 | ``BookmarkShow``
62 | ??? Does it work?
63 | ``NoAudioContent``
64 | ???
65 |
66 | Known value: ``true``
67 |
68 |
69 | .. include:: examples/menuitem-dir.xml
70 | :code:
71 |
72 |
73 | Display
74 | =======
75 | A message line you cannot act on, only read.
76 |
77 | Displayed like a normal directory or radio station, but without an icon
78 | at the end.
79 |
80 | Useful to display messages on several lines, while showing other item types
81 | at the same time.
82 |
83 | Related to ``Message``.
84 |
85 | Allowed tags:
86 |
87 | ``ItemType``
88 | ``Display``
89 | ``Display``
90 | The message to show
91 |
92 | .. include:: examples/menuitem-display.xml
93 | :code:
94 |
95 |
96 | Message
97 | =======
98 | A full-screen message.
99 | It vanishes after some seconds and shows the rest of the list,
100 | or goes back to the previous list if there are no other list items.
101 |
102 | When entering from the iRadio's main menu and the rest of the
103 | list is empty, ``--leer--`` is shown (not going back to main menu).
104 |
105 | Related to ``Display``.
106 |
107 | Allowed tags:
108 |
109 | ``ItemType``
110 | ``Message``
111 | ``Message``
112 | The message to show. Automatically breaks onto multiple lines when too long.
113 |
114 |
115 | .. include:: examples/menuitem-message.xml
116 | :code:
117 |
118 |
119 | Previous
120 | ========
121 | Link back to the parent folder.
122 |
123 | Does not count to the ``ItemCount`` number.
124 |
125 | Allowed tags:
126 |
127 | ``ItemType``
128 | ``Previous``
129 | ``UrlPrevious``
130 | Full URL that is fetched when clicking the back button (left arrow).
131 | ``UrlPreviousBackUp``
132 | In case ``UrlPrevious`` brings an HTTP error status code, this one is used.
133 |
134 |
135 | .. include:: examples/menuitem-previous.xml
136 | :code:
137 |
138 |
139 | Search
140 | ======
141 | Show a search mask with alphanumeric input (at least on iRadio 300).
142 |
143 | Allowed tags:
144 |
145 | ``ItemType``
146 | ``Search``
147 | ``SearchCaption``
148 | Title
149 | ``SearchURL``
150 | URL to send search request to
151 | ``SearchURLBackUp``
152 | Alternative URL
153 |
154 |
155 | .. include:: examples/menuitem-search.xml
156 | :code:
157 |
158 |
159 | ShowEpisode
160 | ===========
161 | A single episode/file from a ``ShowOnDemand`` that you can listen to,
162 | e.g. a single podcast episode.
163 |
164 | Allowed tags:
165 |
166 | ``ItemType``
167 | ``ShowEpisode``
168 | ``ShowEpisodeID``
169 | ???
170 | ``ShowEpisodeName``
171 | Title
172 | ``ShowEpisodeURL``
173 | URL to use when playing the podcast.
174 | ``BookmarkShow``
175 | URL to use when favoriting/bookmarking the episode.
176 | The full show is bookmarked, not the single episode.
177 | ``ShowDesc``
178 | Description.
179 | ``ShowFormat``
180 | Category, e.g. "Reggae", "Sports", "Technology". Seems to be free text.
181 | ``Lang``
182 | Language, e.g. "English"
183 | ``Country``
184 | Country of origin, e.g. "Germany"
185 | ``ShowMime``
186 | Stream file type (not a valid MIME type, despite the tag name)
187 |
188 | Known values:
189 |
190 | - ``AAC``
191 | - ``MP3``
192 | - ``RealPlayer``
193 | - ``WMA``
194 |
195 |
196 | .. include:: examples/menuitem-showepisode.xml
197 | :code:
198 |
199 |
200 | ShowOnDemand
201 | ============
202 | A podcast, or a regular part (show) of a radio station - about a
203 | specific topic or by an anchorman.
204 |
205 | Single episodes of a show are available via ``ShowOnDemandURL``.
206 |
207 | Allowed tags:
208 |
209 | ``ItemType``
210 | ``ShowOnDemand``
211 | ``ShowOnDemandID``
212 | Alphanumeric Identifier
213 | ``ShowOnDemandName``
214 | Title
215 | ``Logo``
216 | URL to an image file
217 | ``ShowOnDemandURL``
218 | URL with a list of ``ShowEpisode`` items
219 | ``ShowOnDemandURLBackUp``
220 | Alternative/backup URL to ``ShowOnDemandURL``
221 | ``BookmarkShow``
222 | URL to use when favoriting/bookmarking the show.
223 |
224 |
225 | .. include:: examples/menuitem-showondemand.xml
226 | :code:
227 |
228 |
229 | Station
230 | =======
231 | An internet radio station / live stream.
232 |
233 | Allowed tags:
234 |
235 | ``ItemType``
236 | ``Station``
237 | ``StationId``
238 | Alphanumeric ID
239 | ``StationName``
240 | Title, e.g. "Deutsche Welle English Live"
241 | ``StationUrl``
242 | Stream URL
243 | ``StationDesc``
244 | Description
245 | ``StationFormat``
246 | Category, see ``ShowFormat``
247 | ``StationLocation``
248 | Country of location
249 | ``StationBandWidth``
250 | Bitrate in kbit/s, e.g. ``64``
251 | ``StationMime``
252 | Stream type - see ``ShowMime``
253 | ``Relia``
254 | ??? Reliabilit factor, integer
255 |
256 | Known values: 1 - 5
257 | ``Bookmark``
258 | URL to call when bookmarking the station
259 | ``Logo``
260 | URL to an image file
261 |
262 |
263 | .. include:: examples/menuitem-station.xml
264 | :code:
265 |
--------------------------------------------------------------------------------
/api/servers.rst:
--------------------------------------------------------------------------------
1 | =======
2 | Servers
3 | =======
4 | The Noxon iRadio devices speak with several servers.
5 | Here is a brief overview on what they do:
6 |
7 |
8 | radio567.vtuner.com
9 | ===================
10 | External service that provides a directory of internet radio
11 | stations and podcasts.
12 | Menu entries "Internetradio" and "Podcasts".
13 |
14 | ``radio5672.vtuner.com`` is a second instance that is used
15 | as backup in case the normal machine is not reachable.
16 |
17 |
18 | gatekeeper.my-noxon.net
19 | =======================
20 | - Starting point for integrated services like Napster, Musicload
21 | and mp3tunes (Menu entry "My Noxon")
22 | - Favorite storage
23 |
24 |
25 | apps.my-noxon.net
26 | =================
27 | - Firmware updates
28 |
--------------------------------------------------------------------------------
/build.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | #rst2html README.rst noxon-api.htm
3 | # --title: workaround for https://github.com/marianoguerra/rst2html5/issues/70
4 | rst2html5\
5 | --bootstrap-css\
6 | --stylesheet-path=styles.css --embed-stylesheet\
7 | --title="Noxon gateway API documentation"\
8 | README.rst noxon-api.htm
9 |
10 | # add current date to rendered docs
11 | sed -i "s/##UPDATE##/`date -Is`/" noxon-api.htm
12 |
--------------------------------------------------------------------------------
/fetcher/fetch.php:
--------------------------------------------------------------------------------
1 | Item as $xItem) {
31 | if ($xItem->ItemType == 'Dir') {
32 | fetch($xItem->UrlDir);
33 | } else if ($xItem->ItemType == 'ShowOnDemand') {
34 | fetch($xItem->ShowOnDemandURL);
35 | }
36 | }
37 | //echo $content . "\n";
38 | }
39 | ?>
40 |
--------------------------------------------------------------------------------
/styles.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 3ex 15%;
3 | font-family: helvetica;
4 | color: #222;
5 | }
6 |
7 | header code, #contents code {
8 | font-size: inherit;
9 | border: none;
10 | background-color: transparent;
11 | color: inherit;
12 | }
13 | h1 {
14 | text-align: center;
15 | margin-bottom: 2ex;
16 | }
17 | h2 {
18 | margin-top: 3ex;
19 | padding-top: 1ex;
20 | border-top: 1px solid grey;
21 | }
22 |
23 | dd {
24 | margin-left: 3ex;
25 | }
--------------------------------------------------------------------------------