Zetta is a popular radio automation product produced by RCS (also famous for NexGen, Selector/GSelector, and Master Control). RCS Zetta has a in-built Status Feed API, which allows you to query details such as now-playing information and station/sequencer status. This Status Feed is provided as a HTTP Endpoint using XML SOAP, allowing it to be consumed by a variety of clients.
Before we jump into the details… what would you use the Zetta Status Feed for? The Status Feed is a good way to create realtime status boards, and send system status information to other applications – such as monitoring software.
I’ve personally used the feed to calculate the exact time of the next Stop Chain, so we can display a count-down for announcers. I’ve also got a script that automatically selects and plays an appropriately timed Sweeper whenever the announcer turns their microphone off and there is still Intro Time remaining on the current asset.
Zetta Status Feed Setup
The Status Feed is served in Zetta by a single designated computer. This computer has a dedicated process in the Startup Manager, and services requests on TCP port 3132.
To setup the Status Feed:
- Open Configuration > System
- In the System window, select the “General” tab
- Enable the checkbox next to “Status Feed Service”
- Select a computer next to “Status Feed Service”
- Save your changes
After saving these changes, the Zetta Status Feed Service should show up in the Startup Manager of the selected PC. If not, click the “Start All” button next to the “External Services” heading.
Connecting To and Browsing the Zetta Status Feed
The Zetta Status Feed is a standard XML SOAP Web Service with WSDL. An easy way to start using it is with the .NET WebService Studio application.
After downloading the Studio application from CodePlex, you can easily connect to the endpoint. To connect:
- Run WebServiceStudio.exe
- In the WSDL EndPoint field, enter “http://COMPUTERNAME:3132/StatusFeed” (this is the URL of the Web Service)
- Click “Get”
In the left pane, you’ll see a list of the endpoints discovered via the WSDL. When you select one, you can then press the “Invoke” button – this will fetch the API data for that endpoint and display it in the “Output” pane.
WebService Studio shows everything in a tree structure, rather than XML. This shows the hierarchy and allows you to browse the data easily.
As of the time of writing, these are the only available endpoints:
- /IsAlive
- /GetStations
- /GetBackgroundStations
- /GetVirtualStations
- /GetStationHeader
- /GetStationFull
- /GetSite
- /GetStores
- /GetStore
- /DoNotUseJustForExport
As explained by the title, this is only a Status Feed – not a fully featured API. These endpoints are focused on fetching data from your Zetta system.
Consuming Zetta’s SOAP with Python
To consume SOAP APIs in Python, I’ve been using the PySimpleSOAP module. This gives us a fairly simple way to consume the WSDL Endpoint and fetch the data in an appropriate Pythonic manner.
While there is a lot you can do with the status feed, I’ve put together a very simple example to show you how to connect, get a list of stations, and output the available metadata for each station. The code is on GitHub.
Here’s the main script:
I’ve also had to make a minor patch to PySimpleSoap (the details are here).
One of the non-intuitive things about SOAP is that you need to append “?wsdl” to the end of the URL in order to perform the discovery. Although WebService Studio does this for you, PySimpleSoap (and many other clients) do not.