知乎日报 里面有一节,叫做⎾如何正确的吐槽⏌,里面有很多很有意思而有短小的回答,基本上我我每天都会看一眼。所以我就写了脚本把他们全部抓了下来,放到自己的服务器上,同时每天还在定时去抓取当天新出来的数据,然后用 swift 写了一个 app 来从自己的服务器获取数据来看。

下面记录一下做这件事的过程。

抓取数据

要抓取知乎的吐槽数据,第一步就是要知道它对应的 URL ,这个获取方法也很简单,直接抓个包就能知道了,具体的形式大概如下这样:

  • http://news-at.zhihu.com/api/4/section/2/before/xxxxxx , 这个是获取整个吐槽的标题列表的url;
  • http://news-at.zhihu.com/api/4/story/xxxxx ,这个是获取具体某一天的内容的url。

创建数据库

这个数据量并不大,我建了两张表,一张存索引,一张存每天具体的内容。如下图:

Mysql表
Mysql表

搭建服务器

有了数据,下一步就是提供 CGI 接口给外部调用获取数据,然后显示。

然后,我用 nginx + django 搭了一个服务器,提供了三个接口,都是返回 JSON 格式的数据,三个接口具体如下:

  • http://104.128.85.9:8001/api/gethomelist:获取首屏的数据列表;
  • http://104.128.85.9:8001/api/getnextlist?timestamp=1434666598:下拉刷新的时候获取新增数据;
  • http://104.128.85.9:8001/api/getstorydetail?id=4827840:获取某一天具体的内容。

可以看得出来,我这三个接口都是为了给 app 端调用而设计提供的,所以下一步就是完成一个 app 把这些内容显示出来。

app 端显示

app 端的工作就是:

  • 通过网络请求获取数据;
  • 解析 JSON 数据然后根据一定的排版显示。

当然,我也是只实现了一个极其简陋的效果,直接放图好了: app图

App效果图
App效果图

上面两个图是历史列表和具体某一天内容的截图,下面再放一个应用图标的图: 上面有个图标乱入了,这个是我学习 swift 的做的一个练习,具体可以看这篇:点我.

整个过程大概就是这样。

附件资料

上面提到的服务和抓去知乎数据的代码在这里:点我

app 源码在这里:点我

2015.07.26