用 JS 写了两个 leetcode 的小工具,爬自己的 leetcode 代码和把代码用单页应用呈现出来

2016-12-23 20:21:10 +08:00
 ma63d

楼主是个前端小白,快要毕业了,最近也踏上了刷题的不归路。

然后用 JS 造了俩轮子,一个是leetcode-spider, leetcode 在国内访问实在太慢,看自己过往写的代码真的很头疼,所以基于 es6 的generatorco写了个爬虫,爬自己提交的代码到本地,代码就可以通过 github 等工具管理起来了。

另外一个就是leetcode-viewer。代码既然爬下来了,所以我想了想怎么把他呈现出来, 1 百多道题的解题源码,如果放到自己的博客上面去,那么要开一百多篇文章,太麻烦了,自己的博客也会被淹没这些在 leetcode 源码里。其实这些解题源码全都是静态文件呀,这个网页也不用动态逻辑,那我完全可以基于backend-free(无后台)架构来弄啊,如果你用 hexo 等静态博客,那你就明白我想做什么了。

我先把 leetcode 解题代码写进 json 里,然后用Vue2.x做一个单页应用的网页, JS 直接向静态服务器发 Ajax 请求,去请求这个 json 文件,并把里面的代码内容呈现出来,一个 leetcode 源码呈现网站就这么搞起来了,而且是纯静态的,发到 github pages 或者你自己的服务器上,就直接上线了!而且写了点逻辑,支持你在代码文件夹里写 markdown 文件,当做解题心得,也增加了对多说评论插件的支持。于是一个带搜索功能、带评论、带自己的解题心得、带源码、带 leetcode 题目的 leetcode 博客就这样搭建起来了。完全的静态网页,扔到 github pages 就上线了。

github pages 线上 demo 在此

自己结合自己的使用体验,对这两个工具做了挺多优化,感觉还挺好用了,爬虫支持增量爬取,静态网页每次有新代码下载下来时更新时间也只需要一秒钟甚至更短。而且搭起来的这个网页也相当于一个 leetcode 解题博客,可以跟刷题的同学们交流解题思路,也相当于做一个个人展示把,明年找工作的时候可以粘在简历里。现在分享出来,大家有需要的就自己使用吧。

leetcode-viewer

leetcode-spider

5475 次点击
所在节点    程序员
28 条回复
lwjcjmx123
2016-12-23 20:31:22 +08:00
能做一下响应式设计吗?移动端没法看,哈哈,如果不是看了介绍,还以为是 vue 官网呢
470326964js
2016-12-23 20:33:31 +08:00
赞一个👍
ma63d
2016-12-23 20:40:46 +08:00
@lwjcjmx123 嗯嗯 响应式最近在改
样式风格主要是当时做的时候想着跟我自己的博客风格保持一致,而自己的博客就是用 vue 搭的,当初样式参考的 vue 官方博客,所以这个页面跟 vue 官网的样式很像很像.而且自己用 vue 较多,洗脑严重,觉得官网风格还挺好看的....哈哈哈 可能得把 logo 先换了
ma63d
2016-12-23 20:41:04 +08:00
@470326964js 哈哈,谢谢啦~
finian
2016-12-23 20:51:44 +08:00
👍
vimquee
2016-12-23 20:52:37 +08:00
卧槽,好用,牛逼。
ma63d
2016-12-23 20:55:29 +08:00
@vimquee 哇,这这这,多谢多谢~
dxcqcv
2016-12-23 21:28:39 +08:00
学习一波,一直没想到怎么用 generator 的地方
lsmgeb89
2016-12-23 22:13:00 +08:00
leetcode 都不能正常保存刷过题的代码,过一整子就没了。
ma63d
2016-12-23 22:28:27 +08:00
@dxcqcv generator 要结合[co]( https://github.com/tj/co)来用,而且主要是在 node 上用,在浏览器端的话一般受限于兼容性问题,虽然可以用 babel 转码搞定,但是前端的较为繁琐的异步流程其实不多,所以使用场景有限。

在 node 上的话 generator 的使用场景就很大了,主要是用来解决回调地狱的。以往在 node 上写服务的话都是基于回调(基于 promise 本质也一样)来写,你比如用 node 自带模块读一个文件的话就是`fs.ready('a.txt', function(err,data){//在这里写对 data 的处理})`这种,当你的异步流程比较多,比如你要读 a 文件然后根据内容去读 b 文件,然后读好以后写入 c 文件再之后把内容 ajax 返回回去,那么就有很多层回调嵌套,层数非常深,代码可读性很差,而且流程控制很糟糕。

用 yield generator 和 co 的话就非常简单, let data = yield fs.read('a.txt') 这种写法,简直跟同步的执行一样,代码可读性、流程控制等问题就都没啦, try catch 也可以用了。
ma63d
2016-12-23 22:29:08 +08:00
@lsmgeb89 那这个把提交的代码爬到本地的小工具就更值得你拥有啦~
ma63d
2016-12-24 03:51:54 +08:00
@lwjcjmx123 响应式搞定啦~
lsmgeb89
2016-12-24 04:14:44 +08:00
@ma63d

已 star 支持。

我只是吐嘈下 leetcode ,我刷题的代码也存一份 github 。
vghdjgh
2016-12-24 07:12:18 +08:00
leetcode 上自己写的代码是在 localstorage 里存着呢,不用爬,可以直接复制或遍历出来的。
EchoUtopia
2016-12-24 09:21:38 +08:00
真不错,就是代码字体有点小
justyy
2016-12-24 09:33:30 +08:00
不错。
不过我都是 AC 一题 就写一篇博文 记录, 这样也不怕丢
再次 打广告: https://helloacm.com 我的英文计算机博客
ma63d
2016-12-24 11:02:52 +08:00
@vghdjgh localstroage 里确实是有的,但是没法用程序读出来嘛,遍历最多也就能显示在 console 里,没法自动写入到本地文件,手工存取的话,一百多道题.....
ma63d
2016-12-24 11:04:40 +08:00
@EchoUtopia 多谢反馈哈,我是在自己笔记本上开发的,在手机和 mac 上看起来感觉都挺合适的,没试过大屏显示器,这个确实得考虑一下,屏幕太大时可能字体有点小了。
ma63d
2016-12-24 11:12:38 +08:00
Omg....大神,涉猎的领域太广了。。。。。
lwjcjmx123
2016-12-24 11:45:59 +08:00
@ma63d 可以的,小伙子,你这水平可不能说是前端小白。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/329781

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX