import urllib2
import datetime

def getSchedule(date, windowMinutes = 120):
    url = """http://www.tvguide.com/listings/data/ajaxdata.ashx?"""
    query = """srvid=80001&gridmins=%d&gridyr=%d&gridmo=%d&griddy=%d&gridhr=%d"""
        
    parms = (windowMinutes, date.year, date.month, date.day, date.hour)

    return urllib2.urlopen(url + query % parms).readlines()[1:];
    
class episode:
   # Parses a date in this form: YYYYMMDDHHMM
    def __parseDate(self, rawform):
        year = int(rawform[0:4])
        month = int(rawform[4:6])
        day = int(rawform[6:8])
        hour = int(rawform[8:10])
        minute = int(rawform[10:12])
        
        return datetime.datetime(year, month, day, hour, minute)     
    def __init__(self, rawForm):
        self.orginalForm = rawForm
        
        rawForm = filter(lambda x: x != "", rawForm.split("\t"))
        self.channel = int(rawForm[0])
        self.channelName = rawForm[1]
        
        self.title = rawForm[3]
        self.dateTime = self.__parseDate(rawForm[-4])
        self.duration = int(rawForm[-3])
   
#def parse
episodes = []
for rawEpisode in getSchedule(datetime.datetime.now()):
    episodes.append(episode(rawEpisode))
    
channels = {}
for episode in episodes:
    channel = (episode.channel, episode.channelName)
    
    if channel not in channels:
        channels[channel] = []
    
    channels[channel].append(episode)
    channels[channel].sort(lambda x, y: [-1, 1][x.dateTime > y.dateTime])

for channel in sorted(channels.keys()):
    print "Channel: %d %s" % channel
    
    for episode in channels[channel]:
        time = episode.dateTime
        
        print "\t%s @ %d:%02d %s" % (episode.title, time.hour % 12, 
                                      time.minute, ["am", "pm"][time.hour > 11])