• Get involved.
    We want your input!
    Apply for Membership and join the conversations about everything related to broadcasting.

    After we receive your registration, a moderator will review it. After your registration is approved, you will be permitted to post.
    If you use a disposable or false email address, your registration will be rejected.

    After your membership is approved, please take a minute to tell us a little bit about yourself.
    https://www.radiodiscussions.com/forums/introduce-yourself.1088/

    Thanks in advance and have fun!
    RadioDiscussions Administrators

Are IHeart "iPhone" MP3 feeds ending?

I've had a bunch of links I've opened in Winamp for a few years ago, but now they all come up 'not found'.

I've never used Apple hardware, but wouldn't be surprised that IHR made their apps/site easier to use with them, so should I presume the inevitable here?

dL
 
The old streaming URLs for the iHeart Radio stations are gradually being replaced by new ones, being phased in over a period of time.
I noticed this a few months ago as when I "snooped" for a URL for some iHeart stations, some new URLs popped up replacing the old ones.
For a while both new and old streaming URLs were functional; now the old ones are becoming disfunctional.

So, using WOR-AM New York as an example:

New streaming URL (copy + paste between the arrows): >>http://c5icy.prod.playlists.ihrhls.com/5874_icy<<

Old streaming URL was: >>http://wor-am.akacast.akamaistream.net/7/495/179680/v1/auth.akacast.akamaistream.net/wor-am<<

The good news: the new URLs are able to be used in the Windows Media Player whereas the old ones wouldn't work (at least for me on any edition of the player).

The bad news: unlike most of the old URLs, the new ones are rather anonymous as far as stream "Titles" go;
they do not retain the name of the station when finished listening to them.
I tried modifying the "Title" in the VLC Player (for example), but upon opening a new streaming "session" later on, the "Title" modifications are wiped away.

If there are other iHeart stations for which you'd like the new URL, the pattern you could use to find the new URL is
(using the above as an example):

>>http://c5icy.prod.playlists.ihrhls.com/5874_icy<<

The # "5874" above refers to the station ID # - that can be obtained by checking the URL of the station's Listen Live web page link,
in this example, between the arrows: >>http://www.iheart.com/live/710-wor-5874/<<

The time-consuming part is determining the digit that appears between the letter "c" and "icy" in the new URL.
It is a random digit somewhere between 1 and 20 (currently; that could expand in the future).

Thus, one would have to test the new URL by first plugging in the station ID # and then starting with the digit "1"
between the "c" and "icy". If it works, great. If not, try "2", "3", "4", "5", etc. until the stream works.
(In the above example, it so happens that "5" worked.)
 
Just "view source" and search for the word "streams".....it appears only once, and the multiple streams are listed below....an m3u8 stream (for roku and other video devices) and the sboutcast streams.
 
Unfortunately these links don't work reliably. Sometimes they start glitching after a couple of minutes, other times they just stop after a few minutes.

Too bad because the iHeart website is awful. It loads over a dozen tracking links or cookies and plays a video pre-roll commercial with is ridiculous because by the time all the cookies load nobody is staring at the screen and the ads make no sense without the visuals.

The Android iHeart App is a virus in every sense of the word. It pops up notifications even if "block all" is enabled, it suddenly starts playing audio by itself, and the only way to keep it under control is to "force stop" or uninstall. Google Play Store should ban it.
 
No need to make 20 hostname guesses. You can look up the station ID value for a known callsign with this API URL (replace "KEIB" below with your desired callsign):

Code:
https://us.api.iheart.com/api/v1/catalog/searchAll?keywords=KEIB&maxRows=20&queryArtist=false&queryTrack=false&queryBundle=false&queryFeaturedStation=true&queryKeyword=false&queryStation=true&queryTalkShow=false&startIndex=0

The result is XML. Look inside the <id></id> tag for the station ID value.

You can then get the stream URLs (rtmp, icy, hls) by placing the aforementioned station ID value in this API URL (replace "197" below with your desired station ID):

Code:
https://us.api.iheart.com/api/v2/content/liveStations/197?allMarkets=true

The result is json.

I made a batch file that can be run at the Windows command line to retrieve all stream URLs for an IHR station by callsign (requires xidel.exe from http://www.videlibri.de/xidel.html):

Code:
@echo off

setlocal

if not "%~1" == "" goto top

echo.
echo Command line syntax:
echo    ihrstreams [callsign]
echo Example:
echo    ihrstreams KEIB

goto :eof

:top

set "ihr_call=%~1"

for /f "tokens=1" %%a in ('xidel -s "http://us.api.iheart.com/api/v1/catalog/searchAll?keywords=%ihr_call%&maxRows=20&queryArtist=false&queryTrack=false&queryBundle=false&queryFeaturedStation=true&queryKeyword=false&queryStation=true&queryTalkShow=false&startIndex=0" -e "//bestmatch/id"') do set "ihr_sid=%%a"

if "%ihr_sid%" == "" (
  echo.
  echo Error querying IHR 'searchAll' API. Check callsign.
) else (
  echo.
  for /f "tokens=1" %%a in ('xidel -s "http://us.api.iheart.com/api/v2/content/liveStations/%ihr_sid%?allMarkets=true" -e "($json).hits/streams/*"') do echo %%a
)

endlocal

Screenshot of the batch file working:

https://images2.imgbox.com/95/59/l7tvGD9R_o.png

If you want the batch file to return only one kind of stream (instead of all 5 kinds), just replace the asterisk inside the batch file (there is only one) with the desired stream's name in the server's json output (i.e., replace "*" with "hls_stream" or "shoutcast_stream" or "secure_rtmp_stream" or "secure_hls_stream" or "secure_shoutcast_stream").
 
No need to make 20 hostname guesses. You can look up the station ID value for a known callsign with this API URL (replace "KEIB" below with your desired callsign):

Code:
https://us.api.iheart.com/api/v1/catalog/searchAll?keywords=KEIB&maxRows=20&queryArtist=false&queryTrack=false&queryBundle=false&queryFeaturedStation=true&queryKeyword=false&queryStation=true&queryTalkShow=false&startIndex=0

The result is XML. Look inside the <id></id> tag for the station ID value.

You can then get the stream URLs (rtmp, icy, hls) by placing the aforementioned station ID value in this API URL (replace "197" below with your desired station ID):

Code:
https://us.api.iheart.com/api/v2/content/liveStations/197?allMarkets=true

The result is json.

I made a batch file that can be run at the Windows command line to retrieve all stream URLs for an IHR station by callsign (requires xidel.exe from http://www.videlibri.de/xidel.html):

Code:
@echo off

setlocal

if not "%~1" == "" goto top

echo.
echo Command line syntax:
echo    ihrstreams [callsign]
echo Example:
echo    ihrstreams KEIB

goto :eof

:top

set "ihr_call=%~1"

for /f "tokens=1" %%a in ('xidel -s "http://us.api.iheart.com/api/v1/catalog/searchAll?keywords=%ihr_call%&maxRows=20&queryArtist=false&queryTrack=false&queryBundle=false&queryFeaturedStation=true&queryKeyword=false&queryStation=true&queryTalkShow=false&startIndex=0" -e "//bestmatch/id"') do set "ihr_sid=%%a"

if "%ihr_sid%" == "" (
  echo.
  echo Error querying IHR 'searchAll' API. Check callsign.
) else (
  echo.
  for /f "tokens=1" %%a in ('xidel -s "http://us.api.iheart.com/api/v2/content/liveStations/%ihr_sid%?allMarkets=true" -e "($json).hits/streams/*"') do echo %%a
)

endlocal

Screenshot of the batch file working:

https://images2.imgbox.com/95/59/l7tvGD9R_o.png

If you want the batch file to return only one kind of stream (instead of all 5 kinds), just replace the asterisk inside the batch file (there is only one) with the desired stream's name in the server's json output (i.e., replace "*" with "hls_stream" or "shoutcast_stream" or "secure_rtmp_stream" or "secure_hls_stream" or "secure_shoutcast_stream").
Batch file works well. Wonder how long until they break it? Thanks for the work.
 
Looks like iHeart pulled the plug on the old Shoutcast streams in favor of HLS. Trying the old Shoutcast URLs returns a "server full" message. Although the HLS streams are also ~48kbps VBR AAC they sound horribly metallic compared to the shoutcast versions as if there's some kind of transcoding going on.
 
Last edited:
I stand corrected. They're still using shoutcast (confirmed by analysis of the new URL formula posted by CaliRadioFan) but the old URLs are inoperative. I stand by my comment that the sound quality has decreased markedly on both talk and music channels as if the streams are going through multiple cascading low bitrate lossy psychoacoustic coding before they reach the listener.
 
Last edited:
Status
This thread has been closed due to inactivity. You can create a new thread to discuss this topic.
Back
Top Bottom