如何4小时做出一个《新型冠状病毒同程查询》 #1

2,437 阅读3分钟

很开心在昨天做出了《新型冠状病毒同程查询》这个工具,一方面给过年不能出门闲的发慌的自己找了些事情干,另一方面也帮助到了许多人,今天来扒一扒我到底做了些啥。(其实写教程比写网站还要花时间=_=,不过很庆幸过年回来还背了一个笔记本,不然早就疯了)

1原站

感谢原网站,在微信传播的很广泛,我做的就是仿写的这个网站,扒了一些数据,参考了一些代码。我就假设各位对啥都不懂哈,从最基本的讲一讲。 原站点基于纯静态的网站,只有html+js就可以搞定。想要查看源代码,只需要在浏览器中点击鼠标右键->查看网页源代码 即可。通过源码就可以看出使用的前端样式框架是layui,表格直接就是layui的数据表格。不得不夸赞一下layui,数据表格的功能挺全的,分页也都是封装好的。

通过按F12,我们可以查看更多信息,切换到Network的选项卡,然后刷新页面,我们可以看到发送的请求。如图所示的是最终请求数据的那个http get请求,请求的url地址是http://2019ncov.nosugartech.com/data.json?438970。在更早的v1.1版本中,当时请求的地址是https://ncov2019.oss-cn-beijing.aliyuncs.com/cache?0.5397362967895694,可见一开始数据是以静态的方式放在阿里云的对象存储了,后面重写的v1.2版本是更换了后端。

2仿写第一步,爬数据

其实说来惭愧,根本不是爬数据,因为总共就200多条数据,接口也是放开的。爬数据只要用Python就可以了,在自己的电脑上装一个python3(更多时候可能需要用到多环境,我个人在用anaconda,一个管理Python环境和包依赖的工具) 然后用下面6行代码就取到了数据并打印了出来

#!/usr/bin/python
# -*- coding: utf-8 -*-
import urllib.request
import json

# url = 'https://ncov2019.oss-cn-beijing.aliyuncs.com/cache?0.5397362967895694'
url = 'http://2019ncov.nosugartech.com/data.json'
f = urllib.request.urlopen(url)
res = json.loads(f.read())
print(res)

3 仿写第二步,做个后端

原站一开始用对象存储的做法很不错哈,简单省事效率高,还有缓存机制可用。不过出于要做点不同的东西的原则,我用了bmob这个BaaS(backend as a service)服务作为后端( 感兴趣可以注册,推荐码$VS1)。非广告,还可以选择LeanCloud等。

我这边只用到了云存储的功能,登录进去建一张表,然后开始插入数据。插入数据也还是用python,具体可参考bmob的文档。步骤是引入一个python文件,里面是封装好的函数。然后遍历爬下来的数据一条一条进行插入。代码如下

#!/usr/bin/python
# -*- coding: utf-8 -*-
import json, urllib
from urllib.parse import urlencode
import urllib.request
from bmob import *


def main():
    #配置您申请的APPKey
    appkey = "xxxxxxxxxxxxxxxxxxxxx"

    #新闻头条
    # url = 'https://ncov2019.oss-cn-beijing.aliyuncs.com/cache?0.5397362967895694'
    url = 'http://2019ncov.nosugartech.com/data.json'
    f = urllib.request.urlopen(url)

    res = json.loads(f.read())
    print(res)
    #遍历,然后插入bmob
    for item in res['data']:
        print (item)
        insert_to_bmob(item)

# 向bmob写入数据
def insert_to_bmob(data):
    #b = Bmob("appid", "restkey")
    b = Bmob("0d7986aeaa130418420d77e8457679b5", "87727c86dcb3f297f568ddf760e19c8a")
    print(
    b.insert(
        'ncov_db', # 表名
        data
    ).jsonData # 输出json格式的内容
)

if __name__ == '__main__':
    main()

今天就先写到这把,这块其实半个钟就能搞定,上面写的4个小时是解决了一大堆杂七杂八的问题。

感兴趣可以关注我的公众号,微信搜索 zixiao的写作馆