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

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

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():
    # 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("xxxxxxxxxxxxxxxxxxxx", "xxxxxxxxxxxxxxxx")
    print(
    b.insert(
        'ncov_db', # 表名
        data
    ).jsonData # 輸出json格式的內容
)

if __name__ == '__main__':
    main()

今天就先寫到這把,這塊其實半個鍾就能搞定,上面寫的4個小時是解決了一大堆雜七雜八的問題。

感興趣可以關注我的公衆號,微信搜索 zixiao的寫作館

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章