小天0027 发表于 2020-4-11 09:43

python + moresound 音乐下载脚本

本帖最后由 小天0027 于 2020-4-11 09:44 编辑

####    最近因为无聊,又想听歌,就看了下论坛大神的帖子,然后自己写了一遍,粗糙的脚本,初学者应该也能看的懂(毕竟我也是初学的),哈哈
## 感谢    考拉熊<https://www.52pojie.cn/thread-823339-1-1.html>,此处只是更新部分脚本,并没有集成TK,毕竟我学不会UI设计(好吧,我承认是我偷懒)
      ## 哈哈,希望有大佬可以把界面写出来,如有违规,请删除
      
### 这里我用Markdown 编辑的时候显示是白色背景,不知道发出去之后会不会变成黑色,白色背景下面有些字符显示不到,如果看到的话,可以选择代码去看,,,emmmm 还是循例说一句,此代码仅供学习使用

*废话不多说,上代码 *
~~~~ Python
#!/usr/bin/env python

import requests
import json
from re import sub

class MoreSound(object):
      # 初始化请求头,好像要检测cookies,cookies貌似也不过期,哈哈
    def __init__(self):
      headers = {
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36',
            'cookie': 'XLA_CI=524d712cbc042638e82facf37fac93e4; IP=cBUpkdzEhlphEhKRGYnYs79LiFtojigjY%252Fy1spZXf4M%253B; QQMUSIC_SIP=%5B%22http%3A//122.5.0.155/amobile.music.tc.qq.com/%22%2C%22http%3A//122.5.0.156/amobile.music.tc.qq.com/%22%2C%22http%3A//122.5.0.144/amobile.music.tc.qq.com/%22%5D; QQ=',
      }
      self.headers = headers

      #搜索歌曲并返回 歌名 以及 歌手列表
    def get_list(self, s_name):
      id_list = []
      name_list = []
      n = 1
      url = 'https://moresound.tk/music/api.php?search=mg'
      data = {
            'w': s_name,
            'p': '1',
            'n': '15',
      }
      res = requests.post(url=url, headers=self.headers, data=data)
      res = json.loads(res.text)
      info = res['song_list']
      # print(info)
      print('编号', '\t', '歌名---' , '\t','---歌手')
      for k in info:

            song_name = k['songname']
            song_name = sub('<sup.*|\n|\r|', '', str(song_name)).replace(' ', '')
            song_id = k['songmid']
            singer = k['singer']['name']
            id_list.append(song_id)
            name_list.append(song_name)
            print(n, '\t', song_name+'---'+ singer)
            n += 1

      return id_list, name_list

      #得到的歌曲信息
    def get_info(self, id):
      n = 1
      type_list = []
      data = {'mid': id, }
      url = 'https://moresound.tk/music/api.php?get_song=mg'
      res = requests.post(url=url, data=data, headers=self.headers)
      res = json.loads(res.text)
      url_info = res['url']

      print('编号', '\t', '格式')

      for key, val in zip(url_info.keys(), url_info.values()):
            type_list.append(val)
            print(n, '\t', key)
            n += 1

      return type_list
               
      # 获取真正的url 并下载保存
    def get_real_url(self, type_id, name):
      url = 'https://moresound.tk/music/'
      url = url + type_id
      res = requests.get(url=url, headers=self.headers)
      res = json.loads(res.text)
      try:
            ty = res['suffix']
            real_url = res['url']
            r = requests.get(url=real_url, headers=self.headers, stream=False)
                                                #此处保存在F:\music文件夹,没有请新建
            with open('F:\\music\\{0}.{1}'.format(name, ty), 'wb') as f:
                f.write(r.content)
                # for chunk in r.iter_content():
                #   f.write(chunk)
      except Exception as e:
            print('暂无资源,请重新选择!')

      print('done!')



if __name__ == '__main__':
    while True:
      c = input('请输入歌名或者歌手名字,回车确认,输入Q退出!:')
      if c.lower() =='q':
            break
      a = MoreSound()
      id_list, name_list = a.get_list(c)
      # print(id_list)
      s_id = input('请输入需要下载的歌曲编号,回车确认:')
      id = id_list
      name = name_list
      type_list = a.get_info(id)
      t_id = input('请输入需要下载的格式,回车确认:')
      type_id = type_list
      b = a.get_real_url(type_id, name)
                              
~~~~

qunaliangne 发表于 2020-4-11 10:14

刚刚试了,到了最后一步,没有资源的话,直接退出了。要重新搜索。我改了一下,没有资源格式返回请重新选择资源(只是单独一个没有),这样就不用再重新搜索歌曲。又要重新再来一遍
同样是初学者

moda 发表于 2020-4-12 13:46

我是逸先生 发表于 2020-4-11 20:08
@moda 摩狗,你的音乐站被爬了,哈哈哈。说实话,以前还以为你OK的,现在你把果核也给举报了,才发现你这人 ...

无知,那个tk都不在腾讯上班了,要不是有个沙雕在群里哔哔,我都懒得做样子给他看

UPC 发表于 2020-4-11 10:08

:lol学习了,蛮好的

vethenc 发表于 2020-4-11 10:19

感谢分享

larden520 发表于 2020-4-11 10:28

文件保存名乱码

龙出天翔 发表于 2020-4-11 10:33

厉害顶一个。。

小天0027 发表于 2020-4-11 15:21

qunaliangne 发表于 2020-4-11 10:14
刚刚试了,到了最后一步,没有资源的话,直接退出了。要重新搜索。我改了一下,没有资源格式返回请重新选择 ...

大哥牛逼;www

小天0027 发表于 2020-4-11 15:24

larden520 发表于 2020-4-11 10:28
文件保存名乱码

{:1_924:} 不会吧,我几个朋友试过都没问题

园林艺人 发表于 2020-4-11 16:22

试了试,在下载专辑封面和歌词的时候还需要加个判断,与MV和音乐分开拼接下载链接,我这专辑封面和歌词下载失败,MV和音乐下载成功。

qunaliangne 发表于 2020-4-11 17:14

小天0027 发表于 2020-4-11 15:21
大哥牛逼

你才是大哥。这个音乐下载真的挺好的,细节多多优化,还是可行的。互相进步啊,代码这东西都是互相讨论,进步空间会更大
页: [1] 2
查看完整版本: python + moresound 音乐下载脚本