最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - How can I get the raw stream URL of an iheartradio station - Stack Overflow

programmeradmin0浏览0评论

I am trying to make a discord bot to stream the iheart80s at 103.7 radio station, and so far I can not find a direct stream URL to give my discord bot.

I have tried to get the JSON via Python but that just returns http.client.BadStatusLine: ICY 200 OK

I am using discord.js. And here is the function I am trying to feed the stream URL into:

function(CmdArg,CmdMsg){
  const voiceChannel = CmdMsg.member.voiceChannel;
  voiceChannel.join().then(connection => resolve(connection)).catch(err =>reject(err));
  const stream = () => {
           return request.get({
               uri: CmdArg,
               followAllRedirects: true,
               encoding: null
           });
       }


    console.log(stream);
    CmdMsg.guild.voiceConnection.playStream(stream, { passes: token.passes    });
}

I am trying to make a discord bot to stream the iheart80s at 103.7 radio station, and so far I can not find a direct stream URL to give my discord bot.

I have tried to get the JSON via Python but that just returns http.client.BadStatusLine: ICY 200 OK

I am using discord.js. And here is the function I am trying to feed the stream URL into:

function(CmdArg,CmdMsg){
  const voiceChannel = CmdMsg.member.voiceChannel;
  voiceChannel.join().then(connection => resolve(connection)).catch(err =>reject(err));
  const stream = () => {
           return request.get({
               uri: CmdArg,
               followAllRedirects: true,
               encoding: null
           });
       }


    console.log(stream);
    CmdMsg.guild.voiceConnection.playStream(stream, { passes: token.passes    });
}
Share Improve this question edited Jan 9, 2023 at 17:19 Dharman 33.3k27 gold badges101 silver badges146 bronze badges asked Feb 4, 2017 at 18:27 IncrementTimesTwoIncrementTimesTwo 411 gold badge1 silver badge4 bronze badges
Add a comment  | 

7 Answers 7

Reset to default 7

It has changed yet Again, none of the wireshark solutions, or searching for certain texts in the inspect tab of chrome/firefox helped, but I figured it out...

The example I'll be using is: I heart Mix 90.1 Toluca https://www.iheart.com/live/mix-901-toluca-6566/

  1. Click on the Share icon, it's the one to the right of the 'connect' button.
  2. Look for the Embed Widget section.
  3. Then copy from the end of src=". Example: The whole text is

<iframe allow="autoplay" width="100%" height="200" src="https://www.iheart.com/live/mix-901-toluca-6566/?embed=true" frameborder="0"></iframe>

and I will copy

https://www.iheart.com/live/mix-901-toluca-6566/?embed=true
  1. Ok, great. Now we have much less html and urls to work with. Now copy that url and paste it in your web browser (you can now close the previous radio webpage). Rick click the play button, select Inspect.
  2. Now, using Ctrl+F (press only ctrl and F), look for stream. You should get several results, but they will be all on the same text line, so don't worry.
  3. Now double click in that load of JSON data, should start with something like {"initialPropos" : {....., now copy all that text and paste in a text editor which will let you search through text (e.g. vim, notepad, MS Word)
  4. Now, open the text editor with the pasted text. Now look for streams. The first result should start with something like: ,"streams":{"hls...
  5. Great! Now you may copy the stream of your liking, some may not be available, but in this example, the following stream types are available:
{
"hls_stream":"http://playerservices.streamtheworld.com/api/livestream-redirect/XHENOFMAAC.m3u8",

"pls_stream":"http://playerservices.streamtheworld.com/pls/XHENOFMAAC.pls",

"secure_hls_stream":"https://playerservices.streamtheworld.com/api/livestream-redirect/XHENOFMAAC.m3u8",

"secure_pls_stream":"https://playerservices.streamtheworld.com/pls/XHENOFMAAC.pls"}
  1. Now, you may choose the stream of your liking and open it with your favorite audio/video player. E.g. (be sure to put it in double quotes so it won't get manipulated by your shell or smth) mpv "http://playerservices.streamtheworld.com/api/livestream-redirect/XHENOFMAAC.m3u8"

  2. The End! Now you should be good to go! If I was not at all clear, please tell me so. The only reason I've created a stack overflow account is to post this and help others know how to do this, so please let me know if this is not working!!

Cheers.

I was able to find the iheart url by doing this... Go to desired radio station web site. Click on listen/play. Right click page then view page source. Find/search for..."icy" The first instance of "icy"should be here.. "shoutcast_stream":"http:// (various letters and numbers). playlists.ihrhls.com/(4 numbers) icy" I copy and pasted the http address into winamp and it worked.

http://c10icyelb.prod.playlists.ihrhls.com/4342_icy

You can use mitmproxy on a computer to inspect the traffic for the app. I was able to identify http://c10.prod.playlists.ihrhls.com/4342/playlist.m3u8 as the stream source of that radio station. Of course, the url may change over time, so ymmv.

Find links off iHeartRadio: (I am using channel 93.3 as an example)

  1. Open iHeart radio and find your stream *NOTE: DO NOT START THE STREAM YET
  2. Use Wire Shark or any other capture tool and start the capture right before playing the stream on iHeart Radio
  3. Stop the stream then stop the capture immediately after (This limits the amount of packets we capture to only the ones we want)
  4. Use a filter and type in tcp contains "ihrh"
  5. Open all packets which include the link. *NOTE: Ignore any text which contains "ihrh" we are looking for a link
  6. Find server link (ex. c13.prod.playlists.ihrhls.com) *NOTE: make sure it is "c" and a number like "c13" NOT "cdn" or anything else
  7. Go in internet explorer and go to stream on iheart radio
  8. Look at url and notice the code (ex. https://www.iheart.com/live/channel-933-241/?autoplay=true&pname=fire&campid=local&callletters=khts-fm)
  9. Use server link and then add "/" then the code found from the step above
  10. Next, add the words "/playlist.m3u8" to the end of the link
  11. After completing all the steps you get the final link which is in our case : https://c13.prod.playlists.ihrhls.com/241/playlist.m3u8

> Find/search for..."icy"

This is not a reliable method since other servers may be used e.g. streamtheworld, edgefcs etc. - and some might use RTMP (which your player may not be able to handle)

Here is a Perl module & sample scripts which can do the job:

https://metacpan.org/release/IHeartRadio-Streams

reference: https://askubuntu.com/questions/470269/how-do-i-add-iheartradio-stations-to-radio-tray/470277

I am able to extract a link from the Firefox Inspector Panel (I'll try to attach a screenshot), and filter out everything but Network links and Media. These links, and there are many of them, only play little excerpts of songs. A few seconds, just enough to get your hopes up, then Radiotray stops playing and won't start again until you select another station.

Inspector Panel in Firefox, with Network and Media selected to filter out the rest of the results

This is the link I was able to get from the highlit entry.

link of the partial stream I was able to extract from the iHeart widget player button

Clicking on the link appears to be a deadend in Firefox, you enter it into the the radiotray-ng bookmarks editor and it will play for a few seconds.

I feel to stream a radio station you need a proxy server and ffmpeg setup, because multiple users will be connecting to stream via your website/webapp/app. ffmpeg on server side will read radio station stream (http stream or rtsp stream) and feed it to your streaming proxy server which will manage multiple connections.

发布评论

评论列表(0)

  1. 暂无评论