Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
    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