mirror of
				https://github.com/THIS-IS-NOT-A-BACKUP/zspotify.git
				synced 2025-11-04 05:20:34 +00:00 
			
		
		
		
	Update zspotify.py
This commit is contained in:
		
							parent
							
								
									89096db1c7
								
							
						
					
					
						commit
						97c2812522
					
				
							
								
								
									
										95
									
								
								zspotify.py
									
									
									
									
									
								
							
							
						
						
									
										95
									
								
								zspotify.py
									
									
									
									
									
								
							@ -230,8 +230,9 @@ def getSongInfo(songId):
 | 
				
			|||||||
    disc_number = info['tracks'][0]['disc_number']
 | 
					    disc_number = info['tracks'][0]['disc_number']
 | 
				
			||||||
    track_number = info['tracks'][0]['track_number']
 | 
					    track_number = info['tracks'][0]['track_number']
 | 
				
			||||||
    scrapedSongId = info['tracks'][0]['id']
 | 
					    scrapedSongId = info['tracks'][0]['id']
 | 
				
			||||||
 | 
					    isPlayAble = info['tracks'][0]['is_playable']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return artists, albumName, name, imageUrl, releaseYear, disc_number, track_number, scrapedSongId
 | 
					    return artists, albumName, name, imageUrl, releaseYear, disc_number, track_number, scrapedSongId, isPlayAble
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
@ -339,69 +340,71 @@ def get_album_name(access_token, album_id):
 | 
				
			|||||||
#Functions directly related to downloading stuff
 | 
					#Functions directly related to downloading stuff
 | 
				
			||||||
def downloadTrack(track_id_str: str, extra_paths = ""):
 | 
					def downloadTrack(track_id_str: str, extra_paths = ""):
 | 
				
			||||||
    global rootPath, skipExistingFiles
 | 
					    global rootPath, skipExistingFiles
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    track_id = TrackId.from_base62(track_id_str)
 | 
					    track_id = TrackId.from_base62(track_id_str)
 | 
				
			||||||
    artists, albumName, name, imageUrl, releaseYear, disc_number, track_number, scrapedSongId = getSongInfo(track_id_str)
 | 
					    artists, albumName, name, imageUrl, releaseYear, disc_number, track_number, scrapedSongId, isPlayAble = getSongInfo(track_id_str)
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    songName = artists[0] + " - " + name
 | 
					    songName = artists[0] + " - " + name
 | 
				
			||||||
    filename = rootPath + extra_paths + songName + '.mp3'
 | 
					    filename = rootPath + extra_paths + songName + '.mp3'
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    skipExistingFiles
 | 
					    if not isPlayAble:
 | 
				
			||||||
    
 | 
					        print("###   SKIPPING:", songName, "(SONG IS UNAVAILABLE)   ###")
 | 
				
			||||||
    if os.path.isfile(filename) and  skipExistingFiles:
 | 
					 | 
				
			||||||
        print("###   SKIPPING:", songName, "(SONG ALREADY EXISTS)   ###")
 | 
					 | 
				
			||||||
    else:
 | 
					    else:
 | 
				
			||||||
        if track_id_str != scrapedSongId:
 | 
					        if os.path.isfile(filename) and  skipExistingFiles:
 | 
				
			||||||
            print("###   APPLYING PATCH TO LET SONG DOWNLOAD   ###")
 | 
					            print("###   SKIPPING:", songName, "(SONG ALREADY EXISTS)   ###")
 | 
				
			||||||
            track_id_str = scrapedSongId
 | 
					        else:
 | 
				
			||||||
            track_id = TrackId.from_base62(track_id_str)
 | 
					            if track_id_str != scrapedSongId:
 | 
				
			||||||
 | 
					                print("###   APPLYING PATCH TO LET SONG DOWNLOAD   ###")
 | 
				
			||||||
 | 
					                track_id_str = scrapedSongId
 | 
				
			||||||
 | 
					                track_id = TrackId.from_base62(track_id_str)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        print("###   FOUND SONG:", songName, "   ###")
 | 
					            print("###   FOUND SONG:", songName, "   ###")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        stream = session.content_feeder().load(
 | 
					            stream = session.content_feeder().load(
 | 
				
			||||||
            track_id, VorbisOnlyAudioQuality(quality), False, None)
 | 
					                track_id, VorbisOnlyAudioQuality(quality), False, None)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
       
 | 
					       
 | 
				
			||||||
        print("###   DOWNLOADING RAW AUDIO   ###")
 | 
					            print("###   DOWNLOADING RAW AUDIO   ###")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if not os.path.isdir(rootPath + extra_paths):
 | 
					            if not os.path.isdir(rootPath + extra_paths):
 | 
				
			||||||
            os.makedirs(rootPath + extra_paths)
 | 
					                os.makedirs(rootPath + extra_paths)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        with open(filename,'wb') as f:
 | 
					            with open(filename,'wb') as f:
 | 
				
			||||||
            '''
 | 
					                '''
 | 
				
			||||||
            chunk_size = 1024 * 16
 | 
					                chunk_size = 1024 * 16
 | 
				
			||||||
            buffer = bytearray(chunk_size)
 | 
					                buffer = bytearray(chunk_size)
 | 
				
			||||||
            bpos = 0
 | 
					                bpos = 0
 | 
				
			||||||
            '''
 | 
					                '''
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
            #With the updated version of librespot my faster download method broke so we are using the old fallback method
 | 
					                #With the updated version of librespot my faster download method broke so we are using the old fallback method
 | 
				
			||||||
            while True:
 | 
					                while True:
 | 
				
			||||||
                byte = stream.input_stream.stream().read()
 | 
					                    byte = stream.input_stream.stream().read()
 | 
				
			||||||
                if byte == b'':
 | 
					                    if byte == b'':
 | 
				
			||||||
                    break
 | 
					                        break
 | 
				
			||||||
                f.write(byte)
 | 
					                    f.write(byte)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            '''
 | 
					                '''
 | 
				
			||||||
            while True:
 | 
					                while True:
 | 
				
			||||||
                byte = stream.input_stream.stream().read()
 | 
					                    byte = stream.input_stream.stream().read()
 | 
				
			||||||
                    
 | 
					                    
 | 
				
			||||||
                if byte == -1:
 | 
					                    if byte == -1:
 | 
				
			||||||
                    # flush buffer before breaking
 | 
					                        # flush buffer before breaking
 | 
				
			||||||
                    if bpos > 0:
 | 
					                        if bpos > 0:
 | 
				
			||||||
                        f.write(buffer[0:bpos])
 | 
					                            f.write(buffer[0:bpos])
 | 
				
			||||||
                    break
 | 
					                        break
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                print(bpos)
 | 
					                    print(bpos)
 | 
				
			||||||
                buffer[bpos] = byte
 | 
					                    buffer[bpos] = byte
 | 
				
			||||||
                bpos += 1
 | 
					                    bpos += 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if bpos == (chunk_size):
 | 
					                    if bpos == (chunk_size):
 | 
				
			||||||
                    f.write(buffer)
 | 
					                        f.write(buffer)
 | 
				
			||||||
                    bpos = 0
 | 
					                        bpos = 0
 | 
				
			||||||
            '''
 | 
					                '''
 | 
				
			||||||
        convertToMp3(filename)
 | 
					            convertToMp3(filename)
 | 
				
			||||||
        setAudioTags(filename, artists, name, albumName, releaseYear, disc_number, track_number)
 | 
					            setAudioTags(filename, artists, name, albumName, releaseYear, disc_number, track_number)
 | 
				
			||||||
        setMusicThumbnail(filename, imageUrl)
 | 
					            setMusicThumbnail(filename, imageUrl)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def downloadAlbum(album):
 | 
					def downloadAlbum(album):
 | 
				
			||||||
    token = session.tokens().get("user-read-email")
 | 
					    token = session.tokens().get("user-read-email")
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user