基于Qt的网络音乐播放器(四)酷狗API接口获取歌曲的搜索列表和歌曲的播放 您所在的位置:网站首页 获取歌曲列表失败 基于Qt的网络音乐播放器(四)酷狗API接口获取歌曲的搜索列表和歌曲的播放

基于Qt的网络音乐播放器(四)酷狗API接口获取歌曲的搜索列表和歌曲的播放

2023-12-15 17:26| 来源: 网络整理| 查看: 265

网络播放器系列:

qt 布局和样式表基于Qt的音乐播放器(一)添加音频文件,播放音乐,更新进度条基于Qt的音乐播放器(二)切换歌曲,调节音量,调节语速,暂停基于Qt的音乐播放器(三)通过酷狗音乐的api接口,返回json格式歌曲信息(播放地址,歌词,图片)项目已上传GitHub(更新中),点击获取代码中使用到了下面的头文件:#include #include #include #include #include #include #include #include #include #include==创作不易,你们的三连是我创作的动力!==1.效果图 老规矩,空口无凭,先上动态图,抓住你们的胃。 在这里插入图片描述请忽视一些小细节,小BUG,后期会慢慢修复,嘿嘿! 2.准备好前面获取的酷狗api接口

第一个是搜索接口:http://mobilecdn.kugou.com/api/v3/search/song?format=json&keyword===你需要填的==&page===你需要填的==&pagesize===你需要填的==

keyword:搜索的内容。page:搜索的页数pagesize:返回的数据量,填10就是返回1首歌曲的数据。第一目标个是通过该接口,实现歌曲搜索,第二个目标是通过该接口获取特定歌曲的hash和album_id的值用于下面歌曲的播放,文字图片以及歌词(下一篇讲)的显示

第二个是歌曲详细接口:http://www.kugou.com/yy/index.php?r=play/getdata""&hash===你需要填的==&album_id===你需要填的==&_=1497972864535

hash和album_id都是第一个接口返回json解析出来的。通过该接口,我们可以得到歌曲播放地址,图片地址,歌词等等3.网络歌曲搜索实现别忘了添加#include 和 #include两个头文件

mainwindow.h

//添加类成员 QNetworkAccessManager * network_manager; QNetworkRequest * network_request;

mainwindow.cpp

//构造函数中进行信号和槽的链接 //connect 有不同的写法,replyFinished也就是replyFinished()。 network_manager = new QNetworkAccessManager(); network_request = new QNetworkRequest(); connect(network_manager, &QNetworkAccessManager::finished, this, &MainWindow::replyFinished); //点击搜索按钮调用该函数,参数为搜索框内容 void MainWindow::search(QString str) { QString KGAPISTR1 = QString("http://mobilecdn.kugou.com/api/v3/search/song?format=json" "&keyword=%1&page=1&pagesize=18").arg(str); network_request->setUrl(QUrl(KGAPISTR1)); network_manager->get(*network_request); } //为了简化代码,只使用参数keyword //槽函数 void MainWindow::replyFinished(QNetworkReply *reply) { //获取响应的信息,状态码为200表示正常 QVariant status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute); //无错误返回 if(reply->error() == QNetworkReply::NoError) { QByteArray bytes = reply->readAll(); //获取字节 QString result(bytes); //转化为字符串 qDebug()item(i,0)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter); ui->tableWidget->setItem(i,1,new QTableWidgetItem(singername)); ui->tableWidget->item(i,1)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter); ui->tableWidget->setItem(i,2,new QTableWidgetItem(album_name)); ui->tableWidget->item(i,2)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter); QString time = QString("%1:%2").arg(duration/60).arg(duration%60); ui->tableWidget->setItem(i,4,new QTableWidgetItem(time)); ui->tableWidget->item(i,4)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter); } } } } } } } } else { qDebug() setUrl(QUrl(KGAPISTR1)); //这句话很重要,我们手动复制url放到浏览器可以获取json,但是通过代码不行,必须加上下面这句才可以 network_request2->setRawHeader("Cookie","kg_mid=2333"); network_request2->setHeader(QNetworkRequest::CookieHeader, 2333); network_manager2->get(*network_request2); } void MainWindow::replyFinished2(QNetworkReply *reply) { //获取响应的信息,状态码为200表示正常 QVariant status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute); //无错误返回 if(reply->error() == QNetworkReply::NoError) { QByteArray bytes = reply->readAll(); //获取字节 QString result(bytes); //转化为字符串 parseJsonSongInfo(result);//解析json } else { //处理错误 qDebug()attribute(QNetworkRequest::HttpStatusCodeAttribute); //无错误返回 if(reply->error() == QNetworkReply::NoError) { QByteArray bytes = reply->readAll(); //获取字节 //由于获取的图片像素过大,而我们显示的图片很小,所以我们需要压缩图片的像素,我们label的大小为45*45,所以我们把图片压缩为45*45 QPixmap pixmap; QSize picSize(45,45); pixmap.loadFromData(bytes); //pixmap.save("url"); 也可以现在图片 ui->label_10->setPixmap(pixmap.scaled(picSize)); } else { //处理错误 qDebug()


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有