目录
  1. 1. Update

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

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

2020.08.27 更新:把 API 文档更新至 UE4.25。

先来看一下成果图(我在 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.com/notes) 里查看。

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

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

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

首先要安装 bs4:

1
$ pip install bs4

然后执行脚本生成:

1
$ python 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
32
33
34
35
36
37
# 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;
}

#head {
width:100%;
clear:both;
display: none;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 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 下即可。

Update

我创建了一个 git 仓库,来存放生成的文档版本:UE4_API_FOR_DASH,可以在仓库的 Release 中下载。

20200827 更新

20190628 更新