欢迎关注公众号可以查看更多完整文章

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实现显示。如下图所示:

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

直接请求不同的链接,得到页面信息并解析就可以了:
资源列表和账户信息的请求,解析,和显示大致就是这样。
声明:
本文地址:QT实现CSDN上传资源管理助手Demo之(3)请求上传资源页面并解析_GreenArrowMan-CSDN博客-CSDN博客
交流QQ:1245178753
源码下载:https://github.com/xdd1990/QtResourceAssistant

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

  1. mac连不上android手机助手,安卓设备连接不上爱思助手时怎么办?

    使用爱思助手把安卓设备上的数据迁移到iPhone设备上时,遇"设备连接断开,请检查当前网络连接"时怎么办?本次小编为您带来了安卓设备连接不上爱思助手时怎么办的教程,不知道怎么弄得小 ...

  2. java http post上传文件_Java通过HTTP POST请求上传文件

    我想创建一个Java应用程序来执行以下在Windows上的CURL中工作.Java通过HTTP POST请求上传文件 curl -x XXX.XXX.XXX.XXX:8080 -X POST --da ...

  3. java 模拟post上传文件_JAVA模拟HTTP post请求上传文件

    在开发中,我们使用的比较多的HTTP请求方式基本上就是GET.POST.其中GET用于从服务器获取数据,POST主要用于向服务器提交一些表单数据,例如文件上传等.而我们在使用HTTP请求时中遇到的比较 ...

  4. ios post上传文件到服务器,iOS post请求上传文件(OC)

    首先这我自址哈这工边识框处己按后大都加控不架的是文本样式,实比抖朋要插支一圈不者地器享说几现代码如下 #d如算上处定面一这我作问汇u应色会进灯样近efine HTTP_CONTENT_BOUNDARY ...

  5. 【Demo】HTML5 拍照上传

    本文主要讲解 手机浏览器 如何拍照 为什么会有这个需求 最近做一个项目要用到拍照然后上传照片,但是网页拍照一般都是用Flash做的,而我们主要是H5页面,如果在微信里面有权限就可以通过JSSDK调起摄 ...

  6. cropper.js 裁剪图片并上传(文档翻译+demo)(转)

    官网http://fengyuanchen.github.io/cropper/ 文档https://github.com/fengyuanchen/cropper/blob/master/READM ...

  7. 优酷视频上传api及demo代码

    1,优酷正常上传流程: 1). create:连接开放平台上传接口服务器,服务器端会返回upload_token以及upload_server_uri. 2). create_file:连接上传服务器 ...

  8. 上传问题总结(文件大小检测,大文件上传)

    PHP上传问题总结(文件大小检测,大文件上传) 由于涉及到本地和服务器两方面的安全问题,所以基于input type="file"形式的页面文件上传一直处于一个很尴尬的位置.一方面 ...

  9. ios 拍照上传到服务器_ios端浏览器拍照上传到服务器,图片被旋转90度 php 解决方案...

    1.可以通过前端进行解决,本案例通过后端解决的 判断请求的浏览器的ua,如果是ios浏览器则进行90度旋转 重点来了: 必须确保检测的图片是ios设备上传的完整图片,不要在前端压缩过的,因为压缩后的图 ...

最新文章

  1. 作为计算机专业的你,这些点你命中了哪些?
  2. 单件模式(Singleton Pattern)
  3. 关于 Android 进程保活,你所需要知道的一切
  4. [转载]ArcMap中如何自制符号库(二)
  5. 由浅入深:自己动手开发模板引擎——解释型模板引擎(二)
  6. Flink中的window知识体系与scala完整案例
  7. C# 线程间不能调用剪切板的问题
  8. c++中vecto容器r常使用的相关函数
  9. Mint-UI组件 MessageBox为prompt 添加判断条件
  10. 折腾一天,获取下列多选框的所有选中值,原生js可直接通过obj.val()来获取,可jq不行,要通过循环取值来获取;...
  11. java volatile 和Transient 关键字
  12. oracle理论笔试题,Oracle数据库笔试题(附答案)
  13. Window系统安装FFmpeg教程
  14. 离散数学 1. 符号表、集合和命题
  15. 计算机粘贴不起作用,教您复制粘贴不能用怎么解决
  16. 如何将二维数组转化为一维数组
  17. 《Unsupervised Part-based Weighting Aggregation of Deep Convolutional Features for Image Retrieval》笔记
  18. windows win10笔记本如何修改屏幕显示亮度、对比度、色调、饱和度?(英特尔显卡控制中心)
  19. 发展你的GDS的应用技术
  20. Wallpaper (18)

热门文章

  1. 管家婆分销v3服务器要什么系统,管家婆分销ERPV3系统使用培训-20210723010355.pptx-原创力文档...
  2. Fall 2020 Berkeley cs61a hw01答案
  3. 阿里资深软件测试工程师推荐—混沌工程(Chaos Engineering)初识
  4. 程序员必会的十步快速学习法(附书单)
  5. DNS解析常见问题:如何添加AAAA记录?
  6. ReactiveCocoa Documents 翻译(基于版本V2.5)
  7. java学习资源第二弹,持续更新方便你我
  8. 【IDE-Visual Studio】无法启动程序 xxx exe 由于应用程序配置不正确,未能启动此应用程序
  9. Ubuntu及GL环境安装手册
  10. Linux也可以这样美——Ubuntu18.04安装、配置、美化-踩坑记