基於QT的網路音樂播放器(三)
阿新 • • 發佈:2018-12-13
得到AlbumID和FileHash後訪問http://www.kugou.com/yy/index.php?r=play/getdata&hash= &album_id= &_=1497972864535 其中hash後面跟的就是前面我們得到的FileHash,album_id後面就是跟我們前面得到的AlbumID。
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()<<json_error.errorString();
}
}
void KuGou::parseJson_getplay_url(QString json) //解析得到歌曲
{
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();
QString play_urlStr("");
if(valuedataObject.contains("play_url"))
{
QJsonValue play_url_value = valuedataObject.take("play_url");
if(play_url_value.isString())
{
play_urlStr = play_url_value.toString(); //歌曲的url
if(play_urlStr!="")
{
emit mediaAdd(play_urlStr);
}
}
}
if(valuedataObject.contains("audio_name"))
{
QJsonValue play_name_value = valuedataObject.take("audio_name");
if(play_name_value.isString())
{
QString play_name = play_name_value.toString(); //歌曲名字
if(play_urlStr!="")
{
emit nameAdd(play_name);
}
}
}
if(valuedataObject.contains("lyrics")) //lrc
{
QJsonValue play_url_value = valuedataObject.take("lyrics");
if(play_url_value.isString())
{
QString play_lrcStr = play_url_value.toString();
if(play_urlStr!="")
{
if(play_lrcStr != "")
{
emit lrcAdd(play_lrcStr);
}
else
{
emit lrcAdd("沒有歌詞");
}
}
}
}
}
}
}
}
}
基本上都是這些內容了,得到了歌曲的url以及lrc歌詞的內容。
上一篇:介面的整體佈局 下一篇:歌詞顯示