code: def get_song_by_url(self, song_url, song_name, folder, lyric_info):
          
  
          if not os.path.exists(folder):
              os.makedirs(folder)
          fpath = os.path.join(folder, song_name+'.mp3')
  
          if sys.platform == 'win32' or sys.platform == 'cygwin':
              valid_name = re.sub(r'[<>:"/\\|?*]', '', song_name)
              if valid_name != song_name:
                  click.echo('{} will be saved as: {}.mp3'.format(song_name, valid_name))
                  fpath = os.path.join(folder, valid_name + '.mp3')
  
          if not os.path.exists(fpath):
              resp = self.download_session.get(
                  song_url, timeout=self.timeout, stream=True)
              length = int(resp.headers.get('content-length'))
              label = 'Downloading {} {}kb'.format(song_name, int(length/1024))
  
              with click.progressbar(length=length, label=label) as progressbar:
                  with open(fpath, 'wb') as song_file:
                      for chunk in resp.iter_content(chunk_size=1024):
                          if chunk:  # filter out keep-alive new chunks
                              song_file.write(chunk)
                              progressbar.update(1024)
  
          if lyric_info:
              folder = os.path.join(folder, 'lyric')
              if not os.path.exists(folder):
                  os.makedirs(folder)
              fpath = os.path.join(folder, song_name+'.lrc')
              with open(fpath, 'w') as lyric_file:
                  lyric_file.write(lyric_info)
docs: Download a song and save it to disk.
  
          :params song_url: download address.
          :params song_name: song name.
          :params folder: storage path.
          :params lyric: lyric info.