本人喜欢在B站上看视频,无奈B站的资源有时候会突然就没了,就会把那些好的资源下载到手机上,主要是PC端的B站貌似不直接支持下载,然后再传到电脑上。在PC端打开相关资源一看,全是数字命名,有用的资料全在JSON文件里。一个俩个还可以手动命名,这一下有几十个,就有点考验人了。遂想利用所学的Qt将其自动命名并移动到特定的文件夹里,而且那个视频的格式是blv的,一般播放器压根打不开,幸好我用的是PotPlayer,可以打开但是播放列表只能显示打开的那个,没打开的就不会显示在播放列表里,还得重新去打开文件播放。我尝试直接更改后缀名为mp4,文件可以播放没播放的文件也能显示在播放列表上,完美。下图是原始的视频资料,其中0.blv就是视频资源,可以用PotPlayer播放,entry.json记载了相关资料,待会命名就得从这里面找相关的名字。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

重新改写了下。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

这个是entry.json里的视频所在文件夹和视频的名字,待会在程序解析json的时候会用到

1.新建工程,然后再widget.h里添加相关头文件

#include <QJsonDocument>        //这个是对JSON文档的支持
#include <QJsonParseError>    //解析JSON时出错就靠它来判断
#include <QJsonObject>        //对JSON对象的支持
#include <QFile>                //文件操作
#include <QDir>                //目录操作
#include <QDebug>            //方便调试

2.创建相关变量并初始化

private:Ui::Widget *ui;QString path;        //文件所在路径QString dPath;        //将提取出来的视频重新放置的文件夹路径QString nameDir;    //视频所在的上层文件夹名,就是entry.json中的type_tag的值QString NameEntry;    //解析出来的视频名字,就是entry.json中的title中的值
path = "F:/B站视频/试试";        //文件所在的路径
dPath = "F:/B站视频/试试/";    //将视频重新存放的路径
readDir();                    //开始解析相应的文件夹

3.readDir()函数的实现,并且这个是按固定格式来的,例如在以我电脑上的路径举例,现在当前目录(试试)一个一个遍历,在每一个文件夹(1)中又再次遍历寻找entry.json文件并进行解析,如果解析成功,则再次进行视频所在的文件夹(lua.flv360.bili2api.16)再次遍历查找视频文件,对其进行重命名(包括更换路径)。由于没重构过,所有整体看起来有点乱,命名也是,还请见谅。(改进了一下,用递归来遍历)

void Widget::dealDir(QString pa)
{QDir dir(pa);if(!dir.exists()){qDebug() << "the dir isn't exist ";return;}//得到当前目录下所有文件夹,不包括.和..QFileInfoList list = dir.entryInfoList(QDir::NoDotAndDotDot|QDir::Dirs);//查找当前文件夹下是否有entry.json文件,利用过滤来查找QStringList filters;filters << "*.json";dir.setNameFilters(filters);QFileInfoList json = dir.entryInfoList();if(json.count() == 1){    //如果找到entry.json文件qDebug() << json.at(0).absoluteFilePath();if(AnalyJson(json.at(0).absoluteFilePath())){QString oldPath = pa+"/"+nameDir+"/";    //得到当前文件路径if(QFile::exists(oldPath+"0.blv")){      //判断是否存在QString newPath = dPath+"/"+NameEntry+".mp4";//得到将要移动的文件绝对路径名if(QFile::rename(oldPath+"0.blv",newPath)){qDebug() << "successful";}}//可能有些会有1.blv,同样处理if(QFile::exists(oldPath+"1.blv")){//寻找1.blv文件QString newPath = dPath+"/"+NameEntry+"(1)"+".mp4";if(QFile::rename(oldPath+"1.blv",newPath)){qDebug() << "(1)successful";}}}return ;}for(int i = 0 ; i < list.count();i ++){QFileInfo f = list.at(i);if(f.isDir()){qDebug() << f.absoluteFilePath();dealDir(f.absoluteFilePath());    //递归遍历}}
}
void Widget::deal()
{dealDir(path);
}

4.AnalyJson(QString pa)的实现,并获取相关信息,如果获取成功则返回true。

bool Widget::AnalyJson(QString pa)
{QFile fileLoad(pa);//加载该该JSON文件if(!fileLoad.open(QIODevice::ReadOnly)){//判断是否打开成功qDebug() << "json is no ";return false;}QByteArray data = fileLoad.readAll();//得到当前文件所有内容fileLoad.close();                    //关闭文件QJsonParseError jsonError;           //用来判断是否解析JSON过程是否出错QJsonDocument jsonDoc(QJsonDocument::fromJson(data,&jsonError));//解析if(jsonError.error != QJsonParseError::NoError){qDebug() << "Json open error";return false;}//将解析出来的文档转化为对象格式QJsonObject obj = jsonDoc.object();QJsonObject page = obj.value("page_data").toObject();NameEntry = page.value("part").toString();    //得到文件名nameDir = obj.value("type_tag").toString();   //得到视频文件所在的文件夹if(!NameEntry.isEmpty() && !nameDir.isEmpty())return true;return false;
}

5.运行结果,成功得到视频

6.总结,整体程序比较简单,先是找到entry.json文件进行解析得到视频文件名和视频所在的文件夹名,然后再在视频文件夹下找到视频文件,利用视频文件名和自定义的文件存放的路径为新的名字,对其进行重命名。代码比较啰嗦,没有好的容错率和可移植性。学习,共勉。

Qt5-将手机上B站下载的视频提取到到电脑上并批量移动到指定文件夹和重命名相关推荐

  1. java语言开发手机游戏_手机上的JAVA游戏和JAVA软件,是电脑上的JAVA语言编写的吗?他们之间有什么联系...

    手机上的JAVA游戏和JAVA软件,是电脑上的JAVA语言编写的吗?他们之间有什么联系以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起 ...

  2. Qt之QFtp 在客户端实现文件上传、下载、新建文件夹、重命名、删除和刷新等功能

    简述 本来是打算用新的类QNetworkAccessManager实现的客户端的文件上传.下载.新建文件夹.重命名.删除和刷新等功能,但是QNetworkAccessManager没有提供原本在QFt ...

  3. Crawler:反爬虫机制之基于urllib库+伪装浏览器+代理访问(代理地址随机选取)+实现下载某网址上所有的图片到指定文件夹

    Crawler:反爬虫机制之基于urllib库+伪装浏览器+代理访问(代理地址随机选取)+实现下载某网址上所有的图片到指定文件夹 导读 基于反爬虫机制之基于urllib库+伪装浏览器+代理访问(代理地 ...

  4. GitHub下载指定文件夹的方法(简单快捷)

    GitHub下载指定文件夹的快捷方法 GitHub上默认是无法下载指定的文件夹,然而有时候我们只需要下载其中一个文件夹的内容,比如下图中的GAN: 可以复制该文件夹的链接: 然后在该网站上即可下载到所 ...

  5. Python下载文件到指定文件夹

    Python下载文件到指定文件夹 import os # 导入os库 import urllib.request # 导入urllib库 import requests as rb # 导入reque ...

  6. python电脑下载了怎么用-怎样在电脑上下载哔哩哔哩的视频?

    新增批量下载工具: /> 这里推荐两款工具:youget 和 星愿浏览器,按需选择,可以让你高速下载近乎全网的视频. You-get /> You-get是GitHub上的一个项目,也可以 ...

  7. 风之大陆电脑版要下载c语言,风之大陆怎么在电脑上玩 风之大陆电脑版安装教程...

    风之大陆手游v1.1.1安卓版 类型:角色扮演大小:978.8M语言:中文 评分:5.0 标签: 立即下载 风之大陆是一款剑与魔法题材RPG手游,玩家在游戏中选择职业开启魔法之旅,很多玩家会选择在电脑 ...

  8. python下载邮箱附件_基于Python3 下载邮箱附件,并解压到指定文件夹

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -*- encoding: gbk -*- # 目前只测试过网易163邮箱,qq邮箱时间格式与163有 ...

  9. wget 命令 指定文件夹_linux下面ftp/wget命令下载文件夹目录

    目标ftp服务器是一个非标准端口的ftp 1.通过shell登录 #ftp    //shell下输入ftp命令,进入到ftp提示符 >open IP  PORT   //IP ,PORT对应为 ...

  10. JMeter学习(八)---jmeter下载文件保存到指定文件夹

    1.创建线程组,在线程组下添加下载的请求和BeanShell Sampler 2.填写BeanShell Sampler信息 3.查看F盘ybb的文件夹中是否保存下载的文件,如果是并发,数字会依次加1 ...

最新文章

  1. Linux安全检查方法
  2. R语言sub函数和gsub函数替换(replace)匹配的字符串实战
  3. 中国AI创新者论坛将于3月21日在清华大学举办
  4. Spring MVC 框架搭建及详解
  5. php 匹配一次,PHP Regex匹配最后一次出现的字符串
  6. H3 BPM报销流程开发示例
  7. java调用浏览器组件来_Java 网页浏览器组件介绍
  8. 如何连接Linux上的服务器 网络编程,Linux 网络编程 一
  9. 蓝桥杯历届试题 地宫取宝 dp or 记忆化搜索
  10. java书籍_Java学习必备书籍(快来收藏)
  11. Swift之UITextField+富文本+代理传值
  12. 正确的电源纹波测试方法
  13. 8.7.1. Declaration of Enumerated Types
  14. lstm 预测诗歌_预测诗歌运动
  15. 读书笔记:我们为什么上班
  16. Widows下安装SCALA
  17. 【第 001 期 · 文献领读】——MRI专题
  18. shell技巧4 - nm命令解决AppStore2.5.2被拒问题
  19. 如何让小红书笔记下沉
  20. 住宅代理和数据中心代理哪个更好?

热门文章

  1. .NET框架设计(1)
  2. 华为IPD 研发模式
  3. linux编译gdal geos,GDAL编译支持GEOS
  4. java对excel插入水印_Java通过POI和JXL给Excel动态添加水印
  5. 月薪30k的PHP架构师的成长路线图1.0!
  6. 蛙跳算法优化VMD参数,惩罚系数,分解层数,matlab语言 ,最小包络熵为适应度函数。
  7. 根据卫星运动矢量计算轨道六根数
  8. 锂离子电池电压与容量的关系及容量计算方法
  9. 服务端软件安全测评标准及实施指南 V1.0
  10. word删除空白页的方法和技巧详细介绍,提高工作效率!!!!!!!!!!!!