def get_channels():
    """
    :return: Returns list of all Channels
    :rtype : list of ChannelItem
    """
    response = json(URL_CHANNEL_LIST.format(apiKey=API_KEY))
    return [ChannelItem(channelJson) for channelJson in response['channels']]
def get_channel_programs(channelID):
    """
    :param channelID: Channel ID
    :return: list of programs for th current Channel ID
    :rtype: list of ProgramItem
    """
    response = json(URL_PROGRAMS_LIST.format(apiKey=API_KEY, channelID=channelID))
    programs = [ProgramItem(programJson) for programJson in response['programs']]

    # Only return programs with one or more episodes/clips
    return filter(lambda x: (x.episodeCount + x.clipCount) > 0, programs)
def search(search_term, limit=20):
    response = json(URL_SEARCH.format(apiKey=API_KEY, keyword=search_term, limit=limit))
    programs = [ProgramItem(programJson) for programJson in response['programs']]
    return programs
def get_media_stream_by_url(quality, url):
    match_obj = re.search(r'.*video\/(.*)\/.*', url, re.M | re.I)
    video_id = match_obj.group(1)

    streams = json(URL_MEDIA_STREAM_BY_VIDEO_ID.format(videoId=video_id))
    return _get_matching_stream_quality(quality, streams)
def get_media_stream_by_media_id(quality, programID, mediaType, mediaID):
    mediaHash = _get_media_id_hash(programID, mediaType, mediaID)

    streams = json(URL_MEDIA_STREAM_BY_MEDIA_ID.format(mediaHash=mediaHash))
    return _get_matching_stream_quality(quality, streams)
def _get_media_info(programID, mediaType, mediaID):
    response = json(URL_MEDIA_INFO.format(apiKey=API_KEY, programID=programID, mediaType=mediaType, mediaID=mediaID))
    return response['media']
def get_program_media(programID, mediaType):
    response = json(URL_MEDIA_LIST.format(apiKey=API_KEY, programID=programID, mediaType=mediaType))
    return [MediaItem(mediaJson) for mediaJson in response['media']]