//go下载qq音乐 
package main import (
_ "fmt"
jsoniter "github.com/json-iterator/go"
"io"
"io/ioutil"
"net/http"
"os"
"strconv"
) //练习json解析
//var jsonStr = `{
//"code":0,
//"data":{
//"keyword":"桥边娘",
//"priority":0,
//"qc":[{"text":"桥边姑娘","type":1}],"semantic":{"curnum":0,"curpage":1,"list":[],"totalnum":0},
//"song":{
//"curnum":2,
//"curpage":1,
//"list":[
//{"action":{"alert":2,"icons":8527740,"msg":14,"switch":17413891},
//"album":{"id":9160555,"mid":"0037Yq3H3RznaX","name":"桥边姑娘","pmid":"0037Yq3H3RznaX_1","subtitle":"","title":"桥边姑娘","title_hilight":"<em>桥边姑娘</em>"},"chinesesinger":0,"desc":"","desc_hilight":"","docid":"126909805796459913","file":{"b_30s":0,"e_30s":60000,"media_mid":"001zLvbN1NYMuv","size_128":2931359,"size_128mp3":2931359,"size_320":7328081,"size_320mp3":7328081,"size_aac":4442882,"size_ape":0,"size_dts":0,"size_flac":20665526,"size_ogg":4495348,"size_try":960887,"strMediaMid":"001zLvbN1NYMuv","try_begin":56459,"try_end":84621},"fnote":4009,"genre":0,"grp":[],"id":244625442,"index_album":1,"index_cd":0,"interval":183,"isonly":1,"ksong":{"id":6374470,"mid":"002Rn3IH1mlv0E"},"language":0,"lyric":"","lyric_hilight":"","mid":"001zLvbN1NYMuv","mv":{"id":0,"vid":""},"name":"桥边姑娘","newStatus":1,"nt":87800508,"pay":{"pay_down":1,"pay_month":1,"pay_play":0,"pay_status":0,"price_album":0,"price_track":200,"time_free":0},"pure":0,
//"singer":[{"id":1294564,"mid":"0041vdG63lbLge","name":"海伦","title":"海伦","title_hilight":"海伦","type":0,"uin":0}],
//"status":0,"subtitle":"","t":1,"tag":11,"time_public":"2019-11-09",
//"title":"桥边姑娘",
//"title_hilight":"<em>桥边姑娘</em>",
//"type":0,
//"url":"http://stream10.qqmusic.qq.com/244625442.wma","ver":0,
//"volume":{"gain":-7.768000125885010,"lra":9.609000205993652,"peak":0.9330000281333923}},
//{"action":{"alert":11,"icons":135752,"msg":0,"switch":77587},
//"album":{"id":0,"mid":"","name":"","pmid":"","subtitle":"","title":"","title_hilight":""},
//"chinesesinger":0,"desc":"","desc_hilight":"","docid":"8751829731153775463",
//"file":
//{"b_30s":0,"e_30s":0,"media_mid":"001fkaP431i0UO","size_128":2956833,"size_128mp3":2956833,"size_320":7391798,"size_320mp3":7391798,"size_aac":4415052,"size_ape":0,"size_dts":0,"size_flac":0,"size_ogg":3851434,"size_try":0,"strMediaMid":"001fkaP431i0UO","try_begin":0,"try_end":0},
//"fnote":8013,"genre":0,"grp":[],"id":127400312,"index_album":0,"index_cd":0,"interval":184,"isonly":0,
//"ksong":{"id":0,"mid":""},
//"language":0,"lyric":"","lyric_hilight":"",
//"mid":"002rI3Yb1nZjPy",
//"mv":{"id":0,"vid":""},
//"name":"桥边姑娘","newStatus":1,"nt":1324451929,"pay":{"pay_down":0,"pay_month":0,"pay_play":0,"pay_status":0,"price_album":0,"price_track":0,"time_free":0},"pure":0,
//"singer":[{"id":3209257,"mid":"001a520s0HBgIS","name":"张茜","title":"张茜","title_hilight":"张茜","type":1,"uin":0}],"status":0,"subtitle":"","t":1,"tag":0,"time_public":"","title":"桥边姑娘","title_hilight":"<em>桥边姑娘</em>","type":0,"url":"http://stream10.qqmusic.qq.com/127400312.wma","ver":0,
//"volume":{"gain":0.0,"lra":0.0,"peak":0.0}}],"totalnum":600},"tab":0,"taglist":[],"totaltime":0,"zhida":{"type":null}},
//"message":"",
//"notice":"",
//"subcode":0,
//"time":1578533969,
//"tips":""
//}` type Datas struct {
Code int `json:"code"`
Message string `json:"message"`
Time int `json:"time"`
Data Data `json:"data"`
}
type Data struct {
Keyword string `json:"keyword"`
Song Song `json:"song"`
} type Song struct {
Curnum int `json:"curnum"`
List []List `json:"list"`
} type List struct {
Title string `json:"title"`
TimePublic string `json:"time_public"`
Mid string `json:"mid"`
Name string `json:"name"`
ID int `json:"id"`
File File `json:"file"`
Album Album `json:"album"`
Singer []Singer `json:"singer"`
} type Singer struct {
Name string `json:"name"`
} type File struct {
StrMediaMid string `json:"strMediaMid"`
} type Album struct {
Name string `json:"name"`
} type Lyric struct {
UserIp string `json:"userip"`
Data LyData `json:"data"`
}
type LyData struct {
Expiration int `json:"expiration"`
Items []Item `json:"items"`
}
type Item struct {
Vkey string `json:"vkey"`
} /**
下载QQ音乐
@param string keyword 歌曲名称关键词
@param int num 需要下载的歌曲数量
*/
func download(keyword string, num int) {
pathPwd, _ := os.Getwd()
url := "https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.song" +
"&searchid=57124856116396257&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&" +
"n=" + strconv.Itoa(num) + "&w=" + keyword + "&g_tk=5381&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0"
resp, err := http.Get(url)
if err != nil {
println("get出错", err)
return
} defer resp.Body.Close()
jsonstr, err := ioutil.ReadAll(resp.Body)
if err != nil {
println(err)
return
}
jsonStr := jsonstr
strMediaMids := []string{}
songmids := []string{}
songnames := []string{}
singers := []string{}
albumns := []string{}
songid := []int{}
data := Datas{}
var json2 = jsoniter.ConfigCompatibleWithStandardLibrary
_ = json2.Unmarshal([]byte(jsonStr), &data)
//fmt.Println(data.Data.Song.List)
for _, v := range data.Data.Song.List {
strMediaMids = append(strMediaMids, v.File.StrMediaMid)
songmids = append(songmids, v.Mid)
songnames = append(songnames, v.Name)
singers = append(singers, v.Singer[0].Name)
albumns = append(albumns, v.Album.Name)
songid = append(songid, v.ID)
} for k, v := range strMediaMids {
//将strMediaMids和songmids重新组合到url中
url2 := "https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?&jsonpCallback=MusicJsonCallback&format=json&cid=205361747&songmid=" + songmids[k] + "&filename=C400" + v + ".m4a&guid=6612300644"
println(url2)
resp, err := http.Get(url2)
if err != nil {
println("get出错", err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
println("出错了", err)
return
}
var filter = Lyric{}
json2.Unmarshal([]byte(body), &filter)
vkey := filter.Data.Items[0].Vkey
//这是最终的歌曲url
song_url := "http://dl.stream.qqmusic.qq.com/C400" + v + ".m4a?vkey=" + vkey + "&guid=6612300644&uin=0&fromtag=66"
//歌词url
lyric_url := "https://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric.fcg?nobase64=1&musicid=" + strconv.Itoa(songid[k]) + "&callback=jsonp1&g_tk=5381&jsonpCallback=json&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0"
client := &http.Client{}
refer := "https://y.qq.com/n/yqq/song/" + songmids[k] + ".html"
request, err := http.NewRequest("GET", lyric_url, nil)
request.Header.Add("Referer", refer)
request.Header.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36")
response, err := client.Do(request)
defer response.Body.Close()
if err != nil {
return
}
body2, err := ioutil.ReadAll(response.Body)
if err != nil {
println("出错了", err)
return
}
println(string(body2))
println("正在下载--->" + songnames[k])
res, err := http.Get(song_url)
if err != nil {
panic(err)
}
//f, err := os.Create(pathPwd + "/" + songnames[k] + strconv.Itoa(k+1) + ".mp3")
f, err := os.Create(pathPwd + "/" + songnames[k] + ".mp3")
if err != nil {
panic(err)
}
io.Copy(f, res.Body)
println("下载第" + strconv.Itoa(k+1) + "首<" + songnames[k] + ">已经保存成功嘿嘿嘿~~~") }
} func main() {
//传参形式
//if len(os.Args) <= 1 {
// fmt.Println("请输入需要下载的音乐名称.")
// return
//}
//fmt.Println("音乐名称 ", os.Args[1])
//num := os.Args[2]
//println(num)
//todo:可以加入协程来耍耍
download("冯提莫", 3)
}

  go版本下载qq音乐 略有粗糙 见谅 见谅

go 下载qq音乐的更多相关文章

  1. 亲测可用!免费下载QQ音乐大部分资源!

    优化后亲测可用!免费下载QQ音乐大部分资源 通知 时间问题 博客园这边暂时停更要下载的去GitHub或者90盘 GitHub项目地址 https://github.com/TotoWang-hhh/m ...

  2. Python 应用爬虫下载QQ音乐

    Python应用爬虫下载QQ音乐 目录: 1.简介怎样实现下载QQ音乐的过程: 2.代码 1.下载QQ音乐的过程 首先我们先来到QQ音乐的官网: https://y.qq.com/,在搜索栏上输入一首 ...

  3. 爬虫下载QQ音乐:获取所有歌手-每个歌手的专辑-每个专辑里的歌曲

    # coding=utf-8 # !/usr/bin/env python ''' author: dangxusheng desc : 稍微有点难度,需要多次请求获取key date : 2018- ...

  4. JY播放器【QQ音乐破解下载】

    今天给大家带来一款神器----JY播放器.可以直接下载QQ音乐的歌曲. 目前已经支持平台(蜻蜓FM.喜马拉雅FM.网易云音乐.QQ音乐) 使用方法: 在网页打开QQ音乐网站找到你要听的歌曲或歌单.复制 ...

  5. Deepin-安装QQ音乐(Windows程序)

    打开命令行,输入: sudo apt-get install wine 安装完成后,下载QQ音乐的安装包 然后安装 示例:wine xx.exe 实例:wine QQMusic.exe 安装完成,启动 ...

  6. python3 爬取qq音乐作者所有单曲 并且下载歌曲

    1 import requests import re import json import os # 便于存放作者的姓名 zuozhe = [] headers = {'User-Agent': ' ...

  7. QQ音乐MP3下载

    QQ音乐MP3下载 没错本次写的内容的对象是我们熟知的QQ Music. 本篇文章涉及内容包括:Python,爬虫,json解析,request 库的使用 缘起 前几天刷B站无意中又刷到了一首神曲,“ ...

  8. 转发一个关于下载qq无损音乐的博客

    import requests import json headers = { 'Host': 'c.y.qq.com', 'Referer': 'http://c.y.qq.com/', 'User ...

  9. Python Scrapy的QQ音乐爬虫 音乐下载、爬取歌曲信息、歌词、精彩评论

    QQ音乐爬虫(with scrapy)/QQ Music Spider UPDATE 2019.12.23 已实现对QQ音乐文件的下载,出于版权考虑,不对此部分代码进行公开.此项目仅作为学习交流使用, ...

随机推荐

  1. Jarque-Bera test|pp图|K-S检验|

    Jarque-Bera test: 如何绘制pp图?   找该直线的截距和斜率,通过截距和斜率的值找到正态参数均值和方差,可对这些正态参数进行正态检验. K-S检验的的特点? 并不是只针对正态分布,是 ...

  2. vs2015的密钥

    最近一直提示VS要登陆,登陆完就说评估期已到,搞得很烦. VS2015 enterprise版本得密钥:  HM6NR-QXX7C-DFW2Y-8B82K-WTYJV    亲测有效!!! 专业版本的 ...

  3. android记帐本、涂鸦、仿腾讯新闻、仿bilibili、Markdwon便签、资讯APP等源码

    Android精选源码 kotlin版仿哔哩哔哩动画Android客户端源码 android实现图片涂鸦效果源码 Android 开源记账本项目源码 android高仿腾讯新闻app源码 androi ...

  4. vue基本配置和生命周期

    Vue的实例是Vue框架的入口,其实也就是前端的ViewModel,它包含了页面中的业务逻辑处理.数据模型等,当然它也有自己的一系列的生命周期的事件钩子,辅助我们进行对整个Vue实例生成.编译.挂着. ...

  5. F. Moving On

    http://codeforces.com/gym/102222/problem/F fory #include<bits/stdc++.h> using namespace std; t ...

  6. sqlserver多表联查分页

    select * from(select H_order.Id ,H_order.userID, ROW_NUMBER() over (order by H_order.Id Desc) as row ...

  7. 细看Java序列化机制

    概况 在程序中为了能直接以 Java 对象的形式进行保存,然后再重新得到该 Java 对象,这就需要序列化能力.序列化其实可以看成是一种机制,按照一定的格式将 Java 对象的某状态转成介质可接受的形 ...

  8. group compare vs pair compare

    成对总体检验是令y1=x11-x12:y2=x21-x22等,令新的随机变量y去做假设检验.此方法适用于排除物理因素影响,对差异更敏感,所以适用于小样本.而使用两个总体均值比较的方法适用于大样本.

  9. HTML table表头固定

    HTML table表头固定 说说我在最近项目中碰到的css问题吧,作为问题知识集合总结笔记: <!DOCTYPE html> <html> <head> < ...

  10. [洛谷P3391] 文艺平衡树 (Splay模板)

    初识splay 学splay有一段时间了,一直没写...... 本题是splay模板题,维护一个1~n的序列,支持区间翻转(比如1 2 3 4 5 6变成1 2 3 6 5 4),最后输出结果序列. ...