def get_song_list(self, tracks, gmusic=None, strict=False, collect_skipped=False): song_list = [] for tracks in tracks['items']: track = tracks['track'] artist = self.html_parser.unescape(track['artists'][0]['name']) title = self.html_parser.unescape(track['name']) popularity = track['popularity'] song = Song(artist=artist, title=title, spotify_popularity=popularity) if gmusic: first_result = None try: first_result = gmusic.search_song(song, strict) if first_result is None: raise ValueError('No result from Google Music') except Exception as e: logger.debug('Exception: {}'.format(e)) logger.info( u'Skipped {}. Added to to Watch Playlist'.format( song.full_title)) if collect_skipped: youtube = Youtube(secure=False) if song.youtube_id is None: youtube_video = youtube.get_youtube_video( full_title=song.full_title) if youtube_video: song.youtube_id = youtube_video.youtube_id song.video_link = "http://www.youtube.com/watch?v={}".format( youtube_video.youtube_id) if song.youtube_id: if youtube.to_watch_playlist is None: youtube.to_watch_playlist = youtube.get_playlist( 'https://www.youtube.com/playlist?list={}'. format(Config.YOUTUBE_TO_WATCH_PLAYLIST)) existing_ids = youtube.to_watch_playlist.song_df.youtube_id.values if song.youtube_id not in existing_ids: ToDoist.ToDoist().add_item( item=song.video_link, project_name=Config. TODOIST_YOUTUBE_COLLECT_PROJECT) song.google_music_store_id = gmusic.get_store_id(first_result) song.google_music_rating = gmusic.get_google_rating( first_result) song_list.append(song) return song_list
def get_billboard_chart_as_list(self, chart_id, gmusic=None): song_list = [] entries = self.get_billboard_chart(chart_id) for entry in entries: song = Song(artist=entry.artist, title=entry.title, billboard_rank=entry.rank, billboard_date=dt.datetime.now(), billboard_change=entry.lastPos - entry.rank) if gmusic: result = gmusic.search_song(song) song.google_music_store_id = gmusic.get_store_id(result) song.google_music_rating = gmusic.get_google_rating(result) song_list.append(song) return song_list
def get_song_list_from_playlist_id(self, playlist_id, gmusic=None, limit=None, strict=False, collect_skipped=False): # Retrieve the list of videos uploaded to the authenticated user's channel. MAX_SONGS_PER_QUERY = 50 playlistitems_list_request = self.youtube.playlistItems().list( playlistId=playlist_id, part="snippet", maxResults=MAX_SONGS_PER_QUERY) song_list = [] counter = 0 while playlistitems_list_request: playlistitems_list_response = playlistitems_list_request.execute() # Print information about each video. for playlist_item in playlistitems_list_response["items"]: full_title = playlist_item["snippet"]["title"] video_id = playlist_item["snippet"]["resourceId"]["videoId"] song = Song(full_title=full_title, video_link=get_youtube_link_from_code(video_id)) if gmusic: first_result = None try: first_result = gmusic.search_song(song, strict) if first_result is None: raise ValueError('No result from Google Music') except Exception as e: logger.debug('Exception: {}'.format(e)) logger.info( u'Skipped {}. Added to to Watch Playlist'.format( song.full_title)) if collect_skipped: if song.youtube_id: if self.to_watch_playlist is None: self.to_watch_playlist = self.get_playlist( 'https://www.youtube.com/playlist?list={}' .format( Config.YOUTUBE_TO_WATCH_PLAYLIST)) existing_ids = self.to_watch_playlist.song_df.youtube_id.values if song.youtube_id not in existing_ids: ToDoist.ToDoist().add_item( item=song.video_link, project_name=Config. TODOIST_YOUTUBE_COLLECT_PROJECT) # self.add_video_to_playlist(video_id = song.youtube_id, playlist_id=Config.YOUTUBE_TO_WATCH_PLAYLIST) song.google_music_store_id = gmusic.get_store_id( first_result) song.google_music_rating = gmusic.get_google_rating( first_result) if song.google_music_store_id: counter = counter + 1 song_list.append(song) if limit: if counter > int(limit): return song_list playlistitems_list_request = self.youtube.playlistItems( ).list_next(playlistitems_list_request, playlistitems_list_response) return song_list