You are not logged in.

#1 2013-02-17 15:50:11

lucastanure
Member
From: Campinas - Brazil
Registered: 2012-09-28
Posts: 3

Listen to iHeartRadio

I got this code Matthew Gyurgyik command line mplayer and created a new version for python3.

So few free to listen iHeartRadio from everywhere.
Station Default : 100z New york

#!/usr/bin/python3

import subprocess
import threading
import argparse
import time
import urllib.request as urlRequest
import xml.etree.ElementTree as ET
import os
import datetime
import signal
import sys

class iheartRadio():
  
  def __init__(self):
    self.stations=[
                   ('whtz-fm',"New York's Hit Music Station"),
                   ('khks-fm',"Dallas-Ft. Worth's Hit Music"),
                   ('wksc-fm',"Chicago's Hit Music Station"),
                   ('wjmn   ',"Boston’s #1 For Hip-Hop and Hit Music")]
    self.station = self.stations[0][0]
    self.songList = {}
  
  def epilog(self):
    epilog = 'Some options : \n'
    for radio,desc in self.stations:
      epilog += radio + ((7-len(radio))*' ') + ' : ' +desc + '\n'
    return epilog
    
  def getXML(self):
    data= urlRequest.urlopen('http://p2.'+self.station+'.ccomrcdn.com/player/player_dispatcher.html?section=radio&action=listen_live').read()
    self.xml = ET.fromstring(data)
    
  def getSongInfo(self):
    self.getXML()
    artists=self.xml.findall('ListenLiveInitialize/JustPlayed/song/artist')
    titles=self.xml.findall('ListenLiveInitialize/JustPlayed/song/track')
    for i in range(len(artists)):
      artist = artists[i].attrib['name']
      song  = titles[i].attrib['track_title']
      if not song in  self.songList:
        self.songList[song] = artist
        print(artist + " - " + song)

  def startRadio(self):
    self.getXML()
    rtmpurl='"'+self.xml.find("ListenLiveInitialize/StreamInfo/stream").attrib['primary_location']+'"'
    self.proc = subprocess.Popen('mplayer ' + rtmpurl +' -novideo -ao alsa -quiet', stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE , shell=True)
    
  def keepMpalyer(self):
    while self.keepPlaying:
      self.proc.wait()
      if self.keepPlaying:
        self.startRadio()
    print('Thread joined')
  
  def main(self):
    parser = argparse.ArgumentParser(description='Listen iHeart Radio from everywhere.',epilog=self.epilog(),formatter_class=argparse.RawDescriptionHelpFormatter)
    parser.add_argument('-r','--radio', dest='radio', type=str,help='Radio String ID')
    parser.add_argument('-t','--time', dest='time', type=int,help='Time Stream will Play (in minutes)')
    args = parser.parse_args()
    if args.radio:
      self.radio = args.radio
    if args.time:
      signal.signal(signal.SIGALRM, self.handler)
      signal.alarm(args.time*60)
      
    self.startRadio()
    print('Playing ' + self.station)
    self.getSongInfo()
    self.keepPlaying = True
    self.threadKeepingMplayer = threading.Thread(target=self.keepMpalyer,args=(),group=None)
    self.threadKeepingMplayer.start()
    while True:
      self.getSongInfo()
      time.sleep(30)
    
  def handler(self, signum, frame):
    self.keepPlaying = False
    self.proc.kill()
    self.threadKeepingMplayer.join()
    sys.exit(0)
    
if __name__ == "__main__":
  radio = iheartRadio()
  signal.signal(signal.SIGTERM, radio.handler)
  signal.signal(signal.SIGINT, radio.handler)
  radio.main()

Offline

Board footer

Powered by FluxBB