示例:下载指定歌单所有歌曲

  1. from bilibili_api import audio, sync, get_session
  2. import os
  3. AUDIO_LIST_ID = 10624
  4. async def main():
  5. # 获取歌单歌曲列表
  6. al = audio.AudioList(AUDIO_LIST_ID)
  7. audios = []
  8. p = 1
  9. while True:
  10. l = await al.get_song_list(p)
  11. audios.extend(l['data'])
  12. if l['pageCount'] >= p:
  13. break
  14. p += 1
  15. sess = get_session()
  16. # 创建歌单文件夹
  17. if not os.path.exists(str(AUDIO_LIST_ID)):
  18. os.mkdir(str(AUDIO_LIST_ID))
  19. for au in audios:
  20. # 下载歌曲
  21. file = f"{AUDIO_LIST_ID}/{au['id']} - {au['title']}.m4a"
  22. a = audio.Audio(au['id'])
  23. url = await a.get_download_url()
  24. url = url['cdns'][0]
  25. print(f"下载 {au['title']}")
  26. resp = await sess.get(url, headers={
  27. "User-Agent": "Mozilla/5.0",
  28. "Referer": "https://www.bilibili.com/"
  29. })
  30. with open(file, 'wb') as f:
  31. while True:
  32. chunk = await resp.content.read(1024)
  33. if not chunk:
  34. break
  35. f.write(chunk)
  36. sync(main())