前面说了把主界面的总体设计说了,接下来说一下调用API获取歌曲的url以及歌词等信息。首先我使用的是酷狗的API(调用其他音乐平台的API方法也基本都是差不多的),这个API呢也是我百度找到的。
http://songsearch.kugou.com/song_search_v2?keyword=&page=&pagesize=&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0 其中keyword表示你要搜索的内容(可以是歌手名,也可以是歌曲名字),page表示页数(默认第一页),pagesize表示一页的歌曲数量(默认20首)。其他的就不重要了,也可以去百度了解下。
比如搜索“周杰伦”,在浏览器中输入:
http://songsearch.kugou.com/song_search_v2?keyword=周杰伦&page=&pagesize=&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0 就可以得到返回回来的json数据。
通过解析这些json数据我们可以得到一些有用的信息。我用在线解析给大家看一下数据:
这些数据中代表的东西我就不一一说了,其中对我们有用的就是AlbumID和FileHash,因为接下来我们要通过这两个东西来搜索这首歌曲的信息。
得到AlbumID和FileHash后访问http://www.kugou.com/yy/index.php?r=play/getdata&hash= &album_id= &_=1497972864535 其中hash后面跟的就是前面我们得到的FileHash,album_id后面就是跟我们前面得到的AlbumID。
比如周杰伦的告白气球。
http://www.kugou.com/yy/index.php?r=play/getdata&hash=5FCE4CBCB96D6025033BCE2025FC3943&album_id=1645030&_=1497972864535
我们同样得到返回的json数据,对它进行解析。
这样我们就得到了歌曲的url以及歌词等信息。
接下来看一下qt调用API的代码:
network_manager = new QNetworkAccessManager();
network_request = new QNetworkRequest(); //发送请求一得到AlbumID和FileHash
network_manager2 = new QNetworkAccessManager();
network_request2 = new QNetworkRequest(); //发送请求二得到url和歌词等信息
connect(network_manager2, &QNetworkAccessManager::finished, this, &KuGou::replyFinished2);
connect(network_manager, &QNetworkAccessManager::finished, this, &KuGou::replyFinished);
发送搜索的请求:
void KuGou::search(QString str)
{
//发送歌曲搜索请求
QString KGAPISTR1 = QString("http://songsearch.kugou.com/song_search_v2?keyword="
"%1&page=&pagesize=&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0").arg(str);
network_request->setUrl(QUrl(KGAPISTR1));
network_manager->get(*network_request);
}
得到返回的json信息,调用函数进行解析:
void KuGou::replyFinished(QNetworkReply *reply) //发送搜索请求完成,接受到信息,然后进行解析
{
//获取响应的信息,状态码为200表示正常
QVariant status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
//无错误返回
if(reply->error() == QNetworkReply::NoError)
{
QByteArray bytes = reply->readAll(); //获取字节
QString result(bytes); //转化为字符串
parseJson_getAlbumID(result); //自定义方法,解析歌曲数据
}
else
{
//处理错误
qDebug()<<"处理错误";
}
}
void KuGou::replyFinished2(QNetworkReply *reply) //发送搜索请求完成,接受到信息,然后进行解析 通过歌曲ID搜索
{
//获取响应的信息,状态码为200表示正常
QVariant status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
//无错误返回
if(reply->error() == QNetworkReply::NoError)
{
QByteArray bytes = reply->readAll(); //获取字节
QString result(bytes); //转化为字符串
parseJson_getplay_url(result); //自定义方法,解析歌曲数据
}
else
{
//处理错误
qDebug()<<"处理错误";
}
}
解析返回来的json数据:
void KuGou::parseJson_getAlbumID(QString json) //解析接收到的歌曲信息,得到歌曲ID
{
QByteArray byte_array;
QJsonParseError json_error;
QJsonDocument parse_doucment = QJsonDocument::fromJson(byte_array.append(json), &json_error);
if(json_error.error == QJsonParseError::NoError)
{
if(parse_doucment.isObject())
{
QJsonObject rootObj = parse_doucment.object();
if(rootObj.contains("data"))
{
QJsonValue valuedata = rootObj.value("data");
if(valuedata.isObject())
{
QJsonObject valuedataObject = valuedata.toObject();
if(valuedataObject.contains("lists"))
{
QJsonValue valueArray = valuedataObject.value("lists");
if (valueArray.isArray())
{
QJsonArray array = valueArray.toArray();
int size = array.size();
for(int i = 0;i < size;i++)
{
QJsonValue value = array.at(i);
if(value.isObject())
{
QJsonObject object = value.toObject();
if(object.contains("AlbumID"))
{
QJsonValue AlbumID_value = object.take("AlbumID");
if(AlbumID_value.isString())
{
album_idStr = AlbumID_value.toString(); //歌曲ID信息
}
}
if(object.contains("FileHash"))
{
QJsonValue FileHash_value = object.take("FileHash");
if(FileHash_value.isString())
{
hashStr = FileHash_value.toString(); //hash
}
}
//通过歌曲ID发送请求,得到歌曲url和歌词
QString KGAPISTR1 = QString("http://www.kugou.com/yy/index.php?r=play/getdata&hash=%1&album_id=%2&_=1497972864535")
.arg(hashStr).arg(album_idStr);
network_request2->setUrl(QUrl(KGAPISTR1));
network_manager2->get(*network_request2);
}
}
}
}
}
}
}
}
else
{
qDebug()<
基本上都是这些内容了,得到了歌曲的url以及lrc歌词的内容。
上一篇:界面的整体布局
下一篇:歌词显示
项目源码下载地址:https://download.csdn.net/download/qq_37141865/10703635