公主连结 Re:dive QQ bot 项目概述
游戏资讯QQbot,涉及到了很多关于爬虫,接口,Json,SQL数据库,Java Spring,Maven,GitLab的使用和小知识点。
零散的知识
git MERGING 状态解决
1
2git reset --hard head
# 回退到上一步.msi是二进制安装文件
日志文件重定向,spring的配置文件
.xml或.yml这类文件是配置文件,也就是可以被编程语言识别的东西
git的两种clone方式:
- HTTP
- SSH
前端调用controller。然后controller处理请求。再调用service处理业务逻辑。
- 现在基本上所有的互联网公司。都是这么个结构(贫血模型)。
- 前后端分离。前端发出请求。
- 前端的请求到controller中。
- 由controller处理请求并响应。
- 由service处理业务。
- 由dao进行数据交互进行分层开发。
相较于VS Code,typora更加简洁,就图片插入和一些markdown设定而言更加快捷。
在WWW上每一条信息都有唯一网络地址,这就是URL
Gitlab 详细信息
git私有仓库,采用apache协议,优质开源,且具有较高的保密性。
URL | account | password |
---|---|---|
http://***.***.**.***:****/ | XXXXXXXX@XXX.com | XXXXXXX |
Git忽略文件
git忽略文件的两种方法:一种是完全不,一种是停止更新。
- .gitignore
- 敲指令消除更新
- 来源:Git忽略文章链接
1
2
3
4
5# 标记文件,该文件后续的变化都不会更新到index tree
git update-index --assume-unchanged [filename]
# 恢复对文件的版本控制
git update-index --no-assume-unchanged [filename]gitignore的注意点一定不要忘记,在新加入了不想提交的内容时一定要清缓存
1
2# 最后的一个“.”不要忘了
git rm -r --cached .gitignore是把双刃剑,尤其是在切分支的时候,一定要把gitignore里没有被track的文件备份一份
链接MySQL
“dbc:mysql:” 需要服务器地址 + 库名 + 用户名 + 密码 + tomcat/http接口的端口
- 地址:<XXXXXXXXXXXXXXXXXXX.com>
- 当然具体的语法还是需要更加深入的学习和记忆。
库名 用户名 密码 port name userName password 4-digit port 直接连结数据库的时候使用的是数据库端口
- 对于MySQL,默认端口port为:3306
动态爬虫
对象网页:
爬取网页:https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/space_history?host_uid=353840826
思路
就是一般的思路,没有特殊的地方
- 获取网页HTML
- 通过formatFilter筛出需要的信息
- 整理成单一String格式
- 输出动态信息
过程
- 获取网页HTML/Json
使用HttpURLConnection类库
URL.getcontent 方法返回的是URL的信息,不是对应网站的内容
java API一定要看好哪些是abstract,哪些是可以用的
1
2//最短解决方法
String pageContent = IOUtils.toString(URI.create("[urlAddress]"));
筛出需要的信息
Jackson 包的使用更加简介高效,替代JsonParser(JsonObject 包)
1
2
3
4
5
6
7
8
9ObjectMapper objectMapper = new ObjectMapper();
try {
JsonNode node = objectMapper.readValue(pageContent, JsonNode.class);
//就使用get get get 就行
JsonNode brandNode = node.get("data").get("cards").get(0).get("card");
String theCard = brandNode.asText();
} catch (IOException e) {
e.printStackTrace();
}这个用正则表达式实现内容提取
1
2
3
4
5
6
7
8
9
10
11
12//设置正则表达式
Pattern pattern = Pattern.compile("description.*category");
Matcher dataMatcher = pattern.matcher(bilibiliCardContent);
//一定要有dataMatcher.find()这一步,可以使用while来不停的截取
if (dataMatcher.find()) {
messageTemp = dataMatcher.group();
} else {
messageTemp = "没有哦";
}
int messageLength = messageTemp.length();
//截取真正的内容(因为有pattern的问题)
BilibiliCardUnicodeContent = messageTemp.substring(14, messageLength - 11);JsonParser 已经被标注@deprecated
JaonParser 直接调用静态的方法就OK
1
2
3//创建jsonObject对象
String pageContent = "XXXXXXX"
JsonObject json = (JsonObject) JsonParser.parseString(pageContent);
整理成单一String格式
Unicode(16进制)文本转换
使用到的知识:
Pattern(视情况而定) Integer \\u[a-f0-9A-F]{1,4} parseInt(String hexCode, 16)
replaceAll(regex,string) 返回一个修改后的string,而不是在原来的文本上修改
明文换行符就是显示:\n
输出动态信息
项目中的图片记录
彩蛋:神奇的验证码