用 JS 写了两个 leetcode 的小工具,爬自己的 leetcode 代码和把代码用单页应用呈现出来 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
ma63d
V2EX    程序员

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

  •  3
     
  •   ma63d 2016-12-23 20:21:10 +08:00 5908 次点击
    这是一个创建于 3228 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    然后用 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

    第 1 条附言    2016-12-24 02:47:57 +08:00

    leetcode-viewer的响应式改造已经完成,大家如果觉得不错可以给个star,谢谢啦~

    28 条回复    2017-04-26 16:47:24 +08:00
    lwjcjmx123
        1
    lwjcjmx123  
       2016-12-23 20:31:22 +08:00 via Android
    能做一下响应式设计吗?移动端没法看,哈哈,如果不是看了介绍,还以为是 vue 官网呢
    470326964js
        2
    470326964js  
       2016-12-23 20:33:31 +08:00
    赞一个
    ma63d
        3
    ma63d  
    OP
       2016-12-23 20:40:46 +08:00 via iPhone
    @lwjcjmx123 嗯嗯 响应式最近在改
    样式风格主要是当时做的时候想着跟我自己的博客风格保持一致,而自己的博客就是用 vue 搭的,当初样式参考的 vue 官方博客,所以这个页面跟 vue 官网的样式很像很像.而且自己用 vue 较多,洗脑严重,觉得官网风格还挺好看的....哈哈哈 可能得把 logo 先换了
    ma63d
        4
    ma63d  
    OP
       2016-12-23 20:41:04 +08:00 via iPhone
    @470326964js 哈哈,谢谢啦~
    finian
        5
    finian  
       2016-12-23 20:51:44 +08:00
    vimquee
        6
    vimquee  
       2016-12-23 20:52:37 +08:00
    卧槽,好用,牛逼。
    ma63d
        7
    ma63d  
    OP
       2016-12-23 20:55:29 +08:00 via iPhone
    @vimquee 哇,这这这,多谢多谢~
    dxcqcv
        8
    dxcqcv  
       2016-12-23 21:28:39 +08:00
    学习一波,一直没想到怎么用 generator 的地方
    lsmgeb89
        9
    lsmgeb89  
       2016-12-23 22:13:00 +08:00
    leetcode 都不能正常保存刷过题的代码,过一整子就没了。
    ma63d
        10
    ma63d  
    OP
       2016-12-23 22:28:27 +08:00   1
    @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
        11
    ma63d  
    OP
       2016-12-23 22:29:08 +08:00
    @lsmgeb89 那这个把提交的代码爬到本地的小工具就更值得你拥有啦~
    ma63d
        12
    ma63d  
    OP
       2016-12-24 03:51:54 +08:00 via iPhone
    @lwjcjmx123 响应式搞定啦~
    lsmgeb89
        13
    lsmgeb89  
       2016-12-24 04:14:44 +08:00
    @ma63d

    已 star 支持。

    我只是吐嘈下 leetcode ,我刷题的代码也存一份 github 。
    vghdjgh
        14
    vghdjgh  
       2016-12-24 07:12:18 +08:00
    leetcode 上自己写的代码是在 localstorage 里存着呢,不用爬,可以直接复制或遍历出来的。
    EchoUtopia
        15
    EchoUtopia  
       2016-12-24 09:21:38 +08:00
    真不错,就是代码字体有点小
    justyy
        16
    justyy  
       2016-12-24 09:33:30 +08:00
    不错。
    不过我都是 AC 一题 就写一篇博文 记录, 这样也不怕丢
    再次 打广告: https://helloacm.com 我的英文计算机博客
    ma63d
        17
    ma63d  
    OP
       2016-12-24 11:02:52 +08:00
    @vghdjgh localstroage 里确实是有的,但是没法用程序读出来嘛,遍历最多也就能显示在 console 里,没法自动写入到本地文件,手工存取的话,一百多道题.....
    ma63d
        18
    ma63d  
    OP
       2016-12-24 11:04:40 +08:00
    @EchoUtopia 多谢反馈哈,我是在自己笔记本上开发的,在手机和 mac 上看起来感觉都挺合适的,没试过大屏显示器,这个确实得考虑一下,屏幕太大时可能字体有点小了。
    ma63d
        19
    ma63d  
    OP
       2016-12-24 11:12:38 +08:00
    Omg....大神,涉猎的领域太广了。。。。。
    lwjcjmx123
        20
    lwjcjmx123  
       2016-12-24 11:45:59 +08:00 via Android
    @ma63d 可以的,小伙子,你这水平可不能说是前端小白。
    lancelot
        21
    lancelot  
       2016-12-24 14:21:30 +08:00
    做的很不错啊,很可以了。这才是 v2exer 的风格。
    lijsh
        22
    lijsh  
       2016-12-24 15:06:08 +08:00
    支持一下,看过 co 的源码,叹服不已。
    ma63d
        23
    ma63d  
    OP
       2016-12-24 22:02:11 +08:00
    @lijsh 是啊,真心觉得 tj 太神了,写出这样的程序真心佩服。。。关键是 koa , express , jade , ejs , stylus ,全都是他搞出来的,实在是大写的服
    zhangolve
        24
    zhangolve  
       2016-12-25 22:47:58 +08:00 via Android
    开头说自己前端小白,实在过谦了。
    AlisaDestiny
        25
    AlisaDestiny  
       2016-12-25 23:29:51 +08:00
    @justyy 为什么都这么厉害啊。网站全英看不懂。。
    @ma63d 为什么我在源码里没看到你页面里引用的 app.xxxxxx.js 呢
    ma63d
        26
    ma63d  
    OP
       2016-12-26 11:16:39 +08:00
    @AlisaDestiny 额,这个 app.xxxxx.js 是用 webpack 打包出来自动插入到页面中的。
    CallFold
        27
    CallFold  
       2017-01-16 23:48:36 +08:00
    赞一个~
    daimao
        28
    daimao  
       2017-04-26 16:47:24 +08:00
    楼主 666
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1311 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 16:55 PVG 00:55 LAX 09:55 JFK 12:55
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86