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)
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)
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)
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