如何4小時作出一個《新型冠狀病毒同程查詢》 #1

很開心在昨天作出了《新型冠狀病毒同程查詢》這個工具,一方面給過年不能出門閒的發慌的本身找了些事情幹,另外一方面也幫助到了許多人,今天來扒一扒我到底作了些啥。(其實寫教程比寫網站還要花時間=_=,不過很慶幸過年回來還背了一個筆記本,否則早就瘋了)html

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行代碼就取到了數據並打印了出來python

#!/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等。json

我這邊只用到了雲存儲的功能,登陸進去建一張表,而後開始插入數據。插入數據也仍是用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的寫做館瀏覽器

相關文章
相關標籤/搜索