QT实现CSDN上传资源管理助手Demo之(3)请求上传资源页面并解析

来源:互联网 发布:mathematica mac 编辑:程序博客网 时间:2024/05/17 06:03

QT实现CSDN上传资源管理助手Demo之(3)请求上传资源页面并解析

请求自己上传的资源页面,只需要请求http://download.csdn.net/my/uploads/就可以了。在请求结果中解析自己的账户相关的信息,比如等级和分数。
发起请求:
void QtResourceAssistant::downloadInfoRequest(int Page){connect(mNetworkAccessManager, &QNetworkAccessManager::finished, this, &QtResourceAssistant::downloadInfoReply);QNetworkRequest NetworkRequest(QUrl("http://download.csdn.net/my/uploads/" + QString::number(Page)));NetworkRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");NetworkRequest.setRawHeader(QByteArray("Referer"), QByteArray("http://download.csdn.net/"));NetworkRequest.setRawHeader(QByteArray("Cookie"), mCookies.toLatin1());mNetworkAccessManager->get(NetworkRequest);}
接收请求信息:
void QtResourceAssistant::downloadInfoReply(QNetworkReply *Reply){disconnect(mNetworkAccessManager, &QNetworkAccessManager::finished, this, &QtResourceAssistant::downloadInfoReply);QString strReply = Reply->readAll();Reply->deleteLater();if (strReply.isEmpty()){QMessageBox::warning(this, tr("警告"), tr("获取下载信息失败,请检查网络并重启软件"), QMessageBox::StandardButton::Close);return;}//mDownloadInfoWidget->setAvatarImage(loadInternetImage(mUserInfoDialog.getAvatar()));mDownloadInfoWidget->setNickName(mUserInfoDialog.getNickName());mDownloadInfoWidget->parseDownloadInfo(strReply);}
解析请求得到的网页信息:
void QDownloadWidget::parseDownloadInfo(QString strInfo){if (strInfo.isEmpty())return;QRegExp rep("http://c.csdnimg.cn/jifen/images/xunzhang/jianzhang/(\\w+).png");rep.indexIn(strInfo);QString TempString = rep.cap();emit loadLevelImageSignal(TempString);rep.setPattern("</label>(.|\n)+MB");rep.indexIn(strInfo);TempString = rep.cap().remove("</label>").remove("\n").remove(" ");mDownloadSizeLabel->setText(tr(QString("上传权限:" + TempString).toStdString().c_str()));rep.setPattern("积分</label><span>(\\d+)");rep.indexIn(strInfo);TempString = rep.cap().remove("积分</label><span>");mDownloadPointsLabel->setText("<h6>积分</h6><h4><font color=orange>"+TempString+"</font></h4>");rep.setPattern("总排名</label><span>(\\d+)");rep.indexIn(strInfo);TempString = rep.cap().remove("总排名</label><span>");mRankLabel->setText("<h6>总排名</h6><h4><font color=\"orange\">" + TempString + "</font></h4>");rep.setPattern("上传资源</label><span>(\\d+)");rep.indexIn(strInfo);TempString = rep.cap().remove("上传资源</label><span>");mDownloadResourceLabel->setText("<h6>上传资源</h6><h4><font color=\"orange\">" + TempString + "</font></h4>");rep.setPattern("下载资源</label><span>(\\d+)");rep.indexIn(strInfo);TempString = rep.cap().remove("下载资源</label><span>");mUploadResourceLabel->setText("<h6>下载资源</h6><h4><font color=\"orange\">" + TempString + "</font></h4>");rep.setPattern("创建专辑</label><span>(\\d+)");rep.indexIn(strInfo);TempString = rep.cap().remove("创建专辑</label><span>");mCreateAlbumLabel->setText("<h6>创建专辑</h6><h4><font color=\"orange\">" + TempString + "</font></h4>");parseUploadResources(strInfo);}void QDownloadWidget::parseUploadResources(QString strInfo){if (strInfo.isEmpty())return;mUploadResourceWidget->clear();//每页5个for (int i = 0; i < 5; i++){QRegExp rep("/download/(\\w+/\\w+)");rep.indexIn(strInfo);QString TempString = rep.cap();if (TempString.isEmpty())break;QListWidgetItem *Item = new QListWidgetItem(mUploadResourceWidget);QResourceItemWidget *ItemWidget = new QResourceItemWidget(mUploadResourceWidget);Item->setSizeHint(QSize(840, 120));connect(ItemWidget, &QResourceItemWidget::downloadResource, this, &QDownloadWidget::downloadResource);connect(ItemWidget, &QResourceItemWidget::deleteResource, this, &QDownloadWidget::deleteResource);mUploadResourceWidget->addItem(Item);mUploadResourceWidget->setItemWidget(Item, ItemWidget);ItemWidget->setResourceUrl(TempString);rep.setPattern("(.+)" + TempString + "\">");rep.indexIn(strInfo);TempString = rep.cap();strInfo.remove(TempString);TempString = strInfo.left(strInfo.indexOf("</a>"));ItemWidget->setResourceName("<h2>" + TempString + "</h2>");TempString = strInfo.left(strInfo.indexOf("brief\">"));strInfo.remove(TempString + "brief\">");TempString = strInfo.left(strInfo.indexOf("</p>")).remove("\n");ItemWidget->setDescription(TempString.left(45) + "...");//标签最多5个TempString = strInfo.left(strInfo.indexOf("下载个数:</label>")) + "下载个数:</label>";strInfo.remove(TempString);TempString = parseTags(TempString);ItemWidget->setTags(TempString);rep.setPattern("\\d+");rep.indexIn(strInfo);TempString = rep.cap();ItemWidget->setDownloadTime("下载个数:" + TempString);TempString = strInfo.left(strInfo.indexOf("上传时间:</label>")) + "上传时间:</label>";strInfo.remove(0, TempString.length());rep.setPattern("(\\d|-)+");rep.indexIn(strInfo);TempString = rep.cap();ItemWidget->setUploadTime("上传时间:" + TempString);TempString = strInfo.left(strInfo.indexOf("所需积分/C币:</label>")) + "所需积分/C币:</label>";strInfo.remove(0, TempString.length());rep.setPattern("\\d+");rep.indexIn(strInfo);TempString = rep.cap();ItemWidget->setNeedScore("所需积分:" + TempString);}}QString QDownloadWidget::parseTags(QString strInfo){QString TempTags = "";for (int i = 0; i < 5; i++){QString TempString = strInfo.left(strInfo.indexOf("/tag/"));strInfo.remove(TempString);if (strInfo.isEmpty())break;TempString = strInfo.left(strInfo.indexOf(">"));strInfo.remove(TempString + ">");TempString = strInfo.left(strInfo.indexOf("</a>"));TempTags.append("<" + TempString + ">");}return TempTags;}

得到的账户信息和上传资源列表,主界面使用QMainWindow,列表显示使用QListWidget+自定义QWidget实现显示。如下图所示:


并且实现了翻页功能,实现很简单只需要请求不同的页面就可以了。因为每一页的链接后面会有一个数字:

直接请求不同的链接,得到页面信息并解析就可以了:


资源列表和账户信息的请求,解析,和显示大致就是这样。
声明:


本文地址:http://blog.csdn.net/u011417605/article/details/78339470
交流QQ:1245178753
源码下载:https://github.com/xdd1990/QtResourceAssistant
原创粉丝点击