#!/usr/bin/env python

from BeautifulSoup import BeautifulSoup
import re
import urllib2
import PyRSS2Gen
import datetime

# soup.findAll('span', id = re.compile('2842357headline'))[0].contents[0]

def fetch_mp3_urls(user):
    list = []
    page = urllib2.urlopen("http://blip.fm/%s" % user)
    soup = BeautifulSoup(page)
    re_song = re.compile('songUrl')
    re_url = re.compile('http\S*mp3')
    re_id = re.compile('id[^,]*') 
    for i in soup.body.__str__().splitlines():
        if re_song.search(i):
            print "Found song with : "
            item = {}
            item['url'] = re_url.search(i).group()
            print " - url : %s" % item['url']
            item['id'] = re_id.search(i).group().split()[1]
            print " - id : %s" % item['id']
            item['name'] = soup.findAll('span', id = re.compile(item['id']))[0].contents[0]
            print " - name : %s" % item['name']
            list.append(item)
    return list

def build_podcast(user):
    print "Building podcast for user %s" % user
    blip_items = []
    list = fetch_mp3_urls(user)

    for i in list:
        enc = PyRSS2Gen.Enclosure(
            url = i['url'],
            length = "1",
            type = "audio/mpeg"
        )
        item = PyRSS2Gen.RSSItem(
            title = i['name'],
            link = "http://blip.fm/%s" % user,
            description = i['name'],
            pubDate = datetime.datetime.now(),
            enclosure = enc
        )
        blip_items.append(item)

    rss = PyRSS2Gen.RSS2(
        title = "BlipFM Podcast for %s" % user,
        link = "http://blip.fmp/%s" % user,
        description = "Podcast version of BlipFM",
        lastBuildDate = datetime.datetime.now(),
        items = blip_items
    )
    
    return rss

build_podcast("lfelipe").write_xml(open("lfelipe.xml", "w"))
