Mobile web app designed to provide the user with a personalized audio news experience
What it does
MyNPR is a mobile web app designed to provide the user with a personalized audio news experience. MyNPR works off of the NPR API. With such a broad and distinguished quality of audio stories, NPR was the perfect media network to base an audio app around. With MyNPR, the user is able to choose what stories he likes and dislikes and MyNPR takes this information and builds a personalized list of audio pieces for the user.
We believe that in this day in age where many of us are on the go but also constantly on our mobile devices, MyNPR gives people the pleasures of mobile news with the ease of a personalization apparatus that frees them up to do other things as they listen. MyNPR is built for active people who enjoy hearing quality news they care about.
MyNPR is built around NPR. When a user first loads MyNPR, he or she is greeted by a pop up asking the user to set up his preferences. The user then chooses from a list of various topics which ones he or she is interested in listening to. Once the user’s preferences are set up, he or she will receive a queue of audio stories. As these stories play the user is able to skip stories and thumbs up or down particular stories based on whether he wants more or less stories with similar topics to be played. As the user thumbs up or down stories, MyNPR takes this information and begins to personalize the queue to the user’s preferences.
How it works
Our app relies on the NPR API to retrieve the audio news stories to be played. The NPR API is a RESTful API that takes inputs to be used as parameters to search through their very large collection of audio news stories. We interact with the NPR API by simply performing a GET request with parameters such as “category (politics, economics)”, “date”, and various other parameters. For MyNPR the main relevant input to the NPR API was the “category” parameter. Every story accessible through the NPR API is associated with at least one category, usually around 5. When a query to the NPR API is made, it returns a number of stories in a certain data format. We chose to retrieve 20 stories in XML format for each query we made. The XML contains a metadata about each story returned, including related categories, related stories, and of course, a URL to the audio file.
Our app tracks the user’s “preference levels” for each category, which is internally stored as a number between 0 and 1. For example, a user might have a set of preference levels such as:
- Politics: 0.8
- Economics: 0.7
- Technology: 0.2
- Science: 0.1
This gives us a sense of what the user generally likes to listen to. Our app then uses these preference levels to randomly pick a category to query the NPR API with. For this particular user, our app would query for politics and economics more often than technology or science. Our app is designed to never any preference level fall to 0, because that would permanently eliminate all stories of that category, and perhaps the user’s interests will change over time.
The way the user’s preference levels actually get changed is through the various user feedback mechanisms. Right now, we simply increase/decrease the preference levels slightly when the user gives a thumbs up/thumbs down. A new user is redirected to a page where they can select categories they are interested in, to give some initial values for preference levels. If the user skips that initial setup, all preference levels are simply set to 0.5.
- NPR API
Right now, we query the NPR API for 20 stories, and they are always the 20 most recent stories associated with that category. In the future, we could query older stories and perhaps heuristically determine whether they are “timeless”, in which case they are viable for playing, or “news-y”, in which case we should simply throw it out.
The way our preference levels are tweaked according to user feedback is currently quite unsophisticated. In the future we could use machine learning techniques and incorporate usage metrics like “% of story listened to before skipping”.
We could add a history page, listing all the stories listened to or skipped.
Justin De Concepcion