抓取UE4 API并生成带索引的Dash文档

不知为何,UE API现在已经不随引擎发布chm的离线文档了,官方发布的最新版本乃是2014年的,UE发展到现在有了很多变化,显然四年前的API文档已经丧失部分参考价值了。但是UE文档站自身的搜索功能就我的体验而言,十分的烂。
所以折腾了一下把UE API的所有页面爬了下来,并且生成了Dash支持的文档,检索起来十分酸爽。(文后附下载链接)

先来看一下成果图(我在Windows下使用的是Zeal,它使用的是Dash的文档源):

最开始的打算是把UE API的文档爬下来之后生成chm,但是在我爬下来之后发现太大了,现在(2018.07.05),UE的API文档html页面总大小为2.89G,做成一个chm不太现实,所以就想到了其他办法——做成Dash支持的文档。
本着不重复造轮子的精神我查了一下有没有相关的实现,查到了一位仁兄几年前做的一个东西:Unreal Engine API documentation in Dash.
该项目地址为:DrummerB/UnrealEngineDocset(作者已经四年没有更新了)
他实现的是把官方提供的chm解包出来,然后通过bs4爬虫框架来生成Dash的文档、并建立索引。我已经直接抓取了所有的Html文件,所以略过这一步。

可以使用wget来下载站点,吐个槽:windows下的WebZIP并不好用。
具体的用法可以从我之前的记录(imzlp.me/notes)里查看。

但是经过生成后发现,当时作者解析的方法和现在UE的API页面已经不一样了,所以我在它的基础上改进了一下,增加了以下几个支持:

  • 对所有成员的索引增加namespace(我手动关闭了Class/Struct/union的,因为增加了namespace后会对索引排序不友好,可以手动开启)
  • 对没有独立页面的变量/函数/枚举等建立类页面的索引(之前作者的是不对没有独立页面的建立索引,会导致有些成员检索不到,我觉得不太好)
  • 增加对Overridden的函数索引支持
  • 增加Constructor/Operator/Emum/Typedef的索引支持
  • 对具有Inheritance Hierarchy的结构,从Inheritance Hierarchy的tag中获取Name,从而避免具有很多同名索引的情况
  • 尽可能多地对不同类的相同名字的成员增加Namespace的标识
  • 一些bug修复和优化

生成大约需要十分钟左右(视机器性能而定,当然Py的效率也是很一般的),用法(要求python2和bs4):

1
$ python2 ue4docset.py -n "UE4" ~/Desktop/API ~/Desktop/UE4.docset

废话不多说,代码在这里(ue4docset.py):

另外,除了代码之外还需要对UE API的页面的css文件做一些处理,把下面红框里的部分隐藏掉(实在太影响观感):

需要做的是修改udn_public.cssnavBar.css

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# udn_public.css
# 将下面列出的替换到udn_public.css中
#contentContainer{
transition: margin-left 0.5s linear 0s;
margin-left:0px;
}
#pagenav
{
margin:0px 10px;
overflow:hidden;
position:relative;
max-width:1562px;
height:0px;
}
#sideinfo
{
position:absolute;
right:-260px;
top:0px;
width:250px;
display: none;
}
#pagecontainer {
margin: 0;
# padding: 5px 265px 0px 5px;
}
#pagenav {
width: auto;
display: none;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
```css
# navBar.css
# 将下面列出的替换到navBar.css
nav#navPanel
{
left:0px;
display: none;
}
div#navigation
{
left:300px;
display: none;
}

其实我对Py和CSS以及bs4爬虫框架都不熟,没有专门学习过,只是这两天用到了就现查现学现用,这样能够解决问题也挺好。

资源下载(Windows下推荐Zeal来使用Dash文档):

UE4.docset.7zapi.unrealengine.com.tar.gz均解压,并将api.unrealengine.com/下的images/Include/INT三个目录放入UE4.docset/Contents/Resources/Documents下即可。
如果使用的是Zeal,则将UE4.docset放入Zeal安装目录下的docsets下即可。

全文完,若有不足之处请评论指正。

扫描二维码,分享此文章

本文标题:抓取UE4 API并生成带索引的Dash文档
文章作者:ZhaLiPeng
发布时间:2018年07月05日 23时43分
本文字数:本文一共有976字
更新历史: Blame, History  文本模式: .md Raw
原始链接:https://imzlp.me/posts/11515/
许可协议: CC BY-NC-SA 4.0
转载请保留原文链接及作者信息,谢谢!
您的捐赠将鼓励我继续创作!