예제 #1
0
파일: app.py 프로젝트: eae/discoversong
  def GET(self):
    rdio, current_user, user_id = get_rdio_and_current_user()
    disco_user, prefs = get_discoversong_user(user_id)
    programs_page = etree.parse("http://www.kpfa.org/programs/music", etree.HTMLParser())

    divs = try_get(programs_page, '//div[@class="node"][.//a[starts-with(@href, "/playlists/show/")]]')

    shows = []
    for div in divs:
      title = try_get(div, './/h2/a[@title]/@title')
      playlists_link = try_get(div, './/a[starts-with(@href, "/playlists/show/")]/@href')
      show_num = int(playlists_link[len("/playlists/show/"):])
      shows.append(show(title=title, number=show_num))

    return render.list_shows(params=Params(user=disco_user, preferences=prefs, message="", environment_message=get_environment_message()),
                          shows=shows)
예제 #2
0
파일: app.py 프로젝트: eae/discoversong
  def GET(self, show_number, episode_number):
    episode_url = "http://www.kpfa.org/playlist/id/%i" % int(episode_number)
    playlist_page = etree.parse(episode_url, etree.HTMLParser())

    show_title = try_get(playlist_page, '//div[@class="field-item"]/a/text()')
    episode_title = try_get(playlist_page, '//div[@class="orangeheader"]/text()', xform=get_episode_title)

    songs = EpisodeImporter().scrape_songs(episode_number)

    rdio, current_user, user_id = get_rdio_and_current_user()
    disco_user, prefs = get_discoversong_user(user_id)

    return render.import_episode(params=Params(user=disco_user, preferences=prefs, message="", environment_message=get_environment_message()),
                                 search=search,
                                 importing=[],
                                 show_title=show_title,
                                 show_number=show_number,
                                 episode_title=episode_title,
                                 episode_number=episode_number,
                                 show_url="/import/" + show_number,
                                 songs=songs)
예제 #3
0
파일: app.py 프로젝트: eae/discoversong
  def GET(self, show_number):
    inputs = web.input()
    p_url = inputs.get('p')
    rdio, current_user, user_id = get_rdio_and_current_user()
    disco_user, prefs = get_discoversong_user(user_id)

    show_url = "http://www.kpfa.org/playlists/show/" + show_number
    episodes_page = etree.parse(show_url, etree.HTMLParser())

    show_title = try_get(episodes_page, '//div[@class="orangeheader"]/text()')
    show_title = show_title[:show_title.index(": Playlists")]
    episode_links = try_get(episodes_page, '//a[starts-with(@href, "/playlist/id/")]')
    episodes = []
    for episode_link in episode_links:
      title = try_get(episode_link, 'text()', xform=get_episode_title)
      url = try_get(episode_link, '@href')
      number = int(url[len("/playlist/id/"):])
      episodes.append(episode(title=title, number=number))

    return render.list_episodes(params=Params(user=disco_user, preferences=prefs, message="", playlist_url=p_url, environment_message=get_environment_message()),
                                show=show(title=show_title, number=show_number),
                                episodes=episodes)
예제 #4
0
  def scrape_songs(self, episode_number):
    episode_url = "http://www.kpfa.org/playlist/id/%i" % int(episode_number)
    playlist_page = etree.parse(episode_url, etree.HTMLParser())

    table_rows = try_get(playlist_page, '//div[contains(@class, "field")]/table//tr')

    header = table_rows[0]
    table_rows = table_rows[1:]

    artist_pos = try_get(header, 'count(td[contains(text(), "rtist")]/preceding-sibling::td)+1', xform=int)
    song_pos = try_get(header, 'count(td[contains(text(), "ong")]/preceding-sibling::td)+1', xform=int)
    album_pos = try_get(header, 'count(td[contains(text(), "lbum")]/preceding-sibling::td)+1', xform=int)
    label_pos = try_get(header, 'count(td[contains(text(), "abel")]/preceding-sibling::td)+1', xform=int)
    year_pos = try_get(header, 'count(td[contains(text(), "ear")]/preceding-sibling::td)+1', xform=int)

    songs = []

    for row in table_rows:
      artist = try_get(row, 'td[%i]/text()' % artist_pos, xform=strip_blanks)
      title = try_get(row, 'td[%i]/text()' % song_pos, xform=strip_blanks)
      album = try_get(row, 'td[%i]/text()' % album_pos, xform=strip_blanks)
      label = try_get(row, 'td[%i]/text()' % label_pos, xform=strip_blanks)
      year = try_get(row, 'td[%i]/text()' % year_pos, xform=strip_blanks)
      if artist and title and artist.lower() != "talk" and title.lower() != "talk":
        artists = artist.split('/') if '/' in artist else [artist]
        artists = map(strip_blanks, artists)
        titles = title.split('/') if '/' in title else [title]
        titles = map(strip_blanks, titles)
        for artist in artists:
          for title in titles:
            if artist and title:
              songs.append(ScrapedSong(artist=artist, album=album, song=title, label=label, year=year))
    return songs